找回密码
 注册
搜索
热搜: 回贴

Unpack Acprotect 1.21 (一) dump,Acprotect,脱壳技术

2010-1-30 18:20| 发布者: admin| 查看: 98| 评论: 0|原作者: 飞燕


Unpack Acprotect 1.21 (一) dump,Acprotect,脱壳技术
2008年06月23日 星期一 下午 04:50
这几天比较忙,看雪这里也来得少了。看见偶成为“斑竹”,恐慌之余想想,唯有努力吧。

看到本版关于Acpr的帖子不少,也把自己的一点心得拿出来献丑,也算祝贺“脱壳论坛”的成立。



本文计划分四部分:一. dump、二. IAT 修复(不添加段)、三. 程序修复、四. 跨系统问题,由于时间的关系,打算一段一段的贴出。



(系统 WIN2K)



一、dump

1.躲过acpr的检查

用od(1.1b)载入程序,Command处输入:d fs:[30] 2,回车后将Hex dump窗口中左上角的 1改成 0(这就相当于插件IsDebugPresent选



hide啦);在Command处又输入 bp Process32First 1,回车。F9执行程序,断点处中断后去掉断点,Alt F9返回程序“领空”,F8两下后来到

006E1A4C 3B95 B3D44000 CMP EDX,DWORD PTR SS:[EBP 40D4B3]

这里[EBP 40D4B3]处存放的是程序的ProcessId,我们把它改成其父进程(OllDbg)的ProcessId,(用工具pupe)找到OllDbg的Id后替换该处



数据。

(当然,如果使用 Fly的修改版这一步就省了,不过知其所以不是更好吗!再加上od升级后 Fly的新版还在加工中吧。)



2.到伪oep

这步就更快了,按下Alt M,在地址401000 (size 00CC000)处下F2,F9执行程序!

中断了,呵呵,在406EDC处!这里是非常熟悉的代码!!我们正处于Delphi程序的第一个call之中!!!

00406EDC PUSH EBX

00406EDD MOV EBX,EAX

00406EDF XOR EAX,EAX

00406EE1 MOV DWORD PTR DS:[4F370C],EAX

00406EE6 PUSH 0

00406EE8 CALL ACProtec.00406E18

........ .........

3.修复oep

Acpr 1.21主程序这次把几乎整个初始化主干代码都偷掉了,不过找回这部分代码也很容易。

停在406edc后看看stack窗口,返回到6ed109 ?!鼠标在stack窗口里选中这行,回车,我们看见了经Acpr处理后“



主干”代码:

006ED0E3 PUSH ESI

006ED0E4 MOV DWORD PTR SS:[ESP],ECX

006ED0E7 PUSH EAX

006ED0E8 MOV EAX,ACProtec.00406EDC

006ED0ED MOV ECX,EAX

006ED0EF POP EAX

006ED0F0 PUSH ECX

006ED0F1 POP DWORD PTR DS:[6D4F0F] ; ACProtec.00406EDC

006ED0F7 POP DWORD PTR DS:[6D4EFF]

006ED0FD MOV ECX,DWORD PTR DS:[6D4EFF]

006ED103 CALL DWORD PTR DS:[6D4F0F] ; ACProtec.00406EDC

006ED109 MOV EAX,DWORD PTR DS:[4F258C]

006ED10E MOV EAX,DWORD PTR DS:[EAX]

006ED110 MOV DWORD PTR DS:[6D4EFB],ACProtec.004622F8

006ED11A PUSH DWORD PTR DS:[6D4EFB]

006ED120 POP DWORD PTR DS:[6D4F0B]

006ED126 CALL DWORD PTR DS:[6D4F0B]

006ED12C MOV DWORD PTR DS:[6D4EF7],EDI

........ ......

006ED1AA MOV DWORD PTR SS:[ESP],ACProtec.00462310

006ED1B1 POP DWORD PTR DS:[6D4F07]

006ED1B7 CALL DWORD PTR DS:[6D4F07]

006ED1BD PUSH DWORD PTR DS:[4F228C] ; ACProtec.004F45E8

006ED1C3 POP DWORD PTR DS:[6D4EE3]

006ED1C9 MOV ECX,DWORD PTR DS:[6D4EE3]

006ED1CF MOV EAX,DWORD PTR DS:[4F258C]

006ED1D4 MOV EAX,DWORD PTR DS:[EAX]

006ED1D6 PUSH DWORD PTR DS:[47F7CC] ; ACProtec.0047F818

006ED1DC POP EDX

006ED1DD PUSH ACProtec.00462310

006ED1E2 POP DWORD PTR DS:[6D4F03] ; ACProtec.004CBFF8

006ED1E8 CALL DWORD PTR DS:[6D4F03] ; ACProtec.004CBFF8

006ED1EE MOV EAX,DWORD PTR DS:[4F258C]

006ED1F3 MOV EAX,DWORD PTR DS:[EAX]



从这段代码容易分析出被“偷”的代码如下:



PUSH EBP

MOV EBP,ESP

ADD ESP,-0C

XOR EAX,EAX

PUSH EAX ; 这条语句可改成 push 0 等

MOV [EBP-4],EAX

MOV EAX,004CBFF8

CALL 00406EDC

MOV EAX,[4F258C]

MOV EAX,[EAX]

CALL 004622F8

MOV ECX,[4F2354]

MOV EAX,[4F258C]

MOV EAX,[EAX]

MOV EDX,[47FB5C]

CALL 00462310

MOV ECX,[4F228C]

MOV EAX,[4F258C]

MOV EAX,[EAX]

MOV EDX,[47F7CC]

CALL 00462310

MOV EAX,[4F258C]

MOV EAX,[EAX]



在代码段尾部的空闲处键入上面的代码,再加上Acpr未偷的两条语句,Oep就算修复了。这两条语句是:

004CC263 CALL ACProtec.00462390

004CC268 CALL ACProtec.004049D8



现在可以 dump 了。



后面将看到,这段“标准”的 oep代码还要根据我们的需要加以修改。




最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 21:26 , Processed in 0.152605 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部