版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://zhaiht.blogbus.com/logs/37875472.html
最近在学习过程中用到报表开发,使用了北京用友公司的CellCtrl报表控件。在网上查找到相关的资料进行学习研究(非商业用途),下面是从网上转摘的一篇文章,共同研究……
一、简介
CellCtrl控件是一个非常好用的控件,出于研究破解的目的,尝试了一个星期,终于出来一个比较完美的版本,修改的功能如下:
1、 Login函数修改,随便输入任何名字都可以注册。
2、 解决设计时开发环境退出的问题。
3、 在读入文件时,同时保存到另一文件。
二、运行效果
设计时的截图如下:
运行时打印预览的截图如下:
三、修改过程
现将修改的东东详细介绍一下,望批评指正。
首先编写一个例程,用于测试软件,实现非常简单这里不详细介绍了。
1、Login函数
例程中的调用是:
LocalizeControl一定要调用,要不就老是显示未注册。
用IDA打开CellCtrl5.ocx,过程比较漫长,我的机子用了近半个小时,找到Login函数实现地址,发现软件首先判断三个字符串是否为空,跳过就好了,后来又有一些调用,估计是判断注册数据是否正确,由于我的目的仅仅是让用户名”侠之大者”复制到正确的地址,所以只要没有引用第一个参数的统统不管,关键点如下图:
两个判断均会跳转到未注册函数里边,因为sub_10007FF0就是产生未注册字样的函数。
很简单,直接跳过这些代码就搞定了。
2、设计时开发环境退出问题
由于想到在控件放置到容器时会访问并行口狗狗,就搜索打开并行口函数未解,又想到一定有判断是否运行时的函数,但是查找会是大海捞针,只是有一点,运行时与设计时的区别,就是设计时有那个版本号出现,首先找到版本字串,然后发现只有3个地方引用到它,这样采用排除的方法,找到了判断的位置,如下图:
这回知道怎么改了,很简单,均让它返回运行时就可以了,结果超爽,不用读狗速度超快。
3、在读入文件时,同时保存到另一文件
这个是最难的,因为需要添加函数,查找所有地方,发现只有代码段最后有40h的空间,就在这里写代码吧,参考SaveFile函数,需要调用一个只有3个参数的函数,分别是保存文件名,“Cell51”,“0“,在数据段找个位置定义好文件名,然后添加函数如下:
在ReadFromBuffer函数中调用一下这个函数,表格就会被写到c:\testout.cll文件中。还需要到PE头那里修改代码段的大小,要不访问会越界的呦,并且需要将两个常量地址添加到重定位地址表,要不控件没有加载到10001000就会报错的,这让我头痛了两天呢。
四、重要说明
1、以上数据均基于CellCtrl5,3,8,0820版本,其它版本可能不同。
2、软件版权属于华软公司,本文只做研究交流之用,禁止做为商业用途,需要时请购买正版。
3、有建议请留言,共同提高才是交流的目的。
五、数据共享
软件链接如下:CellCtrl5.3.8.rar
压缩包中有修改后的控件,还有一个去除了输出文件功能的版本,原版由于文件大小的限制而没有放置,下载前请阅读说明。
由于博客的空间增大了,应大家要求传上原版:CellCtrl5.3.8_org.rar
六、时间标识
2009年4月15日,深圳南山区科技园。
2010年3月18日,深圳南山区科技园,上传原始控件,供大家研究。