本帖最后由 拓海真一 于 2014-8-11 00:56 编辑
今天简单分析下E4A的破解方法,其实是灰常简单滴,仅供学习,支持正版
首先查壳,各种软件检测,各种入口分析,得出是UPX 小生大牛的UPX脱壳机就可以搞定,在此之前呢,我们先不脱壳,因为他是有暗装的,一旦脱壳就会秒退,MD5的破解最后会讲到
咳咳 好了,重点不在壳和自校验,我们继续看
1.先看下验证方式
这款软件是有可以算是三个验证方式,1:注册码验证,2:QQ网络验证,3:加密狗验证
最简单的当然还是注册码验证跟QQ网络验证啦,第三种验证方式我就先淘汰了
2.输入错误注册码查看效果
有个信息框 那就继续下API断点 bp MessageBoxA
断下后我们返回到易原体
向上追溯一直到某个JMP
这个JMP是会跳到这里的 通过简单的逻辑判断就可以知道是某个判断成立了 所以跳到了失败 (破解有A片送吗)
继续追溯到上图的地方,短跳跟长跳的区别是代码的长短,如果跳转到的地方距离目前过长某个字节 就会是长跳,短跳一般是可以忽略的, 长跳的机器码是占六个字节的
OK 那就是说这里je只要nop掉就可以注册成功了,我们来看看
OK 这下就可以用了,但是目前高兴还是太早了哟,因为这仅仅是注册提示成功了,编译还会验证
小受君不乖哟, 我们继续在je上面找,恒大说的关键CALL
[Asm] 纯文本查看 复制代码 005B1580 /E9 C5040000 jmp E4A.005B1A4A
005B1585 |6A FF push -0x1
005B1587 |6A 08 push 0x8
005B1589 |68 93A30116 push 0x1601A393
005B158E |68 90A30152 push 0x5201A390
005B1593 |E8 78410300 call E4A.005E5710
005B1598 |83C4 10 add esp,0x10
005B159B |8945 FC mov dword ptr ss:[ebp-0x4],eax
005B159E |8D45 FC lea eax,dword ptr ss:[ebp-0x4]
005B15A1 |50 push eax
005B15A2 |E8 34ABF6FF call E4A.0051C0DB
005B15A7 |8945 F8 mov dword ptr ss:[ebp-0x8],eax
005B15AA |8B5D FC mov ebx,dword ptr ss:[ebp-0x4]
005B15AD |85DB test ebx,ebx
005B15AF |74 09 je XE4A.005B15BA
005B15B1 |53 push ebx
005B15B2 |E8 35410300 call E4A.005E56EC
005B15B7 |83C4 04 add esp,0x4
005B15BA |837D F8 00 cmp dword ptr ss:[ebp-0x8],0x0
从上面可以看出有3个CALL 最后一条cmp是判断 ebp-0x8 这样的话就是说明某个CALL有push出关键或者mov给ebp-0x8关键数据
经过查看 发现
[Asm] 纯文本查看 复制代码 005B15A1 50 push eax
005B15A2 E8 34ABF6FF call E4A.0051C0DB
005B15A7 8945 F8 mov dword ptr ss:[ebp-0x8],eax
这个CALL下面会将ebp-0x8的值更改为eax的值 那就是说这个就是关键CALL
我们再依据je判断的值来看 只要让这个call执行后eax的值为非0就可以了
那我们回车进入CALL 来更改一下他的返回
[Asm] 纯文本查看 复制代码 0051C0DB B8 01000000 mov eax,0x1
0051C0E0 C2 0400 retn 0x4
0051C0E3 90 nop
注意这里的retn 0x4必须跟原来的retn一样
然后我们运行起来再编译一次看看
这样就没问题了
接下来就是打补丁什么的乱七八糟的 补丁不需要操心什么
3.写出修改版程序
我们先用UPX脱壳机直接脱壳,脱壳后运行看看报不报错,我这里运行起来后发现程序正常打开了但是却秒退了,那我们就继续载入od,发现有时候载入od不运行 时间过长以后再F9运行会直接闪退,通过各种退出API和线程终止的API拦截发现都不会断下,由此我们可以肯定是有外部程序阻止了程序的运行,首先我就把杀软关了,发现还是一样,通过观察任务管理器发现 E4A\sdk\tools\lib\adbtool.exe 这个程序正在运行,所以我先把它结束了,然后在od运行,发现可以运行起来了,但是时间长了又被终止了,而 E4A\sdk\tools\lib\adbtool.exe 又被运行起来了,首先结束掉这个程序 然后拖入od 查找字符串
发现了一个字符串很让人觉得可疑 95EB58995A32353F7D4F2A59021F7CD4 于是我用哈希计算器计算了原E4A.exe的哈希值 发现跟这个值一样 ,说明这个程序无论有无其他用处 主要的用途还是在防破解,我们双击字符串进入
[Asm] 纯文本查看 复制代码 0040155A > \68 AA4B4800 push adbtool_.00484BAA ; 95EB58995A32353F7D4F2A59021F7CD4
0040155F . FF75 DC push dword ptr ss:[ebp-0x24]
00401562 . E8 40FCFFFF call adbtool_.004011A7
00401567 . 83C4 08 add esp,0x8
0040156A . 83F8 00 cmp eax,0x0
0040156D . B8 00000000 mov eax,0x0
00401572 . 0F95C0 setne al
原理是计算程序和这个哈希值对比 那么我们只要让他的返回值是0就可以了,双击 0040155A > \68 AA4B4800 push adbtool_.00484BAA 修改为 mov eax,0x0 然后将call adbtool_.004011A7 nop 掉
这里注意要将CALL下的00401567 . 83C4 08 add esp,0x8 也NOP掉 否则会导致堆栈不平衡发生崩溃
到这里就全部修改完成了,接下来修改主程序然后写出文件就不用我多说了吧 然后运行起来 就不会被终结了,小猫腻已经被大老鼠吃掉了,小受君,看你还不乖
到此教程就结束了,仅供参考
@洛克、菲菲 @Shark恒 @瓜子吧3 @Hmily
还有@wan198600 同学 我发布爆破是为了学习,并不是主张破解软件使用来的 如果你想要更好的软件破解版就要学会从中学习经验自己动手破解想要的,不要做伸手党
|