首页
社区
课程
招聘
[转贴]以壳解壳--SourceRescuer脱壳手记破解分析
发表于: 2004-11-16 09:10 8964

[转贴]以壳解壳--SourceRescuer脱壳手记破解分析

2004-11-16 09:10
8964
前言:七月份就已经发布在DFCG论坛里了,现在看雪老大要出精华6了,大菜鸟我近来没时间写东东了,就把它转来,算是投一篇稿吧。真希望能入选一篇,以回报这个给了我很多帮助的看雪论坛!

软件名称:
  以壳解壳--SourceRescuer脱壳手记
   
软件简介:
  半年多前(过年前)看见fly脱神放出的该软件脱壳破解版(含原版)。当时偶初学破解,先当下来用用。时隔半年多,打开杂乱的硬盘,才又发现该软件。想想初学脱壳,一眨眼半年又过去了,唉,岁月匆匆啊!!!话不多说了,今天我们用fly脱神的以壳脱壳法治理该软件,希望广大脱友能有所收获!又注:用fly脱神的标准方法脱了N>10次,没有成功,后看了Mr.David兄的脱system cleaner4.91的动画,才成功。Mr.David兄在后期处理使用了稍有不同的方法,我们来学学看。呵呵
   
下载地址:
  本地下载
------------------------------------------------------------
   
破解作者:
  springkang[DFCG]
   
破解工具:
  OllyDbg,impr,loadpe,AsprDbgr_build_106.exe,winxp,etc
   
破解目的:
  只为技术,不唯破解!互相探讨,共同提高!!
   
------------------------------------------------------------
   
[破解过程]
   
详细过程:
用peid0.92查是ASProtect 1.23 RC4 Registered -> Alexey Solodovnikov。
用为OD载入,不忽略内存访问异常,其余全部忽略!
00401000 >  68 01405B00     PUSH SourceRe.005B4001   //载入后停在这里,F9运行
00401005    E8 01000000     CALL SourceRe.0040100B
0040100A    C3              RETN
0040100B    C3              RETN
0040100C    AF              SCAS DWORD PTR ES:[EDI]

00AE49CB    3100            XOR DWORD PTR DS:[EAX],EAX   //偶这里是第二十三次异常后出现第二次硬盘指纹,然后下ALT+M打开下内存断点,shift+f9
00AE49CD    EB 01           JMP SHORT 00AE49D0
00AE49CF    68 648F0500     PUSH 58F64
00AE49D4    0000            ADD BYTE PTR DS:[EAX],AL
00AE49D6    00EB            ADD BL,CH

0056BAD4    55              PUSH EBP     //停在这里
0056BAD5    8BEC            MOV EBP,ESP
0056BAD7    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
0056BADA    A3 F8295700     MOV DWORD PTR DS:[5729F8],EAX   //注意[5729f8],现在我们可在用dd 5729f8监视该内存区域的值。这里是保存注册名的。通过最后一次异常后就可以修改里面的内容了。取消内存断点后,再按几次shift+f9来到经典的异常处
0056BADF    5D              POP EBP
0056BAE0    C2 0400         RETN 4

00AE3D03    3100            XOR DWORD PTR DS:[EAX],EAX  //来到这里
00AE3D05    64:8F05 0000000>POP DWORD PTR FS:[0]
00AE3D0C    58              POP EAX
00AE3D0D    833D BC7EAE00 0>CMP DWORD PTR DS:[AE7EBC],0
00AE3D14    74 14           JE SHORT 00AE3D2A
00AE3D16    6A 0C           PUSH 0C
00AE3D18    B9 BC7EAE00     MOV ECX,0AE7EBC
00AE3D1D    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
00AE3D20    BA 04000000     MOV EDX,4
00AE3D25    E8 E6D2FFFF     CALL 00AE1010
00AE3D2A    FF75 FC         PUSH DWORD PTR SS:[EBP-4]
00AE3D2D    FF75 F8         PUSH DWORD PTR SS:[EBP-8]
00AE3D30    8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
00AE3D33    8338 00         CMP DWORD PTR DS:[EAX],0
00AE3D36    74 02           JE SHORT 00AE3D3A
00AE3D38    FF30            PUSH DWORD PTR DS:[EAX]
00AE3D3A    FF75 F0         PUSH DWORD PTR SS:[EBP-10]
00AE3D3D    FF75 EC         PUSH DWORD PTR SS:[EBP-14]
00AE3D40    C3              RETN          //在这里下F2断点,然后shift+f9到这里。取消断点,好,我们看看堆栈的值:
0012FF5C   00AF750C
0012FF60   00400000  ASCII "MZP"
0012FF64   E55B8319
0012FF68   0012FFA4      //dd 0012ff68 然后 下硬件访问断点,也可以直接:hr 12ff68.然后F9
0012FF6C   00000003

00AF761A   /EB 3F           JMP SHORT 00AF765B   //中断到这里了,F7或F8均可,
00AF761C   |60              PUSHAD
00AF761D   |9C              PUSHFD
00AF761E   |FC              CLD
00AF761F   |BF 00000000     MOV EDI,0
00AF7624   |B9 00000000     MOV ECX,0
00AF7629   |F3:AA           REP STOS BYTE PTR ES:[EDI]  //fly是在这里再下断,可是本文中,我们不下断,往后看。
00AF762B   |9D              POPFD
00AF762C   |61              POPAD
00AF762D   |C3              RETN

