- UID
 - 39575
 
 注册时间2007-12-3
阅读权限10
最后登录1970-1-1
周游历练 
  
 
 
 
该用户从未签到  
 | 
 
 
发表于 2008-7-26 13:38:16
|
显示全部楼层
 
 
 
esp定律脱壳 -> dump -> iat -> overlay 
 
od载入,bp ReadFile, bp SetFilePointer 
断下后可以看到 
 
0045993B   .  6A 00         push    0 
0045993D   .  6A 50         push    50                               ;  偏移0x50 
0045993F   .  A1 009C4700   mov     eax, dword ptr [479C00] 
00459944   .  E8 C7C7FBFF   call    00416110                         ;  里面是 SetFilePointer(0x50) 
00459949   .  8D55 FC       lea     edx, dword ptr [ebp-4] 
0045994C   .  B9 04000000   mov     ecx, 4 
00459951   .  A1 009C4700   mov     eax, dword ptr [479C00] 
00459956   .  E8 C1C9FBFF   call    0041631C                         ;  ReadFile 从0x50开始读4字节 
0045995B   .  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  读到的4个字节内容为 00038200 
0045995E   .  99            cdq 
0045995F   .  52            push    edx 
00459960   .  50            push    eax 
00459961   .  A1 009C4700   mov     eax, dword ptr [479C00] 
00459966   .  E8 A5C7FBFF   call    00416110                         ;  SetFilePointer(0x38200) 
0045996B   .  8D55 FC       lea     edx, dword ptr [ebp-4] 
0045996E   .  B9 04000000   mov     ecx, 4 
00459973   .  A1 009C4700   mov     eax, dword ptr [479C00] 
00459978   .  E8 9FC9FBFF   call    0041631C                         ;  ReadFile 从0x38200开始读4字节 
0045997D   .  817D FC 22230>cmp     dword ptr [ebp-4], 22322         ;  读到的4个字节和 22322 比较 
00459984   .  0F9405 049C47>sete    byte ptr [479C04]                ;  相同就把 479C04 置1 
0045998B   .  817D FC 11111>cmp     dword ptr [ebp-4], 111111 
00459992   .  75 04         jnz     short 00459998 
 
脱壳前后区别就是那个sete byte ptr [479C04],但试了直接把它置1却不行,后面还会有ReadFile,所以用另一种方法 
既然是从0x50开始读第一个数据,后面的都是根据这个读到的偏移来运作,而脱壳后导致这个偏移不正确,那就直接修改这个偏移 
打开HexWorkshop载入脱壳前后2个文件,看到未脱壳文件的0x50处==38200, ctrl+G来到38200偏移处,复制一段 2223020006000000, 然后到dumped.exe里搜索这个,找到 C9200 这个地址, 接下来就把dumped.exe的0x50处 改成C9200 就ok了 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们 
 
 
 
x
 
 
评分
- 
查看全部评分
 
 
 
 
 
 |