手脱灰鸽子(pelock 1.0x)壳

作者:coolgo 日期:2007/11/11
秋叶依然注:把黑防鸽子的壳脱了,按照下面的教程来还是很简单的.主要是修复需要花点时间


OD载入

设置如下

shift+F9  10次

Ctrl+F查找 “ SUB EAX,DWORD PTR SS:[EBP+ECX*4+3B14] ” 指令并F2下段点

Ctrl+F查找 “MOV DWORD PTR DS:[ECX],EBX” ”         指令并改成如下:

    修改后:“MOV DWORD PTR DS:[ECX],EAX”           并F2下段点

shift+F9
断在00374351

找一片“空地”

我们找的是这里003785E1
以二进制修改
81 F9 48 01 00 00 74 24 81 F9 85 00 00 00 74 16 81 F9 84 00 00 00 74 08 2B 84 8D 14 3B 00 00 C3 2D 2B 84 8D 14 C3 2D 3B 00 00 D3 C3 2D 89 19 EB 03 C3 00 00

修改00374351
返回SUB EAX,DWORD PTR SS:[EBP+ECX*4+3B14]这里修改call  003785E1
为call  003785E1 取消断点

shift+F9

这里开始在修复IAT输入表了,在命令行 下: DD  ECX ,F9可以看到在修复输入表了
一直按F9
一直F9直至00376744


00401000断点到OEP处

按Alt+M,在如下区段下F2断点

然后 shift +F9,在下面断下了

005C6909停止SHIFL+F9

这里是伪oep

你可以拿个未加壳的delhpi程序去比较下看

分析代码.
005C68FE            .  381C0E            cmp byte ptr ds:[esi+ecx],bl
这里用二进制修改为

55 8B EC 83 C4 F0 B8 94 61 5C 00 E8 76 04 E4 FF 8B 1D 24 D1 5C 00 8B 35 20 D2 5C 00 8B 06 E8 5F 1A EC FF 8B 06 BA 74 6C 5C 00 E8 4B 16 EC FF 8B 0E

dump程序
1c68fe

就保存为m.exe吧..害我再做次..这个录制的有问题..
下面我们来获取正确的IAT输入表

这里就是
这里我们要比较下了..
开始为:005d4000 结束为:005d5912 大小1912
001c68fe
001d4000  00001912
CUT掉无效的
等等吧..稍有点慢..等全部CUT掉就修复.

下面我们修复dump下来的程序
修复好了..
我们运行..

运行报错,因为壳偷了段

我们这里使用aki前辈的方法

8次异常shift+F9

查找2进制3017

为什么?自己理解吧

下断点.
出错了..我们不怕.再来.
shift+F9到达003783C7

观察 edi:1090000
eip:003783c7

以上2个地址所在段就是我们要补的段

好..现在GOGO.补下.

看到3783c7比5d4000小的多我们将他的虚拟地址加大 改为10a0000
这里就是c90000
这里就是CA0000重建PE

运行报错

我们先跟踪原程序,ALT+M在00340000区段下内存访问断点我们这里是370000

0040467A   .  A1 40E65C00                      mov eax,dword ptr ds:[5CE640]  这里是关键5CE640
0040467F   .  85C0                             test eax,eax
00404681   .  74 4B                            je short H_Client.004046CE
00404683   .  8B30                             mov esi,dword ptr ds:[eax]     //断在这里
00404685   .  33DB                             xor ebx,ebx
00404687   .  8B78 04                          mov edi,dword ptr ds:[eax+4]
这里要注意下..我们继续..
DD 005CE640 发现
005CE640  00376BA8
我们已经将370000改为10a0000 这里应该发生变化

应该是010a6ba8

我们直接修改,修改为mov eax,010a6ba8

保存,再运行 报错了
又引用了370000段,我们再修改

跟踪原程序 下断出问题处
0040469C            > /8B04DF            mov eax,dword ptr ds:[edi+ebx*8]

发现是EDI的问题

00404687    8B78 04                            mov edi,dword ptr ds:[eax+4]

这里对EDI进行了操作

我们下断 动行.ds:[010A6BAC]=00376BB0
              edi=7C930738 (ntdll.7C930738)

我们要把ds:[010A6BAC]=00376BB0 改成ds:[010A6BAC]=010A6BB0
开始修改..在命令输入dd 010A6BAC
010A6BAC  00376BB0
直接修改为010A6BB0
保存
现在看看还可不可以运行..

可以运行了..再查下壳.看下壳脱掉了没..
Borland Delphi 6.0 - 7.0


From: 本站原创
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]