-
关注Ta
-
- 注册时间 2010-02-02
- 最后登录 2010-10-30
-
- 发帖4317
- 在线290小时
- 精华27
- DB-167
- 威望-1
- 保证金0
- 桃子0
- 鲜花0
- 鸡蛋0
-
访问TA的空间加好友用道具
|
易语言程序破解炼刀 申精
对于用易语言编写的软件,用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”。 好了,破解完成。本文只是简单谈了谈易语言程序的破解思路,用了一个简单的程序来做演示,目的在于交流,起到抛砖引玉的作用。
|