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

模拟跟踪 修复方法之ACProtect脱壳——完美卸载XP V9.12,ACProtect,脱壳技术

2010-1-30 18:20| 发布者: admin| 查看: 101| 评论: 0|原作者: 云忆


模拟跟踪 修复方法之ACProtect脱壳——完美卸载XP V9.12,ACProtect,脱壳技术
2008年06月23日 星期一 下午 04:45
下载页面: http://www.skycn.com/soft/6169.html

软件大小: 4316 KB

软件语言: 简体中文

软件类别: 国产软件 / 共享版 / 卸载清除

应用平台: Win9x/NT/2000/XP

加入时间: 2003-11-06

下载次数: 332693

推荐等级: ****



【软件简介】:软件共有3个小程序,分别是:磁盘垃圾清理软件、软件安装监视器、软件卸载工具,是一套功能比较强大的安装/卸载/清理工具,新版更加全面的系统监视,让软件安装的一举一动历历在目,二次清理技术,软件卸载后将不留任何垃圾,磁盘垃圾清理的数量更多,软件运行更加稳定。



【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!



【调试环境】:WinXP、flyODBG、PEiD、LordPE、ImportREC 1.4.2 、WinHex



—————————————————————————————————

【脱壳过程】:







先说几句多余的话:请正确认识加密与解密(仅指技术研究)的关系——矛与盾——解密的发展无疑是促进了加密的进步!就偶个人以及偶所知道的朋友来说,学习CRACK只是个人兴趣,不为稻梁谋!否则也不会写破解笔记。



崇尚自由、共享!





1、偶使用的调试器:Ollydbg Anti ACProtect For XP 修改版 —— flyODBG

下载页面:http://tongtian.net/pediybbs/viewtopic.php?t=1532



2、反跟踪可以参考:梦幻Ollydbg —— 浅谈 ACProtect V1.09 Pro 的反跟踪And脱壳

相关页面:http://tongtian.net/pediybbs/viewtopic.php?t=1525





用 Run Trace 方法来脱壳,可以让偶们节省一些脱壳中F7单步走的时间,难点是在何处使用模拟跟踪以及如何设置较佳的跟踪条件;这些只有根据具体的情况具体分析了。



ACProtect运用了变形技术,使得许多代码在脱壳后丢失。为了找到修复方法,偶曾经对 jingulong 兄说过偶准备3天3夜来分析,后来偶用了1天的时间终于成功。



这次的试炼品是:完美卸载XP V9.12的NetClean.exe 昨天升级为 V9.13 了,偶写这篇V9.12脱壳笔记,作者不会太在意吧?笔记所写只是偶的一点ACProtect脱壳思路,ACProtect是一款优秀的壳,以后碰到的几率不会少的。



—————————————————————————————————

一、模拟跟踪 寻找OEP





用IsDebug 1.4插件去掉flyODBG的调试器标志。设置 忽略 除了“内存访问异常”之外的所有其他异常选项。





004AE000 60 pushad//进入OD后断在这!

004AE001 79 05 jns short NetClean.004AE008



F9运行,程序中断在异常处,这个int 1异常算是ACProtect的典型异常啦



004B3E96 CD 01 int 1//ACProtect的典型异常

004B3E98 40 inc eax//此处下断,SHIFT F9断在这!CTRL F9执行到返回!

004B3E99 40 inc eax

004B3E9A 0BC0 or eax,eax

004B3E9C 0F85 B6000000 jnz NetClean.004B3F58

…… ……省 略…… ……

004B3F99 61 popad

004B3F9A 61 popad

004B3F9B C3 retn//返回到 004B7CC2



————————————————————————



004B7CC2 F9 stc

004B7CC3 E9 04000000 jmp NetClean.004B7CCC



004B7CCC 83ED 01 sub ebp,1

004B7CCF 0F85 41FFFFFF jnz NetClean.004B7C16//F4下去

004B7CD5 EB 01 jmp short NetClean.004B7CD8



004B7CD8 E8 BDB3FFFF call NetClean.004B309A//F8带过

004B7CDD E9 0B000000 jmp NetClean.004B7CED





OK,偶现在开始使用模拟跟踪!下命令:TC EIP<004B0000 当然,可以一步步F7走,也有更简便的方法,偶这里只是学习一下Run Trace方法。如果你有大把的时间,等数小时后程序会自动暂停在OEP处的。要想快点则需要手动干预一下!有2点需要注意:



