首页
社区
课程
招聘
脱2次加壳程序
发表于: 2006-12-6 12:31 6662

脱2次加壳程序

2006-12-6 12:31
6662
【文章标题】: 脱2次加壳程序
【文章作者】: ldsjlm
【软件名称】: 某游戏exe
【软件大小】: 1.24MB
【下载地址】: 自己搜索下载
【加壳方式】: yoda's cryptor 1.x / modified+ASProtect 1.23RC4
【使用工具】: 0llydbg1.10 Peid importRec loadPE
【操作平台】: xp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  
   首先peid查程序文件显示yoda's cryptor 1.x / modified.
   用od载入后弹出“是压缩代码――要继续进行分析吗?”,点“否”, 然后在od的调试异常了设置忽略全部异常.
   00C4D060 >  60              pushad
   00C4D061    E8 00000000     call    00C4D066
   00C4D066    5D              pop     ebp
   00C4D067    81ED 0F1E4000   sub     ebp, 00401E0F
   00C4D06D    B9 57090000     mov     ecx, 957
   00C4D072    8DBD 571E4000   lea     edi, [ebp+401E57]
   00C4D078    8BF7            mov     esi, edi
   00C4D07A    AC              lods    byte ptr [esi]
   F8走到00C4D06D看esp=0012FFA4,在命令输入hr 0012FFA4,然后shift+F9来到
   00C4D739    50              push    eax                              ; cabalmai.00C4D6E8
   00C4D73A    33C0            xor     eax, eax
   00C4D73C    64:FF30         push    dword ptr fs:[eax]
   00C4D73F    64:8920         mov     fs:[eax], esp
   00C4D742    EB 01           jmp     short 00C4D745
   命令输入hd 0012FFA4  取消硬件断点,跟着alt+M在代码段按F2下断,shift+F9执行来到
   00401000    68 0190C300     push    00C39001
   00401005    E8 01000000     call    0040100B
   0040100A    C3              retn
   0040100B    C3              retn
   0040100C    B0 7F           mov     al, 7F
   0040100E    0AB1 6B03389C   or      dh, [ecx+9C38036B]
   00401014    2D CE2D3C58     sub     eax, 583C2DCE
   00401019    696B 3B 4DC459F>imul    ebp, [ebx+3B], F659C44D
   00401020    6F              outs    dx, dword ptr es:[edi]
   00401021    79 29           jns     short 0040104C
   看上面的代码感觉是asp的壳,然后在od里取消内存访问异常选项。
   shift+F9大约16次后来到
   016439EC    3100            xor     [eax], eax
   016439EE    64:8F05 0000000>pop     dword ptr fs:[0]
   016439F5    58              pop     eax
   016439F6    833D B07E6401 0>cmp     dword ptr [1647EB0], 0

   016439FD    74 14           je      short 01643A13
   016439FF    6A 0C           push    0C
   01643A01    B9 B07E6401     mov     ecx, 1647EB0
   01643A06    8D45 F8         lea     eax, [ebp-8]
   01643A09    BA 04000000     mov     edx, 4
   01643A0E    E8 2DD1FFFF     call    01640B40
   01643A13    FF75 FC         push    dword ptr [ebp-4]
   01643A16    FF75 F8         push    dword ptr [ebp-8]
   01643A19    8B45 F4         mov     eax, [ebp-C]
   01643A1C    8338 00         cmp     dword ptr [eax], 0
   01643A1F    74 02           je      short 01643A23
   01643A21    FF30            push    dword ptr [eax]
   01643A23    FF75 F0         push    dword ptr [ebp-10]
   01643A26    FF75 EC         push    dword ptr [ebp-14]
   01643A29    C3              retn   
   在01643A29按F2下断 shift+F9来到该断点,这时看堆栈
  
   0012FF5C   0165654C
   0012FF60   00400000  cabalmai.00400000
   0012FF64   BEA1DBE2
   0012FF68   0012FFA4         //这里很重要
   在命令行输入hr 0012FF68下硬件断点后shift+F9来到
   01656626   /EB 44           jmp     short 0165666C
   01656628   |EB 01           jmp     short 0165662B
   0165662A   |9A 51579CFC BF0>call    far 00BF:FC9C5751
   01656631   |0000            add     [eax], al
   01656633   |00B9 00000000   add     [ecx], bh
   01656639   |F3:AA           rep     stos byte ptr es:[edi]
   0165663B   |9D              popfd
   0165663C   |5F              pop     edi
   0165663D   |59              pop     ecx
   0165663E   |C3              retn
   命令行输入hd 0012FF68取消硬件断点,然后按F8来到
   01655778    03C3            add     eax, ebx                         ; cabalmai.00400000
   0165577A    BB 1B030000     mov     ebx, 31B        //注意这个值,等下修复程序我们用得上。
   0165577F    0BDB            or      ebx, ebx
   01655781    75 07           jnz     short 0165578A
   01655783    894424 1C       mov     [esp+1C], eax
   01655787    61              popad
   01655788    50              push    eax
   01655789    C3              retn
   0165578A    E8 00000000     call    0165578F // 0165578A动态地址必须记住,等一下用得着,这个地
   址是动态生成的,以你机器的地址为准。
   现在开始dump文件
   打开loadpe选择目标进程然后鼠标右键选者correct imagesize,然后在右键菜单选择dump full 保存文件为dump.exe,下面还要dump出区域代码
   地址01650000,大小C000.保存文件01650000.dmp
  
   现在开始重建PE
   在loadpe里打开dump.exe后选者sections,在弹出的窗口中右键菜单中选者load section from disk选者01650000.dmp
   然后在修改该区段的virtualAddress为01250000,关闭该窗口,在loadpe主窗口里单击options在弹出窗口右下角名字为rebuilder
   的那块区域中选中validate PE,其他几个选项取消,然后在loadpe中单击Rebulid PE,选者dump.exe重建PE.
   
   现在开始dump IAT,
   回到od里F8来到
   01655805    FF53 16         call    [ebx+16]
   01655808    69F0 0F9AF217   imul    esi, eax, 17F29A0F
   0165580E    58              pop     eax
   0165580F    65:0169 E9      add     gs:[ecx-17], ebp
   01655813    E8 E8E99A5B     call    5D004200
   01655818    36:EB 01        jmp     short 0165581C
   0165581B  - 0F81 C3D30D50   jno     51732BE4
   01655821    91              xchg    eax, ecx
   01655822    5B              pop     ebx
   01655823    6A 60           push    60
   01655825    68 E86A6C00     push    6C6AE8
   0165582A    66:8105 3458650>add     word ptr [1655834], 3B5B
   01655833    F2:             prefix repne:
   F7进入call [ebx+16]
   继续F8n次 后来到
   0064DBB8    BF 94000000     mov     edi, 94

   0064DBBD    8BC7            mov     eax, edi
   0064DBBF    E8 2C2A0000     call    006505F0
   0064DBC4    8965 E8         mov     [ebp-18], esp
   0064DBC7    8BF4            mov     esi, esp
   0064DBC9    893E            mov     [esi], edi
   0064DBCB    56              push    esi
   0064DBCC    FF15 78E16A00   call    [6AE178]
  在命令行输入d 6AE178 看内存
  006AE178  016506F8
  006AE17C  01650704
  006AE180  01650710
  006AE184  0165071C
  006AE188  01650728
  006AE18C  0165073C
  006AE190  01650748
  006AE194  01650754
  006AE198  01650760
  006AE19C  0165076C
  006AE1A0  01650778
  006AE1A4  01650788
  往上拖动滚动条一直到
  006AE000  77DA7883  ADVAPI32.RegQueryValueExA
  006AE004  77DA761B  ADVAPI32.RegOpenKeyExA
  006AE008  77DA6BF0  ADVAPI32.RegCloseKey
  006AE00C  77DAEBE7  ADVAPI32.RegSetValueExA
  006AE010  00000000
  006AE014  7C123AE9  atl71.AtlUpdateRegistryFromResourceD
  006AE018  7C1212D8  atl71.AtlWinModuleTerm
  006AE01C  7C123AC7  atl71.AtlCreateRegistrar
  006AE020  7C121800  atl71.AtlCallTermFunc
  006AE024  7C12A5D7  atl71.AtlAxWinInit
  006AE028  7C124982  atl71.AtlAxGetControl
  006AE02C  7C123F27  atl71.AtlComQIPtrAssign
  006AE030  7C121277  atl71.AtlWinModuleInit
  006AE034  00000000
  006AE038  736EFC55  ddraw.DirectDrawCreate
  006AE03C  00000000
  006AE040  6D18D926  dinput8.DirectInput8Create
  006AE044  00000000
  006AE048  73E96D55  dsound.DirectSoundCreate8
  
  记录rva=006AE000-400000=002AE000
  然后在打开importRec选者目标进程
  设置RVA=002AE000 size=1000 然后Get imports,在单击show invalid
  选者一个非法的地址右键菜单选者trace level1(disasm),完成后在单击show invalid显示非法地址,
  然后选者一个非法地址在右键菜单plugin Tracers选者asprotect1.22修复无效的地址,完成后在单击show invalid
  然后cut 所有无效的地址,在OEP处输入01250000 后fix dump
  
  最后修复脱壳后的文件。
  用od 载入脱壳后的文件dump_.exe
  入口代码修改成
  01650000 >  BB 1B030000     mov     ebx, 31B
  01650005    E9 146C0000     jmp     0165578A
  保存到文件,运行脱壳文件,正常启动
  
  
  
  
  
  
  
   

  
  
  
   
   
  
  
  
  
  
  
  
   
  
  
   
  
   
  
   
  
  
  
  
   
  
