【文章标题】: 易语言变态反调试自校验多重验证
【文章作者】: BoXer[ICY]
【作者邮箱】: [email]scship@163.com[/email]
【作者主页】:
http://boxer.yo2.cn
【作者QQ号】: **********
【软件名称】: 艺*********转换系统 V2007
【软件大小】:
【下载地址】: 自己搜索下载
【加壳方式】: 没有
【保护方式】: 反调试+自校验
【编写语言】: 易语言
【使用工具】: 看雪主页的od
【操作平台】: 盗版中的正版xp sp2
【软件介绍】: 一款用来实现批里*******进行批量相互智能转换的工具
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一位看雪的朋友发邮件叫我看看这个软件,因为他说易语言,我觉得应该比较容易吧,然后一试。。。
才知道原来容易的话人家就不会找别人帮忙了。。。
这个软件非常的恐怖。。。像我们这样的菜鸟真的没遇见这样的情况
过程如下:
===================================================================================================
1。信息收集
查壳,是易语言写的,运行软件,标题有个“试用版”提示,点击 帮助-注册,注册框上面也有“试用版”字符
有个硬件码,随便输入用户名和注册码,提示重启验证。
===================================================================================================
2。恐怖的反调试和自校验
习惯性的od载入,F9运行。。。od一下子就不见了!
以为没有设置隐藏od,然后设置一次再来F9,一样的下场,od给秒杀。。。
换各种版本的od,看雪版,fly版,汉化第三版,shooo的野猪版(还有些私人版本)。。。。等等等等
这些od都是一样下场--给秒杀。
换个思路,直接改关键的注册跳转试试。
由于这个软件是非独立编译,我们要找到真正的易语言程序的oep,可以用脚本,也可以自己手动跟
(我以前总结的搜索“ FC DB E3 ”在这个软件不能用的)
到了下面的oep:
0042C59F FC cld ; (initial cpu selection)
0042C5A0 DBE3 finit
我们就可以搜索字符串,找到下面这个字符串(而最上面那几项表明是MD5字样,可能是MD5校验了):
Ultra String Reference, 条目 11
Address=0041A7AD
Disassembly=push 艺匠、知.004036AA
Text String=注册窗口(正式版)
双击来到这里:
0041A7A1 837D F8 01 cmp dword ptr ss:[ebp-8], 1
0041A7A5 0F85 76000000 jnz 艺匠、知.0041A821 ;nop掉
0041A7AB 6A 00 push 0
0041A7AD 68 AA364000 push 艺匠、知.004036AA ; 注册窗口(正式版)//停在这里
0041A7B2 6A FF push -1
0041A7B4 6A 08 push 8
0041A7B6 68 98020106 push 6010298
0041A7BB 68 99020152 push 52010299
0041A7C0 E8 501E0100 call 艺匠、知.0042C615
往上看找到一个跳转:0041A7A5 0F85 76000000 jnz 艺匠、知.0041A821
nop掉保存。
双击运行保存修改的,结果。。。没反应。估计是程序做了校验了。
(大家不妨用记事本打开同目录下的dp1.fne文件,看看最下面的中文写什么,-_-! )
===================================================================================================
3。菜鸟遇到难题时候怎么办?
在实在没办法的情况下,我看到了看雪一个帖子说,看雪精华是破解的MSDN,菜鸟们应该人手一份
里面几乎包含了全部菜鸟遇到的难题的解决方法或者思路。
所以,我还是拿出了下载已久的看雪精华,终于在精华7那里找到了相关的精华
weiyi75[Dfcg][D.4s]大侠(这位大侠就是二哥吧?!)的文章:
《易语言幻真随心听 3.83反调试+破解分析》
《易语言Windows 系统风云 V4.5 两层简单壳反反脱壳+(一锅端+1)破解》
这2篇文章起了启发作用啊!!!
后来卡卡也告诉我去自校验反调试的方法:
载入主程序,下 bp ExitProcess 断点,F9运行,断了下来,查看堆栈如下:
0012FE20 100298AD /CALL 到 ExitProcess 来自 krnln.100298A7
0012FE24 00000000 \ExitCode = 0
0012FE28 /0012FE54
0012FE2C |0042ABB0 返回到 艺匠、知.0042ABB0 来自 艺匠、知.0042C5DF
我们跟ctrl+G跟到 0042C5DF ,发现一堆跳转,应该是去调用验证是否存在调试器的
我们把下面这句(就是第一个跳转):
0042C5DF - FF25 5E874100 jmp near dword ptr ds:[41875E] ; krnln.10029892
改为 retn ,然后保存为1.exe
再打开文件,主程序出现了!这时候自校验已经除去了!
OD载入1.exe,F9,也能运行了!不过有错误提示!
第一个提示是“不知如何回避位于地址00404090的命令”,我们Ctrl+G去到00404090
直接把它nop掉,保存为2.exe。
od载入2.exe,F9运行,又有一个错误提示:“不知如何回避位于地址00404214的命令”
我们Ctrl+G去到00404214,同样把它nop掉保存为3.exe
这时候od载入3.exe,F9后终于可以正常运行了。退出OD双击3.exe,程序也能正常运行。
===================================================================================================
4。搞定注册验证
od载入3.exe,先去到易语言的oep
0042C59F FC cld
0042C5A0 DBE3 finit
然后下 bp RegOpenKeyExA
(菜鸟问为什么会是这个函数?这个是试出来的,试几个注册表的函数就有了,再不行就用万能断点工具)
F9,停了下来,然后几次F9,注意堆栈,发现出现了有关注册的信息后就停止F9了
比如出现下面信息就可以停下来:
0012FBC8 10061430 /CALL 到 RegOpenKeyExA 来自 krnln.1006142A
0012FBCC 80000001 |hKey = HKEY_CURRENT_USER
0012FBD0 009C3FE0 |Subkey = "SOFTWARE\foxzf"
0012FBD4 00000000 |Reserved = 0
0012FBD8 00020019 |Access = KEY_READ
0012FBDC 0012FBF0 \pHandle = 0012FBF0
往下翻动堆栈,看到这么一句:
0012FC84 0041A860 返回到 3.0041A860 来自 3.0042C609
取消断点,跟去0041A860
0041A860 83C4 28 add esp, 28 ;来到这里
0041A863 8945 FC mov dword ptr ss:[ebp-4], eax
0041A866 8B45 FC mov eax, dword ptr ss:[ebp-4]
往上翻到 0041A825 处
0041A825 55 push ebp ;从到这里开始改
0041A826 8BEC mov ebp, esp
0041A828 81EC 10000000 sub esp, 10
0041A82E E8 23F1FFFF call 3.00419956
改为下面:
xor eax,eax
inc eax
retn
按照上面改法保存4.exe,然后运行,发现主程序标题已经是xx专用版了(这个作者也真是的。。。)
看看注册窗口,已经是正式版了,而且注册按钮已经灰了。
是不是大功告成了呢?
===================================================================================================
5。再次突破功能验证
看看注册要求那里写明,不注册的是不能用最后3个选项的,我们点最后3个选项其中一个,又弹出注册窗口了
看来没有真正的爆破,功能还是有限制啊!
od载入4.exe,F9运行,下 bp RegOpenKeyExA
再次下注册表的断点就是因为那个功能限制还是读取注册表的注册信息判断是否注册
所以就下注册表断点,其实下窗口断点也是可以的,大家可以随意发挥
点主程序功能受限制的3个选项其中一个,断下来后
看到堆栈往下找到如下:
0012FB3C |0042B4E7 返回到 4.0042B4E7 来自 4.00429372
来到 0042B4E7 ,往上找到起点:
0042B3C6 55 push ebp
0042B3C7 8BEC mov ebp, esp
0042B3C9 81EC 28000000 sub esp, 28
同样改标志位:
xor eax,eax
inc eax
retn
保存为5.exe。
运行程序,功能限制去掉,跟注册的一样了。
===================================================================================================
6。完善一下
由于我们处理反调试的时候把程序的“退出系统”的按钮功能搞没了。。。就是这个按钮按了退出没反映
我们用EcE来查看到按钮事件,退出按钮是 004289D4
od载入5.exe去到 004289D4 ,改为 call 0042C5DF (这个是易语言oep那里最后的一个call,就是退出的call)
这样就可以用“退出系统”按钮了。
如果想运行多个程序而没有烦人的“该应该程序已经运行”提示
可以把 0042BA5B /0F85 3A000000 jnz 6.0042BA9B 这句改为jmp就可以了。
--------------------------------------------------------------------------------
【经验总结】
菜鸟第一次遇到那么猛的反调试,但是没有给吓到,而是迎难而上,充分借助已有的精华和别人的方法完成了这次破解。
所以菜鸟们不要遇到什么问题都立刻去发帖问高手,应该首先想办法解决,这样才能提高。
同时希望高手能多写点东西给菜鸟,等我们遇到困难的时候可以有个参考。
同时向作者致歉。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年04月07日 17:03:56
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课