找回密码
 注册帐号
查看: 4319|回复: 12

易语言程序破解炼刀

  [复制链接]
发表于 2009-8-27 10:10:45 | 显示全部楼层 |阅读模式
对于用易语言编写的软件,用W32Dasm,Trw,Od,SoftIce,DeDe等都不能直接从程序中分析到有用的信息,对软件也起到了一定的保护作用。程序运行起来像加了一层壳一样,一切都在库里面进行,你如果用OD载入,不运行程序,就开始查找程序中的某些地址是找不到的。用PE类似的工具检查程序的区段,如果有“.ecode”这样的区块,一般情况下就是易程序(作者自己添加的区块名为 “.ecode”,不在其中)。

准备工具
Ollydbg1.11 Share修改版  
OD中文字符分析插件
爱家小精灵6.7
主要功能:
1.财务管理,包括:收支录入、历史查询、月度查询、数据统计、图表显示、项目查询等。
2.日记本。
3.通讯薄。
4.债务管理。
5.计时提醒。
6.物品管理
……
下载地址:http://www.66608.com/

易语言程序如何设断点?
易语言的下断方法常用的有如下几种:
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:[ebp-70],0
0060C654 0F84 07000000 je 爱家小精.0060C661 ; 爆破点一:如果等于零,跳转表示未注册或者注册失败。
0060C65A C745 AC 0100000>mov dword ptr ss:[ebp-54],1 ;注册成功,把[ebp-54] 赋值为1。[ebp-54] 是注册成功与否的标识。
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”。
好了,破解完成。本文只是简单谈了谈易语言程序的破解思路,用了一个简单的程序来做演示,目的在于交流,起到抛砖引玉的作用

评分

参与人数 1魅力 +9 收起 理由
累了 + 9 继续努力

查看全部评分

发表于 2009-8-29 19:51:20 | 显示全部楼层
这个一定要收藏了
发表于 2009-9-1 10:03:32 | 显示全部楼层
本帖最后由 舞雪 于 2009-9-1 20:03 编辑

现在看来这算是复杂的呢




灌水有你这么灌得吗?
发表于 2009-11-9 22:49:53 | 显示全部楼层
值得收藏。我仔细阅读
发表于 2009-12-7 16:04:22 | 显示全部楼层
不错,蛮详细的,要是配上动画就更好了
发表于 2009-12-7 16:11:05 | 显示全部楼层
写的有点深了,好多地方看不太懂,学习
发表于 2009-12-7 16:25:51 | 显示全部楼层
值得收藏   有空再看
发表于 2009-12-7 21:52:01 | 显示全部楼层
哈哈,我已经收藏了,为自己以后的成功多做些准备资料,谢谢楼主了!
头像被屏蔽
发表于 2010-1-27 08:20:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2010-1-31 16:18:06 | 显示全部楼层
看不懂文化低了
发表于 2010-2-1 17:26:50 | 显示全部楼层
的确对新手是有些复杂,慢慢理解~谢谢楼主分享
发表于 2010-2-7 01:38:18 | 显示全部楼层
学习了.不过对于我来说有点深奥
发表于 2010-3-4 07:53:10 | 显示全部楼层
此贴太复杂了,学不会啊。
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

QQ|Archiver|手机版|小黑屋|依人网络官方网站 ( 陕ICP备19025998号-1 )

GMT+8, 2024-5-6 22:24 , Processed in 0.081678 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表