傻人有傻福 发表于 2008-10-4 15:54:31

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 编辑 ]

小生我怕怕 发表于 2008-10-4 20:48:42

脱文很详细,比你在吾爱教的作业要详细些,加了自己的领悟!
学习下!

alan001 发表于 2008-10-5 09:06:55

谢谢楼主发布分享

学习之

azzal 发表于 2008-10-14 10:53:20

unpack 发表于 2008-10-30 09:59:54

/:014      呵呵在这里学习到了啊   支持了 啊 /:018

qifeon 发表于 2008-10-31 21:39:03

向兄弟学习了。/:good

骷髅0 发表于 2008-11-1 16:21:30

下了学习下先
向兄弟学习了

hdy981 发表于 2008-11-2 00:00:22

总结的很好,说明动了脑筋了。

939372735 发表于 2008-11-2 04:28:33

值得学习的东西。

wqhlgr 发表于 2009-1-26 06:47:34

感谢分享学习经验
页: [1]
查看完整版本: ORiEN 2.11 - 2.12简单脱壳及如何找MAGIC JMP