您的位置:首页 > 其它

FSG2.0 手动脱壳笔记

2008-07-06 22:51 288 查看
为了逆向研究一款木马,给自己的马提供思路,需要脱壳。用PEID侦测,发现类型为FSG 2.0 -> bart/xt。试着脱了一下,ESP定律,内存镜像法都跑飞了。无奈只好单步跟踪了!这个壳很多朋友反应不好脱,有一定的难度,脱完之后的修复是关键! 用OD载入,

00400154 > 8725 6CD34000 xchg ds:[40D36C], esp ;停在这里单步F8
0040015A 61 popad
0040015B 94 xchg eax, esp ;ZX_Clear.0040D370
0040015C 55 push ebp
0040015D A4 movs byte ptr es:[edi], byte ptr ds:[>
0040015E B6 80 mov dh, 80
00400160 FF13 call ds:[ebx]
00400162 ^ 73 F9 jnb short ZX_Clear.0040015D
00400164 33C9 xor ecx, ecx ;F4运行到这 F8继续
00400166 FF13 call ds:[ebx]
00400168 73 16 jnb short ZX_Clear.00400180
0040016A 33C0 xor eax, eax
0040016C FF13 call ds:[ebx]
0040016E 73 1F jnb short ZX_Clear.0040018F
00400170 B6 80 mov dh, 80
00400172 41 inc ecx
00400173 B0 10 mov al, 10
00400175 FF13 call ds:[ebx]
00400177 12C0 adc al, al
00400179 ^ 73 FA jnb short ZX_Clear.00400175
0040017B 75 3A jnz short ZX_Clear.004001B7 ;F4运行到这
0040017D AA stos byte ptr es:[edi]
0040017E ^ EB E0 jmp short ZX_Clear.00400160
00400180 FF53 08 call ds:[ebx+8];F4运行到这
00400183 02F6 add dh, dh
00400185 83D9 01 sbb ecx, 1
00400188 75 0E jnz short ZX_Clear.00400198
0040018A FF53 04 call ds:[ebx+4]
0040018D EB 24 jmp short ZX_Clear.004001B3 ......................... 遇到向上跳的F4
004001C2 AD lods dword ptr ds:[esi]
004001C3 97 xchg eax, edi
004001C4 AD lods dword ptr ds:[esi]
004001C5 50 push eax
004001C6 FF53 10 call ds:[ebx+10]
004001C9 95 xchg eax, ebp
004001CA 8B07 mov eax, ds:[edi]
004001CC 40 inc eax
004001CD ^ 78 F3 js short ZX_Clear.004001C2
004001CF 75 03 jnz short ZX_Clear.004001D4;注意这里不能实现这个跳转
004001D1 FF63 0C jmp ds:[ebx+C]这里就跳到了程序的OEP
004001D4 50 push eax

DUMP 出来之后并没有结束,运行出现错误用,修复引入表之后依然出现错误。很多朋友都做到这一步!由于引入表被壳修改了,需要我们手动查找,如图1,具体的方法是找一个API函数,然后F7跟进去,查看JMP后的地址,如这里我查看了GetMessage这个函数,后边的405130包含在引入表的范围之内,在数据串口跟随地址,然后找到上下全0的开始和结束就是整个引入表的范围了



开始修复 左下角的数值 注意有个错误RVA填成40508C了应该是508C,是我们上一步搜到的 Getimports->show Invalid 然后删除非法的 保存就大功告成了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: