- 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
评分
-
查看全部评分
|