1、jnz等的向上循环手动F4下去跳出循环

2、CALL的地址比程序当前地址低的可以F8带过,不需要TC进入



当TC时间稍长时,可以查看 运行跟踪 找出上面所说的情况,手动干预一下,使模拟跟踪加快速度!





004B88FA E8 43D6FFFF call NetClean.004B5F42//CALL入低地址段

004B88FF E9 03000000 jmp NetClean.004B8907//F2下断,暂停运行跟踪,F9断在这



继续 TC EIP<004B0000 如果嫌记录太长,可以 清除记录 后再TC



004B9D46 E8 F7C1FFFF call NetClean.004B5F42

004B9D4B D3C8 ror eax,cl//F2下断,暂停运行跟踪,F9断在这



继续 TC EIP<004B0000



查看 运行跟踪 发现程序在 004B9DA5 处循环太多,偶们手动来协助它吧



004B9DA5 0F85 1CFFFFFF jnz NetClean.004B9CC7//F2下断,断下后取消断点,F4下去

004B9DAB 7E 03 jle short NetClean.004B9DB0





以下处理方法相同:



004BBEEC E8 51A0FFFF call NetClean.004B5F42

004BBEF1 75 01 jnz short NetClean.004BBEF4//F2下断,暂停运行跟踪,F9断在这



004BBF3B 0F85 55FFFFFF jnz NetClean.004BBE96//F4下去

004BBF41 E8 01000000 call NetClean.004BBF47



004BDAAC E8 9184FFFF call NetClean.004B5F42

004BDAB1 75 02 jnz short NetClean.004BDAB5//F2下断,暂停运行跟踪,F9断在这



004BDB08 0F85 2AFFFFFF jnz NetClean.004BDA38//F2下断,断下后取消断点,F4下去

004BDB0E E8 01000000 call NetClean.004BDB14



004BE0DA E8 C25EFFFF call NetClean.004B3FA1

004BE0DF 77 01 ja short NetClean.004BE0E2//F2下断,暂停运行跟踪,F9断在这



004BE136 0F85 5AFFFFFF jnz NetClean.004BE096//F2下断,断下后取消断点,F4下去

004BE13C E8 01000000 call NetClean.004BE142



004BE51D 0F85 29FFFFFF jnz NetClean.004BE44C//F2下断,断下后取消断点,F4下去

004BE523 74 03 je short NetClean.004BE528



004BE528 E8 BD5CFFFF call NetClean.004B41EA

004BE52D 87F2 xchg edx,esi//F2下断,暂停运行跟踪,F9断在这



004BE578 E8 245AFFFF call NetClean.004B3FA1

004BE57D 71 01 jno short NetClean.004BE580//F2下断,暂停运行跟踪,F9断在这



004BE605 E8 904AFFFF call NetClean.004B309A

004BE60A 0F82 03000000 jb NetClean.004BE613//F2下断,暂停运行跟踪,F9断在这



004BE632 E8 985EFFFF call NetClean.004B44CF

004BE637 C1DA 12 rcr edx,12//F2下断,暂停运行跟踪,F9断在这



004BE63D 0F85 71FFFFFF jnz NetClean.004BE5B4//F2下断,断下后取消断点,F4下去

004BE643 EB 01 jmp short NetClean.004BE646



…… ……省 略…… ……



004BEA52 0F85 3BFFFFFF jnz NetClean.004BE993//F2下断,断下后取消断点,F4下去

004BEA58 50 push eax



004BEE16 0F85 36FFFFFF jnz NetClean.004BED52//F2下断,断下后取消断点,F4下去

004BEE1C E8 01000000 call NetClean.004BEE22



004BEF72 0F85 4AFFFFFF jnz NetClean.004BEEC2//F2下断,断下后取消断点,F4下去

004BEF78 E8 01000000 call NetClean.004BEF7E



004C07B7 0F85 4CFFFFFF jnz NetClean.004C0709//F2下断,断下后取消断点,F4下去

004C07BD EB 01 jmp short NetClean.004C07C0



004C1B9F 0F85 34FFFFFF jnz NetClean.004C1AD9//F2下断,断下后取消断点,F4下去

004C1BA5 50 push eax



004C693E 0F85 55FFFFFF jnz NetClean.004C6899//F2下断,断下后取消断点,F4下去

004C6944 50 push eax



004C7006 0F85 3DFFFFFF jnz NetClean.004C6F49//F2下断,断下后取消断点,F4下去

004C700C EB 01 jmp short NetClean.004C700F



004C7C88 0F85 52FFFFFF jnz NetClean.004C7BE0//F2下断,断下后取消断点,F4下去

004C7C8E E8 01000000 call NetClean.004C7C94





再次 TC EIP<004B0000 数分钟后程序自动停在00445E14处!查看运行跟踪就知道程序是从何处返回的。





004C8612 8B85 71B64100 mov eax,dword ptr ss:[ebp 41B671] ; NetClean.00445E14

004C8618 0385 383F4000 add eax,dword ptr ss:[ebp 403F38]

//EAX=00045E14 00400000=00445E14 这就是OEP值

004C861E 8985 71B64100 mov dword ptr ss:[ebp 41B671],eax ; NetClean.00445E14

004C8624 61 popad

004C8625 8BC5 mov eax,ebp

004C8627 E8 9493FEFF call NetClean.004B19C0

004C862C FFB5 71B64100 push dword ptr ss:[ebp 41B671] ; NetClean.00445E14

004C8632 8BE8 mov ebp,eax

004C8634 C3 retn //返回 00445E14 飞向光明之巅!





————————————————————————

看来这个东东没有被ACProtect壳 Stolen Code 呀





00445E14 55 push ebp//在这儿用LordPE完全DUMP这个进程

00445E15 8BEC mov ebp,esp

00445E17 6A FF push -1

00445E19 68 C0E24400 push NetClean.0044E2C0

00445E1E 68 D65F4400 push NetClean.00445FD6

00445E23 64:A1 00000000 mov eax,dword ptr fs:[0]

00445E29 50 push eax

00445E2A 64:8925 00000000 mov dword ptr fs:[0],esp

00445E31 83EC 68 sub esp,68

00445E34 53 push ebx

00445E35 56 push esi

00445E36 57 push edi

00445E37 8965 E8 mov dword ptr ss:[ebp-18],esp

00445E3A 33DB xor ebx,ebx

00445E3C 895D FC mov dword ptr ss:[ebp-4],ebx

00445E3F 6A 02 push 2

00445E41 FF15 60B74400 call dword ptr ds:[44B760]



————————————————————————



重新运行,运行ImportREC,选择这个进程。把OEP改为00045E14,点IT AutoSearch,把大小改为:A6C 点“Get Import”,只有一个函数无效,用“追踪层次3”修复之,FixDump。





—————————————————————————————————

二、修复 丢失代码





运行脱壳后的dumped_.exe当然出错啦,找到出错的地方:



004AF00B FF25 6C5C1400 jmp dword ptr ds:[145C6C]

…… ……省 略…… ……

004B076F FF25 046C1400 jmp dword ptr ds:[146C04]



这一大段代码全部丢失了,现在要做的就是让程序在运行时把这段代码解压在程序内!这样脱壳后就不会丢失了。其实偶以前的笔记已经给出了解决方法,只要你细心跟踪了就能发现的。





复制NetClean.exe以防不测。用LordPE给其加个新的区段:大小00020000 ,然后用WinHex在程序末尾0007D118处粘贴00020000长度的00字节。可以在0007D118处写入某些字符以便查找,如:fly[FCG]



设置LordPE的“重建”选项,只保留“验证PE”一个选项,最后用LordPE重建“增肥”后的 NetClean.exe。



————————————————————————

用flyODBG载入“增肥”后NetClean.exe,忽略所有异常选项,取消以前的所有断点。偶们开始还原丢失代码!





004AE000 60 pushad//进入OD后断在这!

004AE001 79 05 jns short NetClean.004AE008



★★下命令:BP GlobalAlloc 2 ★★



77E536A3 6A 1C push 1C

77E536A5 68 D018E677 push kernel32.77E618D0//断在这!中断5次后取消断点 返回程序

77E536AA E8 323E0000 call kernel32.77E574E1

…… ……省 略…… ……

77E5379E C2 0800 retn 8//返回到 004B1BAD



F9运行,在77E536A5处中断5次,返回程序。当然,对于其它用ACProtect加壳的程序,可以返回程序看是哪里对丢失代码动手脚,以确定具体的位置!



返回程序后偶们要知道刚才添加字节的具体位置:Alt M查看内存,在整个区段搜索:fly[FCG]