从00AF761A   /EB 3F           JMP SHORT 00AF765B跳到这里:

00AF765B    03C3            ADD EAX,EBX                              ; SourceRe.00400000
00AF765D    BB 3F060000     MOV EBX,63F   //单步到这里后,我们停住,不要再向前走了。等下修复时这里就是入口处了!!!到这里我们就可以dump了。先完全dump,再区域dump(我这里是:address:00af0000,size:0000c000,考虑为什么在这里,因为从00af765d往下几行代码就是壳对入口处代码的处理了)。然后我们装配一下dump后的文件。磁盘载入后:修复新载入的section的voffset为:00af0000-00400000=6f0000,保存后重建pe,选项只先validate pe.重建完后。接着我们运行AsprDbgr_build_106,
00AF7662    0BDB            OR EBX,EBX
00AF7664    75 02           JNZ SHORT 00AF7668
00AF7666    50              PUSH EAX
00AF7667    C3              RETN
00AF7668    E8 00000000     CALL 00AF766D  //fly脱神等人提示这行要注意,本文中暂且不管它。

AsprDbgr_build_106运行后的代码:
AsprDbgr v1.0beta () Made by me... Manko.

  iEP=401000 (J:\破解\SourceRescuer\原版\SourceRescuer.exe)

    IAT Start: 573140    //这里注意一下,我们在用impr修复时填入173140
          End: 573908
       Length: 7C8       //这个数字我们也用得上
      IATentry 573194 = AE10AC resolved as GetProcAddress
      IATentry 573198 = AE1500 resolved as GetModuleHandleA
      IATentry 5731AC = AE1574 resolved as GetCommandLineA
      IATentry 573250 = AE1500 resolved as GetModuleHandleA
      IATentry 5732CC = AE1564 resolved as LockResource
      IATentry 573304 = AE1528 resolved as GetVersion
      IATentry 57331C = AE10AC resolved as GetProcAddress
      IATentry 573324 = AE1500 resolved as GetModuleHandleA
      IATentry 57334C = AE155C resolved as GetCurrentProcessId
      IATentry 573354 = AE158C resolved as FreeResource
    15 invalid entries erased.
  Dip-Table at adress: AE7980
    0 56BAD4 0 0 56BAE4 0 0 56BB00 56BB78 56BB80 0 0 0 0
  Last SEH passed. (AE3D05) Searching for signatures. Singlestepping to OEP!
    Call + OEP-jump-setup at: AF8304 ( Code: E8000000 5D81ED )
    Mutated, stolen bytes at: AF834F ( Code: EB02CD20 6681355D )
    Erase of stolen bytes at: AF82B9 ( Code: 9CFCBFF7 82AF00B9 )
      Repz ... found. Skipping erase of stolen bytes.
  possible (temp)OEP: 406EC8 (Reached from preOEP: AF82C9)
  Sugested tempOEP at: 56BFE3      //还有这里,等下用impr修复时填上16bfe3

现在我们用impr打开进程,选取最新的sourcerescuer进程(也就用AsprDbgr_build_106产生的进程,不是od产生的,注意!偶就是这里失败了N次)
oep填上:0056bfe3-00400000=
16bfe3,RVA和size分别填上:573140-40000=173140和7c8,然后iat autosearch 和get imports,再show invalid ,全部有效。接下来在oep处填入:00AF765D -40000=6f765d,fix dump.运行就OK了

相比之下,后期处理和fly 大侠的方法稍有点不同,脱友们体会到了吗?

   
破解小结:
  方法源自fly脱神的以壳解壳文章,没有他,我不可能完成脱壳。还要感谢Mr.David兄的动画,解决了我的一些疑问!
  偶很菜了,没时间总结了,谢谢你能耐心的看完
  偶的QQ:14695672(注明crack)
                                          
                               springkang[DFCG]  
                                 2004。7。27
                                          
   
------------------------------------------------------------
   
版权公有,人权私有!谢谢转载,注明作者!!附件:新建文件夹.part1.rar 附件:新建文件夹.part2.rar

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
2
大清早,就来BT,
支持! 最近浮躁的很,不想看~
~~~~~~~~~~~~~
first me:D
2004-11-16 09:14
0
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
最初由 springkang[DFCG 发布
前言:七月份就已经发布在DFCG论坛里了,现在看雪老大要出精华6了,大菜鸟我近来没时间写东东了,就把它转来,算是投一篇稿吧。真希望能入选一篇,以回报这个给了我很多帮助的看雪论坛!

软件名称:
以壳解壳--SourceRescuer脱壳手记

........


谢谢,定当收录。:)
2004-11-16 09:25
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
4
最初由 kanxue 发布


谢谢,定当收录。:)

:D 多谢老大!
2004-11-16 09:39
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
精华6什么时候出啊?期待ing
2004-11-16 16:11
0
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
也就用AsprDbgr_build_106产生的进程/
//////////////////////////////////
怎么产生的?
2004-11-17 14:05
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
请问哪里有AsprDbgr下载啊:p
2004-11-17 14:05
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
8
最初由 pendan2001 发布
请问哪里有AsprDbgr下载啊:p

http://www.chinadfcg.com/viewthread.php?tid=5207&highlight=AsprDbgr
2004-11-17 20:36
0
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持!!!
2004-11-17 23:25
0
游客
登录 | 注册 方可回帖
返回
//