ORiEN 2.11 - 2.12简单脱壳及如何找MAGIC JMP
【破文标题】ORiEN 2.11 - 2.12简单脱壳及如何找MAGIC JMP【破文作者】水平太菜,就不用写名字了吧o(∩_∩)o
【作者邮箱】
【作者主页】
【破解工具】PEID+OD+IMPORTREC
【破解平台】WINDOWS XP
【软件名称】
【软件大小】
【原版下载】
【保护方式】
【软件简介】
【破解声明】菜鸟学脱壳的一点学习过程,仍有很多不足,感谢脱壳前辈们的教导
------------------------------------------------------------------------
【破解过程】 最近在吾爱破解学脱壳,脱的是置顶贴的脱壳训练,我其实对脱壳一点都不懂,随便哪个压缩壳给我,我都不一定会脱,汗!今天已经是做练习7了,脱的是ORiEN,其实这壳不难,很多前辈写出了很多脱壳教程,黑鹰破解提高班里面也有关于这个壳的脱壳教程,还教了我们如何手动跟踪加密指针。在这里先向前辈们表示感谢!我今天也脱了一下,修复的时候也是2个无效指针,大家比较有经验的都知道这2个指针是ExitProcess和GetCommandLineA,我刚想要复习一下手动跟踪指针的时候忽然想到一个问题:我这样不是重复别人的思维,按照别人的套路来脱壳吗?虽然菜鸟都是要从模拟别人的方法开始的,可现在我可不想这样了,我觉得也应该提升自己的脱壳能力,学习一下如何分析壳了。
我们言归正传开始进入正题,脱壳步骤我就先不写了 我们从那2个加密指针开始说起吧。我这里的记录是这样的,IMPORTREC修复的时候,那2个指针的RVA是0005518C和0005519C,我们用OD载入程序在左下角的数据窗口 来到0045518C(0005518C+00400000)这个位置,下硬件写入断点 SHIFT+F9运行几次 直到出现我们原本要找的GetCommandLineA这个指针,这时断点不要取消,我们F8单步走一下,稍微走一下会发现F8走过一个CALL的时候指针都出来了,除了那个GetCommandLineA,有意思的是连ExitProcess都出来了,这说明呢?或许不说明什么,但我觉得关键点离我们越来越近了,当时我是认为GetCommandLineA被加密了,但ExitProcess还没有,我们继续F8的话说不定有大收获,我们F8坚持下去,很快就来到这里了004A17AE /0F84 C1000000 je UnPackMe.004A1875
004A17B4 |3B83 BF3A0000 cmp eax,ds: ; 比较是否是
ExitProcess
004A17BA |75 2B jnz short UnPackMe.004A17E7
004A17BC |EB 13 jmp short UnPackMe.004A17D1
004A17BE |FF15 EB026996 call ds:
004A17C4 |83C7 00 add edi,0
004A17C7 |EB 01 jmp short UnPackMe.004A17CA
004A17C9 |B8 83C404EB mov eax,EB04C483
004A17CE |0ACD or cl,ch
004A17D0 |2050 E8 and ds:,dl
004A17D3 |E9 FFFFFFFF jmp UnPackMe.004A17D7
004A17D8 |25 83C404EB and eax,EB04C483
004A17DD |01A8 8D83211F add ds:,ebp
004A17E3 |0000 add ds:,al
004A17E5 |EB 64 jmp short UnPackMe.004A184B
004A17E7 |3B83 E73A0000 cmp eax,ds: ; 比较是否是
GetCommandLineA
004A17ED |75 2B jnz short UnPackMe.004A181A
004A17EF |EB 13 jmp short UnPackMe.004A1804 相信不用我说大家都能明白了吧,还不明白的话请继续看下去,我写了比较完整的脱文,上面的只是我的一些思路和过程。
比较完整的脱壳文章:004A0000 > $ /E9 5D010000 jmp UnPackMe.004A0162 ;OD载入到这里
004A0005 |CE db CE
004A0006 |D1 db D1
004A0007 |CE db CE
004A0008 |CD db CD
F8一下来到这里
004A0162 > \60 pushad ;来到这里
004A0163 .E8 783B0000 call UnPackMe.004A3CE0 ;典型的ESP
004A0168 .2F das
004A0169 .FC cld
004A016A .3BAC95 AA3AFCC4 cmp ebp,ss: 我们不要着急,先扫清障碍再来慢慢享受脱壳成功的喜悦o(∩_∩)oESP的硬件断点下好后 ALT+M 在
RESOURCE段下段,SHIFT+F9来到这里004A26CB 0FB74E 0C movzx ecx,word ptr ds: ; RESOURCE段下段后来到这里
004A26CF EB 01 jmp short UnPackMe.004A26D2
004A26D1 7F 3B jg short UnPackMe.004A270E
004A26D3 C2 6603 retn 366CTRL+B 搜索二进制3B 83 BF 3A 00 00 75004A17B3 003B add ds:,bh ; 找到这里
004A17B5 83BF 3A000075 2B cmp dword ptr ds:,>; 把75改成EB
004A17BC EB 13 jmp short UnPackMe.004A17D1
004A17BE FF15 EB026996 call ds:
004A17C4 83C7 00 add edi,0
004A17C7 EB 01 jmp short UnPackMe.004A17CA
004A17C9 B8 83C404EB mov eax,EB04C483
004A17CE 0ACD or cl,ch
004A17D0 2050 E8 and ds:,dl
004A17D3 E9 FFFFFFFF jmp UnPackMe.004A17D7
004A17D8 25 83C404EB and eax,EB04C483
004A17DD 01A8 8D83211F add ds:,ebp
004A17E3 0000 add ds:,al
004A17E5 EB 64 jmp short UnPackMe.004A184B
004A17E7 3B83 E73A0000 cmp eax,ds: ; 比较是否是
GetCommandLineA
004A17ED 75 2B jnz short UnPackMe.004A181A
004A17EF EB 13 jmp short UnPackMe.004A1804其实004A17B3 003B add ds:,bh ; 找到这里
004A17B5 83BF 3A000075 2B cmp dword ptr ds:,>; 把75改成EB
004A17BC EB 13 jmp short UnPackMe.004A17D1 的原型应该是这样的,我们在004A17B3 这行代码上NOP掉一个字节代码就出来了004A17B3 90 nop ;
004A17B4 3B83 BF3A0000 cmp eax,ds: ; 比较是否是
ExitProcess
004A17BA 75 2B jnz short UnPackMe.004A17E7 ; 不是则跳
004A17BC EB 13 jmp short UnPackMe.004A17D1这段代码其实是比较当前指针是否是ExitProcess,是的话就跳向加密,不是则继续处理。我们把JNZ改
成JMP 即75改EB 让它强制跳走 就不会进行加密了 同样在下面一点的地方就可以看到壳处理
GetCommandLineA指针的部分了 同样把75改EB 让它不加密。
这时我们最早的ESP断点就要起作用了 这下知道为什么要先下ESP断点了吧
用ESP定律来到这里(记得要先把内存访问断点给去掉)004A1ADB B8 9C150500 mov eax,5159C ; ESP定律来到这里
004A1AE0 83F8 00 cmp eax,0
004A1AE3 74 13 je short UnPackMe.004A1AF8
004A1AE5 05 00004000 add eax,UnPackMe.00400000 ; ASCII "MZP"
004A1AEA EB 08 jmp short UnPackMe.004A1AF4 接着F8继续往下走走几步就会有发现004A1AF1- FFE0 jmp eax ; 跳向OEP F8一次来到OEP0045159C 55 push ebp ; OEP
0045159D 8BEC mov ebp,esp
0045159F 83C4 F0 add esp,-10
004515A2 B8 BC134500 mov eax,UnPackMe.004513BC
004515A7 E8 8846FBFF call UnPackMe.00405C34DUMP出来 用IMPORTREC修复的时候指针是全部有效的 我们看看转储修复结果如何 修复一下可以运行 呵呵 看来我们的思路是正确的 菜鸟也可以学会如何对付指针加密和修改MAGIC JMP了
后记:我自己为了验证一下我的办法是否正确 又下了一个ORiEN 2.12 汉化版来加了一个记事本 发现同
样是可行的,而且不用修复直接OD脱壳出来就可以运行了o(∩_∩)o
------------------------------------------------------------------------
【破解总结】 小弟第一次写脱文,没什么技术含量,只是想把自己的一点经验和心得和大家分享一下,主要就是处理ORiEN 2.11 - 2.12的MAGIC JMP的问题,我暂时还没有看到有人写关于ORiEN的MAGIC JMP的文章(当然了,我看过的脱文很少很少啊),所以不自量力的乱写了一篇,希望能开拓大家的思路和给大家另一种不用手动跟踪IAT脱ORiEN 2.11 - 2.12的方法。非常欢迎大家来评论、补充和指点。
------------------------------------------------------------------------
【版权声明】脱文版权归我,转载版权归你。欢迎转载,盗版不究o(∩_∩)o
[ 本帖最后由 傻人有傻福 于 2008-10-4 16:14 编辑 ] 脱文很详细,比你在吾爱教的作业要详细些,加了自己的领悟!
学习下! 谢谢楼主发布分享
学习之 /:014 呵呵在这里学习到了啊 支持了 啊 /:018 向兄弟学习了。/:good 下了学习下先
向兄弟学习了 总结的很好,说明动了脑筋了。 值得学习的东西。 感谢分享学习经验
页:
[1]