易语言程序练手,一天不破,手痒痒.
本帖最后由 pking5465 于 2012-3-31 12:01 编辑对于用易语言编写的软件,用W32Dasm,Trw,Od,SoftIce,DeDe等都不能直接从程序中分析到有用的信息,对软件也起到了一定的保护作用。程序运行起来像加了一层壳一样,一切都在库里面进行,你如果用OD载入,不运行程序,就开始查找程序中的某些地址是找不到的。用PE类似的工具检查程序的区段,如果有“.ecode”这样的区块,一般情况下就是易程序(作者自己添加的区块名为 “.ecode”,不在其中)。
准备工具
Ollydbg1.11 Share修改版
OD中文字符分析插件
http://www.boersoft.com/soft/lh.exe爱家小精灵 V6.8
主要功能:
1.财务管理,包括:收支录入、历史查询、月度查询、数据统计、图表显示、项目查询等。
2.日记本。
3.通讯薄。
4.债务管理。
5.计时提醒。
6.物品管理
……
易语言程序如何设断点?
易语言的下断方法常用的有如下几种:
1.OD载入,F9运行程序,填好用户名和序号,alt+M,找到“.ecode”段,F2断了它。
2.OD载入程序,静态看不出任何破绽。F9运行,Alt+M打开内存镜像,找到程序的区段“=.ecode”,眼睛锁定Ecode段,双击它。易语言要把相关资源读取到代码段里面运行。这时候打开16进制编辑模式,点右键换成反汇编模式,滚动条向下拉不久看到破绽。
3. 利用函数设断点。对于易语言,其实一个万能断点是GetWindowTextA。因为系统会用这个函数进行其它的*作,所以有可能你在此设断时,并不是你要的东西。还有一个特点就是易语言好像喜欢用浮点运算。如果当程序注册失败时,出现注册失败提示的话,那么它就又暴露了一点,那就是MessageBoxA函数,也可在这个函数上设断。从这里会很容易的走到程序的领空,到了程序的领空我们就利用OD的字符分析插件,分析出很多程序的字符提示(我很偏爱它);等断在这里之后,看看堆栈区里,能发现很多有用的东西。
4. 设置内存断点,来跟踪达到特殊效果。至于如何设断点,我建议的做法是:当程序运行起来之后,输入用户名跟注册码先注册,要程序不退出(如果是重启验证的程序,我们要先设置断点),在OD中Alt+M,然后再Ctrl+B,输入自己刚才输入的数据,在到数据段后,我们再设置内存访问或者写入断点,5.用TRW破解,下万用断点。命令:“bpx hmemcpy”,断下后,记住断点,再用你喜欢的OD调试去吧。
实战篇
下面让我们一起动手来做易语言程序的破解,正好我手里有一个小软件是易语言的。由于这里的重点是易语言程序的设断,不写算法分析,有兴趣的朋友可以自己研究研究。
在OD中载入爱家小精灵,设置断点“bp MessageBoxA”,F9运行,在程序的帮助里面选择注册。输入注册码为123456,点确定中断在MessageBoxA函数里面(77E16544 U> 55 push ebp),Ctrl+F9弹出对话框,提示:“输入注册码成功,重新启动验证”,点击确定,再3次Ctrl+F9就回到了程序的领空。现在用OD中文字符分析插件分析(因为我们知道易语言程序运行起来像加了一层壳一样,一切都在库里面进行,所以要让程序运行才能分析出有用的字符)。 设置断点:
1.在数据“696F122132A……19818A1”处(0060C5D5)设置断点。根据经验这里有蹊跷,所以不管那么多,设置一个断点再说。前面不远有数据库(0060C590),下面不远又是一个数据库,在后面有“weizhuceedb”汉语拼音好象是“未注册”+“edb”是数据库(这里就要靠个人的经验很直觉了,做多了直觉就会好的)。
2.在0060C75C发现了 ("weizhuceedb"),设置断点。
0060C75C 6840374000 push 爱家小精.00403740; ASCII "weizhuceedb"
3.继续找字符,分别发现:
“请您注册软件,此项限制在注册后可以解除!”:
00648B6F 68CB614000 push 爱家小精.004061CB; 请您注册软件!\r\n此项限制在注册后可以解除!
“未注册用户”在0064627E处:
0064627E 68BE604000 push 爱家小精.004060BE; 未注册用户
“你还没有注册,不能使用本功能.”:
00646296 68C9604000 push 爱家小精.004060C9; 你还没有注册,不能使用本功能。
Ctrl+F2重新载入程序,分析程序:
0060C513 E8 6CCF0600 call 爱家小精.00679484 ; 计算ID号
根据分析发现两个爆破点:
爆破点一:
0060C650 837D 90 00 cmp dword ptr ss:,0
0060C654 0F84 07000000 je 爱家小精.0060C661 ; 爆破点一:如果等于零,跳转表示未注册或者注册失败。
0060C65A C745 AC 0100000>mov dword ptr ss:,1 ;注册成功,把 赋值为1。 是注册成功与否的标识。
0060C661 68 00000000 push 0
0060C666 BB 64050000 mov ebx,564
0060C66B E8 14CE0600 call 爱家小精.00679484
爆破点二:
0060C72B B8 01000000 mov eax,1 ;EAX赋值为1
0060C730 85C0 test eax,eax
0060C732 /0F84 22000000 je 爱家小精.0060C75A ; 爆破点二:根据EAX的值判断是否注册,跳转表示未注册或者注册失败。
0060C738 |6A 00 push 0 ;注册成功
0060C73A |68 36334000 push 爱家小精.00403336 ; ASCII "db\Record.edb"
0060C73F |6A FF push -1
0060C741 |6A 08 push 8
0060C743 |68 A3130116 push 160113A3
0060C748 |68 01000152 push 52010001
0060C74D |E8 26CD0600 call 爱家小精.00679478
0060C752 |83C4 18 add esp,18
0060C755 |E9 1D000000 jmp 爱家小精.0060C777
0060C75A \6A 00 push 0 ;未注册或者注册失败
0060C75C 68 40374000 push 爱家小精.00403740 ; ASCII "weizhuceedb",未注册
0060C761 6A FF push -1
上面两个爆破点任改一处既注册成功,建议修改爆破点一(0060C654)处,因为这里是设置成功与否的标识,后面的验证就是根据这里的值来判断是否注册。具体方法是:把0060C654 处的“je 爱家小精.0060C661”改为“NOP”或者把0060C732处的“je 爱家小精.0060C75A” 改为“NOP”。
好了,破解完成。本文只是简单谈了谈易语言程序的破解思路,用了一个简单的程序来做演示,目的在于交流,起到抛砖引玉的作用。
{:301_1001:}呵呵进来学习学习 嗯..挺好的..能不能发一个W32静态破解的方法..学习一下! 学习学习 谢谢 基本上是这样,但目前的易语言在OD里找不到其库函数和E-CODE段。 下来看看 看看 能用吗 我也是进来 学习下。1 谢谢楼主分享!这样就方便学习了! 看看, 学习学习