本帖最后由 wang1234561211 于 2015-9-14 18:48 编辑
写在前面:
刚全部编辑完这个帖子(2015年8月21日 11:09:46)。作为新人,需要接触的东西太多,学习的东西也太多。也看了写大神的视频,匆匆的一遍看过去,感觉好轻松的东西,发现等自己上手的时候,还是大脑空白,什么也不会了。原来才发现大神的教程是需要好多遍的消化的。所以作为新人,能体会到这些艰难,所以我把尽最大努力写的详细点,方便像我一样的新手上手。
看大神们的教程,总是那么干净,轻松脱壳,轻松修复,然后轻松都破解了。 我写的教程,就没那么顺利,我把我自己摸索的过程,遇到的错误,走的弯路都写出来了,还有至今不能解决的问题,。这样自己也可以在编辑教程的时候同时思考。比如这次介绍的IAT修复,都是在写教程的同时发现了刚好的方法。
本文最后的破解为爆破,不涉及算法。也不会追码。等下午或者其他时间有空,慢慢摸索了。
本文也仅仅是帮主像我一样的新人的,当然非常希望大神指正文中的错误,太需要你们帮助了。
不求热心,CB等等,只为帮助新人。仅此而已
-------------------------------------------------------------------------------------------------------------------------------------------------
帐号注册4年半了,最近看到吾爱的破解教程,一时兴起学习了一点点。第一次发帖,如有不当,随时改正。本文是很新手的教程,只是自己在IAT修复处理上困惑好久,最终摸索到方法,写出来分享下了。
只提供教程,研究学习用,不提供下载。
1. 下载软件
原版下载地址:http://rj.baidu.com/soft/detail/27444.html?ald ,请选择普通下载,不然会安装XX全家桶的。
2. 安装、查壳
ASP2.12的壳,OD载入,使用脚本和ESP定律都可以很快找到OEP。
3.寻找OEP(介绍ESP定律脱壳方法,使用脚本一步都找到OEP了)
OD载入,提示压缩,是否分析,点否。
载入数据,代码如下
[Asm] 纯文本查看 复制代码 0118E001 > 60 pushad
0118E002 E8 03000000 call KEASY.0118E00A
0118E007 - E9 EB045D45 jmp 4675E4F7
0118E00C 55 push ebp
0118E00D C3 retn
0118E00E E8 01000000 call KEASY.0118E014
0118E013 EB 5D jmp short KEASY.0118E072
0118E015 BB EDFFFFFF mov ebx,-0x13
0118E01A 03DD add ebx,ebp
单步F8(按一下),右边寄存器窗口ESP和EIP变红,符合大神说的ESP脱壳定律。
右键ESP,选择HW break【ESP】 ,如下
F9,运行程序。
程序运行到如下代码位置
[Asm] 纯文本查看 复制代码 0118E416 /75 08 jnz short KEASY.0118E420
0118E418 |B8 01000000 mov eax,0x1
0118E41D |C2 0C00 retn 0xC
0118E420 \68 B099DC00 push KEASY.00DC99B0
0118E425 C3 retn
0118E426 8B85 8C040000 mov eax,dword ptr ss:[ebp+0x48C] ; KEASY.00720070
0118E42C 8D8D A1040000 lea ecx,dword ptr ss:[ebp+0x4A1]
0118E432 51 push ecx
0118E433 50 push eax
点击调试,硬件断电。
然后删除断点,然后点确定。
然后按F8,单步跟踪,然后大跳转,来到OEP。(按了3次跳到了OEP)
OEP出代码如下
[Asm] 纯文本查看 复制代码 00DC99B0 55 push ebp
00DC99B1 8BEC mov ebp,esp
00DC99B3 83C4 F0 add esp,-0x10
00DC99B6 B8 8C62DB00 mov eax,KEASY.00DB628C
00DC99BB E8 C07164FF call KEASY.00410B80
00DC99C0 A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DC99C5 8B00 mov eax,dword ptr ds:[eax]
00DC99C7 E8 546088FF call KEASY.0064FA20
00DC99CC A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DC99D1 8B00 mov eax,dword ptr ds:[eax]
4. 脱壳
右键,选择用OllyDump脱壳调试进程。
然后复制OEP地址(9C99B0)
打开LordPE,最下面找到进程,右键,修正镜像大小。(大神都说要保留这样的好习惯,虽然这个软件不修复也行)
然后继续右键,选择第一个完整转存,保存。
5. IAT修复
脱壳后的软件,直接运行会出错,所以需要修复一下。
使用ImportREConstructor 1.7e,找到软件进程,载入。
粘贴我们刚复制的OEP地址,然后点右边的IAT自动搜索(弹窗点确定即可)。
这个软件困惑我一天的原因都是IAT修复,我接着点获取导入表,显示无效函数,剪切掉。然后修正转存到刚刚脱壳的软件后,发现还是打不开。之前有看大神们的教程,却发现每个程序都不是很一样,不好依葫芦画。(期间尝试各种脚本,脱壳机,发现最后都是要修复,也百度了好多关于IAT修复的文章),还是不懂。
然后就自己摸索了,看OEP附近代码,往下翻,后面都是未知代码和空字节
于是只能上翻了,发现有些call,后面注释都是JMP到XXX,如下(再往上翻,还有好多这样的)
[Asm] 纯文本查看 复制代码 00DC998B 832D 5CBFDF00 0>sub dword ptr ds:[0xDFBF5C],0x1
00DC9992 73 07 jnb short KEASY.00DC999B
00DC9994 6A 00 push 0x0
00DC9996 E8 01AB67FF call KEASY.0044449C ; jmp 到 ole32.OleInitialize
00DC999B 5D pop ebp ; kernel32.7C81776F
00DC999C C3 retn
然后按回车跟随,看看JPM到哪儿了,(试了好几个这样的call,都是来到了这样的地方,一堆JPM)
[Asm] 纯文本查看 复制代码 0041593C - FF25 20D4DF00 jmp dword ptr ds:[0xDFD420] ; user32.RegisterWindowMessageW
00415942 8BC0 mov eax,eax
00415944 50 push eax
00415945 52 push edx ; ntdll.KiFastSystemCallRet
00415946 51 push ecx
00415947 68 F431E000 push KEASY.00E031F4 ; ASCII "DYA"
0041594C ^ E9 ABFAFFFF jmp KEASY.004153FC
00415951 8D40 00 lea eax,dword ptr ds:[eax]
00415954 ^ FF25 F431E000 jmp dword ptr ds:[0xE031F4] ; KEASY.00415944
0041595A 90 nop
0041595B 90 nop
0041595C - FF25 1CD4DF00 jmp dword ptr ds:[0xDFD41C] ; user32.RegisterWindowMessageW
00415962 8BC0 mov eax,eax
00415964 - FF25 18D4DF00 jmp dword ptr ds:[0xDFD418] ; user32.ReleaseCapture
0041596A 8BC0 mov eax,eax
0041596C - FF25 14D4DF00 jmp dword ptr ds:[0xDFD414] ; user32.ReleaseDC
00415972 8BC0 mov eax,eax
00415974 - FF25 10D4DF00 jmp dword ptr ds:[0xDFD410] ; user32.RemoveMenu
0041597A 8BC0 mov eax,eax
0041597C - FF25 0CD4DF00 jmp dword ptr ds:[0xDFD40C] ; user32.RemovePropW
00415982 8BC0 mov eax,eax
00415984 - FF25 08D4DF00 jmp dword ptr ds:[0xDFD408] ; user32.ScreenToClient
0041598A 8BC0 mov eax,eax
看后面注释,不刚好是我们要找的函数的名字(自己理解的,不知道对不对,如有大神看到,错了请指正哈)。
然后随便找一个JMP,右键-数据窗口跟随-内存地址。
然后右下角终于出现和大神视频里一样的类似代码了
然后按照大神的教导,往上翻,找到起始位置(我理解的是数值全为0,注释为空的地方)。然后到如下位置(后面会指正这里的错误)
[Asm] 纯文本查看 复制代码 00DFC000 00DFC2A0 KEASY.00DFC2A0
00DFC004 00000000
00DFC008 00000000
00DFC00C 00DFC2A0 KEASY.00DFC2A0
00DFC010 00DFC2A0 KEASY.00DFC2A0
00DFC014 00DFC2B0 KEASY.00DFC2B0
00DFC018 00000000
00DFC01C 00000000
00DFC020 00DFC2B0 KEASY.00DFC2B0
00DFC024 00DFC2B0 KEASY.00DFC2B0
复制第一行的地址00DFC000,然后减去00400000,得到9FC000。(我也不知道为啥要减,不减的话,我试了不行的。)
然后回到ImportREConstructor 1.7e,RVA那里粘贴9FC000,后面大小,我写的10000,因为我发现我写的1000,找到的全部是无效函数,写了10000,把无效的删掉,还留下好多,然后转存后,居然也修复成功了。(这是我昨晚的方法,不过总感觉那里不对,这会儿在编辑教程的时候,有个惊喜发现)
刚刚在想着,后面注释为KEASY.XXXXXX ,这样的可能不是我们也找的函数,然后拖动鼠标,往下翻,找到KEASY最下面的地址,如下
[Asm] 纯文本查看 复制代码 00DFD1F0 00000000
00DFD1F4 00A0299E KEASY.00A0299E
00DFD1F8 00000000
00DFD1FC 00A029C6 KEASY.00A029C6
00DFD200 00000000
00DFD204 00A029DC KEASY.00A029DC
00DFD208 00000000
00DFD20C 770F4880 oleaut32.SysFreeString
00DFD210 7712446D oleaut32.SysReAllocStringLen
00DFD214 770F4BA7 oleaut32.SysAllocStringLen
00DFD218 00000000
00DFD21C 77DA6FFF advapi32.RegQueryValueExW
00DFD220 77DA6AAF advapi32.RegOpenKeyExW
然后选用中间的00DFD208作为起始地址,减去00400000,RVA为009FD208,然后大小用1000,点击获取导入表,也成功修复了,如下
而昨晚的方法,的结果是这样的,
然后刚刚才发现,虽然昨晚那样的方法还是修复成功了,但是无效的函数太多了。按照大神们说的,大小不宜选择过大,他们用1000,我居然用了10000,才修复成功了。
最后点修正转存,点击我们刚刚用LordPE脱壳的程序
6. 查壳
先赶快运行下程序,发现终于修复成功了,可以正常运行了,不过不能高兴太早,PEID查壳。
大功告成,昨晚高兴坏了。从前天下午困扰的问题,昨天才搞定。不过也不能高兴太早,还要破解呢。
7.破解
OD载入脱壳修复好的程序(载入的时候,最好按空格,让OD停止分析,不然会很卡,我电脑配置不好)
载入后代码如下,还是我们刚刚熟悉的OEP位置。
[Asm] 纯文本查看 复制代码 00DC99B0 > 55 push ebp
00DC99B1 8BEC mov ebp,esp
00DC99B3 83C4 F0 add esp,-0x10
00DC99B6 B8 8C62DB00 mov eax,dumped_.00DB628C
00DC99BB E8 C07164FF call dumped_.00410B80
00DC99C0 A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DC99C5 8B00 mov eax,dword ptr ds:[eax]
00DC99C7 E8 546088FF call dumped_.0064FA20
00DC99CC A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DC99D1 8B00 mov eax,dword ptr ds:[eax]
00DC99D3 BA 2C9ADC00 mov edx,dumped_.00DC9A2C ; UNICODE "开博送货单软件标准版"
点击,e
选择和程序名字一样的东西,双击。(至于为什么,这完全是跟着大神的方法来的,不然还没其他方法)
来到了如下这样的位置
[Asm] 纯文本查看 复制代码 00401000 04 10 add al,0x10
00401002 40 inc eax
00401003 0003 add byte ptr ds:[ebx],al
00401005 07 pop es
00401006 42 inc edx ; ntdll.KiFastSystemCallRet
00401007 6F outs dx,dword ptr es:[edi]
00401008 6F outs dx,dword ptr es:[edi]
00401009 6C ins byte ptr es:[edi],dx
0040100A 65:61 popad
右键,最下面找-中文搜索引擎-3智能搜索(我电脑配置低,会卡死好久。等等都好了)
来到如下地方
chtr+F,搜索(注册)
忘记了,点F9运行程序,有个登陆窗口,点击登陆都行了。
找到帮助-注册软件
随便注册码,我跟大神学的,输入N个1
点击注册,弹窗
然后我们就在OD里面搜索,注册失败,找到和弹窗类似提示的文字。如下
双击,来到如下代码行
[Asm] 纯文本查看 复制代码 00DB4FBD 8B45 F4 mov eax,dword ptr ss:[ebp-0xC]
00DB4FC0 E8 BB1EA1FF call dumped_.007C6E80
00DB4FC5 E9 99000000 jmp dumped_.00DB5063
00DB4FCA 6A 30 push 0x30
00DB4FCC 8D55 B8 lea edx,dword ptr ss:[ebp-0x48]
00DB4FCF B8 10000000 mov eax,0x10
00DB4FD4 E8 4B2067FF call dumped_.00427024
00DB4FD9 8B45 B8 mov eax,dword ptr ss:[ebp-0x48] ; ntdll.ZwQueryValueKey
00DB4FDC E8 F77265FF call dumped_.0040C2D8
00DB4FE1 8BC8 mov ecx,eax ; dumped_.00640420
00DB4FE3 BA 7852DB00 mov edx,dumped_.00DB5278 ; 注册失败,请支持我们,购买正版!\r注册后,您将获得专业的技术支持和后续升级服务。
00DB4FE8 A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DB4FED 8B00 mov eax,dword ptr ds:[eax]
00DB4FEF E8 DCAD89FF call dumped_.0064FDD0
00DB4FF4 8D55 B4 lea edx,dword ptr ss:[ebp-0x4C]
00DB4FF7 B8 0F000000 mov eax,0xF
发现什么没,注册失败上门有个跳转,刚好符合大神说的关键跳不是,然后选中关键跳的上一句按F2,设置断点。
回到软件重新输入假吗注册,然后发现居然还是弹窗了,说明F2的位置不对,继续上面找设置断点,重试还是不行。 再找还不行,看来这里不是判断注册的地方了。
重新找字符串,搜索,注册失败。(记得找这个下面的)
然后又发现了这么一个地方
下面是注册失败,上门是注册成功,离的不远,看来就是这里了,双击进入。
[Asm] 纯文本查看 复制代码 00DB4FC0 E8 BB1EA1FF call dumped_.007C6E80
00DB4FC5 E9 99000000 jmp dumped_.00DB5063
00DB4FCA 6A 30 push 0x30
00DB4FCC 8D55 B8 lea edx,dword ptr ss:[ebp-0x48]
00DB4FCF B8 10000000 mov eax,0x10
00DB4FD4 E8 4B2067FF call dumped_.00427024
00DB4FD9 8B45 B8 mov eax,dword ptr ss:[ebp-0x48] ; ntdll.ZwQueryValueKey
00DB4FDC E8 F77265FF call dumped_.0040C2D8
00DB4FE1 8BC8 mov ecx,eax ; dumped_.00640420
00DB4FE3 BA 7852DB00 mov edx,dumped_.00DB5278 ; 注册失败,请支持我们,购买正版!\r注册后,您将获得专业的技术支持和后续升级服务。
00DB4FE8 A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DB4FED 8B00 mov eax,dword ptr ds:[eax]
00DB4FEF E8 DCAD89FF call dumped_.0064FDD0
上面又一个跳转,跳转前面两行F2,回到软件,注册试试看。这样试了几次发现,设置断点还是不能停止,是不是和上门一样呢,这里不是控制注册的代码呢,忽然想到,刚刚在字符串窗口看到,失败上面有成功的代码,往上翻,来到这里
[Asm] 纯文本查看 复制代码 00DB4E1A 8038 00 cmp byte ptr ds:[eax],0x0
00DB4E1D 0F84 A7010000 je dumped_.00DB4FCA
00DB4E23 6A 40 push 0x40
00DB4E25 8D55 E4 lea edx,dword ptr ss:[ebp-0x1C]
00DB4E28 B8 10000000 mov eax,0x10
00DB4E2D E8 F22167FF call dumped_.00427024
00DB4E32 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C]
00DB4E35 E8 9E7465FF call dumped_.0040C2D8
00DB4E3A 8BC8 mov ecx,eax ; dumped_.00DF9D14
00DB4E3C BA 8C50DB00 mov edx,dumped_.00DB508C ; 注册成功,谢谢您的购买!\r您将获得专业的技术支持和后续升级服务。
00DB4E41 A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00DB4E46 8B00 mov eax,dword ptr ds:[eax]
00DB4E48 E8 83AF89FF call dumped_.0064FDD0
00DB4E4D 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
00DB4E50 8B80 BC030000 mov eax,dword ptr ds:[eax+0x3BC]
00DB4E56 8B80 90020000 mov eax,dword ptr ds:[eax+0x290]
原来这里有个跳转到失败的,我们在je跳转的上面设置断点,肯定是不行的了。
那居然这样,je是跳转到失败的,我们就把它NOP掉,右键-二进制-用NOP填充。如下
测试一下,回到软件,注册,发现成功了。
高兴了把,终于搞定了。
然后我们保存吧。
选中刚刚NOP的数据,右键-复制到可执行文件-选择,然后在新窗口右键-保存文件。然后保存。(最后重新命名)。
这样就大功告成了吗,我们先进入我们破解的程序测试下。
-------------------------以下笨方法,其实可以再字符串找到好多和注册失败,功能限制的地方,一一给爆破了,都可以完美运行了,我这里还是按照我昨晚自己摸索的思路来了,因为我也不知道这个软件爆破了注册,功能上还是有限制的----------------------------
发现软件左上角系统功能-点击数据恢复,会提示。同时会弹网页-指向他的淘宝店。
这个不能忍啊,继续OD载入(请参考上面破解那里的,这里都不啰嗦了哈)。
搜索(请注册),原谅我的语文把,找到这么个关键词搜索。
找到第一处的
双击,进入,看到如下代码
[Asm] 纯文本查看 复制代码 00C6F186 /75 5C jnz short dumped_?00C6F1E4
00C6F188 |6A 10 push 0x10
00C6F18A |8D55 F4 lea edx,dword ptr ss:[ebp-0xC]
00C6F18D |B8 10000000 mov eax,0x10
00C6F192 |E8 8D7E7BFF call dumped_?00427024
00C6F197 |8B45 F4 mov eax,dword ptr ss:[ebp-0xC] ; kernel32.7C839AB0
00C6F19A |E8 39D179FF call dumped_?0040C2D8
00C6F19F |8BC8 mov ecx,eax
00C6F1A1 |BA 94F2C600 mov edx,dumped_?00C6F294 ; 未注册版本不可使用本功能。请注册为正版用户!\r注册后,您将获得专业的技术支持和最新升级版本。
00C6F1A6 |A1 D82FDF00 mov eax,dword ptr ds:[0xDF2FD8]
00C6F1AB |8B00 mov eax,dword ptr ds:[eax]
00C6F1AD |E8 1E0C9EFF call dumped_?0064FDD0
上面还是有个跳转,我们把他修改为jmp(无条件跳)
这里我遇到个现在还不能解决的方法,按照上面的思路,修改了多处的跳转,最后发现保存的时候,只能保存选择的代码。 而不能全部复制修改,这里真的需要大神帮助,然后我的解决方法只能修改一处保存一处了。
如此反复,重新保存程序,发现可以完美使用了。
附上刚刚重复的方法后的截图。
最终程序完美运行,没任何限制。
写在后面,如果能坚持看完的话
其实开博这个软件还需要修复,还不算足够简单,所以我推荐个更简单的软件练手。
远方系列的 http://www.itfar.com/这是软件的官网
昨天刚把这个系列的全部搞定了,包括爆破,追码,注册机,不过论坛有教程了,就不发了。
<全文完>
已更新刚好的方法破解这个软件了,还有视频教程【新手教程补充】开博送货单软件标准版1字节爆破图片加视频教程
---------------------------------------------------------------------------------------------------------------------------------
|