--------------------------------------------------------------------------------
【经验总结】
  经验都是前人的,我只是学习后做的一次实践
  参考教程:
     1:两步快速脱yoda's cryptor 1.2壳--esp定律和内存断点完美组合应用
     2:菜鸟也脱ASProtect 1.23RC4  这篇文章就能脱asprotect1.23 rc4的壳,
     3:Asprotect1.23的iat修复
  注意:
     脱壳后修复IAT的时候,作者用的AsprDbgr v1.0beta ,在我机器上用不起,只能手工dump IAT,在修复IAT的时候
     我失败了很多次,最后终于在看了Asprotect1.23的iat修复后手工修复成功,后来又发现在importrec中用插件
     asprotect1.22能自动修复.
  
--------------------------------------------------------------------------------

                                                       2006年12月06日 12:28:29

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主,你的帖子真是好帖子. 对学习双重壳太有帮助了.

我按照你的做法试了一下.为什么到了只有一步,用od修复入口的时候不对了? iat也fix了.用dependency walk也可以看到了

od告诉我无法运行文件.请赐教
2006-12-7 00:35
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好文章,支持
2006-12-7 02:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
惊天动地的主程序吧?
2006-12-7 21:19
0
雪    币: 159
活跃值: (487)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
回2楼:
  用od调试下脱壳程序,看看那里出错了,另外,多看精华5里面关于asprotect 1.23R4方面的文章.
2006-12-8 17:13
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢LZ  辛苦了  让我学到了不少
2006-12-8 17:56
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
7
貌似跑跑卡丁车的壳?
2006-12-9 12:04
0
雪    币: 263
活跃值: (17)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
我在win2000环境下测试,esp 指向0012ffa4,但是植为00000000!!!不能脱壳!!
2006-12-16 20:10
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
楼主分析过黑色的登陆加密函数吗,透露一下啊
2006-12-18 14:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我按照楼主的方法做,但是在开头就不行了,按下shift+F9就进程已终止,终止代码C4D6E8,谁能告诉我怎么解决啊?谢谢了!!!
2007-1-20 13:36
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这是一个好东西,收下了。
2007-1-27 16:35
0
游客
登录 | 注册 方可回帖
返回
//