004E1118 66 6C 79 5B 46 43 47 5D 00 00 00 00 00 00 00 00 fly[FCG]........



确定添加字节开始在004E1118处!





004B1B9B B9 70170000 mov ecx,1770

004B1BA0 68 10270000 push 2710

004B1BA5 6A 40 push 40

004B1BA7 FF95 F1434000 call dword ptr ss:[ebp 4043F1]//CALL GlobalAlloc

004B1BAD 8BF8 mov edi,eax//EAX=00145C68 把返回值改为:004E1118 狸猫换太子

004B1BAF 81C7 A00F0000 add edi,0FA0

004B1BB5 50 push eax

004B1BB6 B9 70170000 mov ecx,1770

004B1BBB 8DB5 05204000 lea esi,dword ptr ss:[ebp 402005]

004B1BC1 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi]

004B1BC3 5A pop edx

004B1BC4 8BF2 mov esi,edx

004B1BC6 81C6 A00F0000 add esi,0FA0

004B1BCC 8BFE mov edi,esi

004B1BCE B9 70170000 mov ecx,1770

004B1BD3 AC lods byte ptr ds:[esi]

004B1BD4 32C3 xor al,bl

004B1BD6 AA stos byte ptr es:[edi]

004B1BD7 E2 FA loopd short NetClean.004B1BD3

004B1BD9 8BFA mov edi,edx

004B1BDB B9 E8030000 mov ecx,3E8

004B1BE0 8BC2 mov eax,edx

004B1BE2 05 A00F0000 add eax,0FA0

004B1BE7 AB stos dword ptr es:[edi]

004B1BE8 83C0 06 add eax,6

004B1BEB E2 FA loopd short NetClean.004B1BE7

004B1BED B9 E8030000 mov ecx,3E8

004B1BF2 8DBD 05204000 lea edi,dword ptr ss:[ebp 402005]

004B1BF8 8BC2 mov eax,edx

004B1BFA 66:C707 FF25 mov word ptr ds:[edi],25FF

004B1BFF 8947 02 mov dword ptr ds:[edi 2],eax

004B1C02 83C7 06 add edi,6

004B1C05 83C0 04 add eax,4

004B1C08 E2 F0 loopd short NetClean.004B1BFA

004B1C0A 60 pushad

004B1C0B E8 00000000 call NetClean.004B1C10

004B1C10 5E pop esi

004B1C11 83EE 06 sub esi,6

004B1C14 B9 92000000 mov ecx,92

004B1C19 29CE sub esi,ecx

004B1C1B BA 5FBEACA3 mov edx,A3ACBE5F

004B1C20 C1E9 02 shr ecx,2

004B1C23 83E9 02 sub ecx,2

004B1C26 83F9 00 cmp ecx,0

004B1C29 7C 1A jl short NetClean.004B1C45

004B1C2B 8B048E mov eax,dword ptr ds:[esi ecx*4]

004B1C2E 8B5C8E 04 mov ebx,dword ptr ds:[esi ecx*4 4]

004B1C32 33C3 xor eax,ebx

004B1C34 C1C0 11 rol eax,11

004B1C37 03C2 add eax,edx

004B1C39 81F2 47137A8D xor edx,8D7A1347

004B1C3F 89048E mov dword ptr ds:[esi ecx*4],eax

004B1C42 49 dec ecx

004B1C43 EB E1 jmp short NetClean.004B1C26

004B1C45 61 popad

004B1C46 61 popad

004B1C47 C3 retn



现在丢失代码已经全部还原在偶新增的区段内了,跑不了了



在OEP值00445E14处下内存访问断点,F9运行程序,直达入口!DUMP出程序!重新修复输入表,正常运行!





☆☆☆☆☆ 三千丈红尘 苍茫人世 吾将何处翱翔 ☆☆☆☆☆





—————————————————————————————————





, _/

/| _.-~/ \_ , 青春都一饷

( /~ / \~-._ |\

`\\ _/ \ ~\ ) 忍把浮名

_-~~~-.) )__/;;,. \_ //'

/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了破解轻狂

`~ _( ,_..--\ ( ,;'' / ~-- /._`\

/~~//' /' `~\ ) /--.._, )_ `~

" `~" " `" /~'`\ `\\~~\

" " "~' ""







Cracked By 巢水工作坊——fly [OCN][FCG][NUKE]



2003-12-15 23:00


最新评论

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

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

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部