开始的复活节 发表于 2017-4-12 23:21

手脱XXXXXX 1.23(学习历程)

本帖最后由 姐又寡闻了 于 2019-6-6 22:19 编辑

声明:

       1.纪录自己成长历程,与大家分享
       2.由于技术与能力,如有疏漏错误,欢迎指出,高手轻喷

简述:
      
       在学习ximo的视频教程中的第22课中留下了一个练习供学习研究,在脱壳的过程中发现多了一些变化,最后一次异常法并不是像教程里的那么顺利,搜索论坛后发现没有具体的过程,在自己的尝试下还是脱了壳。

1.发送到PEID
   ASProtect 1.22 - 1.23 Beta 21 ->Alexey Solodovnikov用PEID插件的VerA(Asprotect版本扫描器)0.15查看具体信息。Version: ASProtect 1.23 Beta 18
2.载入OD,不勾选内存访问异常,其他异常全部勾选 00401000 >68 01604D00   push YTB.004D600100401005    E8 01000000   call YTB.0040100B
0040100A    C3            retn
0040100B    C3            retn
0040100C    42            inc edx
0040100D    D9F3            fpatan
0040100F    FB            sti
00401010    8BA3 BF213EF1   mov esp,dword ptr ds:
00401016    1E            push ds
00401017    35 BFBE3DFB   xor eax,0xFB3DBEBF


3.最后一次异常法运行到最后一次(第17次),第18次跑飞。尝试在最近的retn处下断点(F2),shift+F9后程序跑飞。

7C812AEB    5E            pop esi                                  ; YTB.0047A69C
7C812AEC    C9            leave
7C812AED    C2 1000         retn 0x10
4.考虑用最后一次异常法运行到倒数第2次(第16次)
00A22AA6    3100            xor dword ptr ds:,eax
00A22AA8    64:8F05 0000000>pop dword ptr fs:
00A22AAF    58            pop eax
00A22AB0    833D 786DA200 0>cmp dword ptr ds:,0x0
00A22AB7    74 14         je short 00A22ACD
00A22AB9    6A 0C         push 0xC
00A22ABB    B9 786DA200   mov ecx,0xA26D78
00A22AC0    8D45 F8         lea eax,dword ptr ss:
00A22AC3    BA 04000000   mov edx,0x4
00A22AC8    E8 63E1FFFF   call 00A20C30
00A22ACD    FF75 FC         push dword ptr ss:
00A22AD0    FF75 F8         push dword ptr ss:
00A22AD3    8B45 F4         mov eax,dword ptr ss:
00A22AD6    8338 00         cmp dword ptr ds:,0x0
00A22AD9    74 02         je short 00A22ADD
00A22ADB    FF30            push dword ptr ds:
00A22ADD    FF75 F0         push dword ptr ss:
00A22AE0    FF75 EC         push dword ptr ss:
00A22AE3    C3            retn                ; //运行到最近的retn处
00A22AE4    5F            pop edi
5.运行到最近的retn处(F2下段,SHIFT+F9,F2取消断点) ,查看堆栈窗口地址填堆栈窗口 (程序名下的第二行)的地址,在命令行下硬件断点 hr 12FFA4。然后shift+F9运行。
0012FF5C   00A3313C
0012FF60   00400000ASCII "MZP" ;// MZP下的第二行,即0012FFA4
0012FF64   FE4EB7A6
0012FF68   0012FFA4
0012FF6C   00A10000
0012FF70   009F0000
6.跳转如下,删除硬件断点,F8单步跟。
00A33867- FFE0            jmp eax          ; YTB.0048C760
00A33869    8BD7            mov edx,edi
00A3386B    BD 8F8C2274   mov ebp,0x74228C8F
00A33870    81F5 A1BAA335   xor ebp,0x35A3BAA1
00A33876    F7D5            not ebp
00A33878    8BF5            mov esi,ebp
00A3387A    BA 254F6FAB   mov edx,0xAB6F4F25
00A3387F    C1CA D1         ror edx,0xD1
7.来到OEP(delphi入口点特征)
0048C760    55            push ebp;      //OEP入口
0048C761    8BEC            mov ebp,esp
0048C763    83C4 F0         add esp,-0x10
0048C766    B8 90C34800   mov eax,YTB.0048C390
8.用loadPE修复镜像大小再完整转存, 打开ImportREC修复文件。打开YTB(因为接下来要用插件修复防止程序卡住),OEP输入8C760,查取IAT获取输入表后显示无效函数。先用等级1修复后还有十几个无效的指针,用AsProtect 1.22插件修复后没有无效的指针。修复。


9.运行查壳
成功运行,查壳:BorlandDelphi 6.0 - 7.0。脱壳成功。

xiaohua888 发表于 2017-4-13 17:59

学习了谢谢 啊

chenjingyes 发表于 2017-4-14 00:37

谢谢楼主分享

bysysnet 发表于 2017-4-14 09:09

厉害了,楼主,谢谢分享。

liu824465439 发表于 2017-4-14 15:24

支持!感谢分享

列明 发表于 2017-4-15 00:44

异常法,去aspack,有空也去试一试

z19940715 发表于 2017-4-15 12:41

可以的,谢谢分享

mygod123 发表于 2017-4-16 15:36

学习了谢谢

gomg007 发表于 2017-11-1 16:34

同练习。为什么是倒数第二次呢?还是说只跟hr 0012ffa4有关

纳兰容若 发表于 2017-11-10 19:23

多谢楼主分享{:301_997:}
页: [1] 2
查看完整版本: 手脱XXXXXX 1.23(学习历程)