老文章档案 · 2003 年

新版aspr脱壳方法(完全版)

破解教程 · 脱壳教程 · 2003-09-16 · 作者:jwh51 人气: · 出处:赢政天下整理收藏)

新版ASPR的加壳方法有了一些变化,用工具是脱不了了,所以写了这个,给大家一个简单的解决方案.

用OD载入,BP IsDebuggerPresent,F9,停了下来:

77E52740 > 64:A1 18000000 MOV EAX, DWORD PTR FS:[18]

77E52746 8B40 30 MOV EAX, DWORD PTR DS:[EAX+30]

77E52749 0FB640 02 MOVZX EAX, BYTE PTR DS:[EAX+2]

77E5274D C3 RETN

F8,到RETN之前这一行,看看[EAX+2],我是7FFDF002=01,

重新载入,把7FFDF002值改为0(这样可跳过ASPR对程序级调试的检查),F9,这时有异常会停下来,这时就用SHIFT+F9过,大约30次左右,你可看到这样的代码

00C23D5F 3100 XOR DWORD PTR DS:[EAX], EAX

00C23D61 64:8F05 0000000>POP DWORD PTR FS:[0]

00C23D68 58 POP EAX

00C23D69 833D BC7EC200 0>CMP DWORD PTR DS:[C27EBC], 0

00C23D70 74 14 JE SHORT 00C23D86

00C23D72 6A 0C PUSH 0C

00C23D74 B9 BC7EC200 MOV ECX, 0C27EBC

00C23D79 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]

00C23D7C BA 04000000 MOV EDX, 4

00C23D81 E8 8ED2FFFF CALL 00C21014

00C23D86 FF75 FC PUSH DWORD PTR SS:[EBP-4]

00C23D89 FF75 F8 PUSH DWORD PTR SS:[EBP-8]

00C23D8C 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]

00C23D8F 8338 00 CMP DWORD PTR DS:[EAX], 0

00C23D92 74 02 JE SHORT 00C23D96

00C23D94 FF30 PUSH DWORD PTR DS:[EAX]

00C23D96 FF75 F0 PUSH DWORD PTR SS:[EBP-10]

00C23D99 FF75 EC PUSH DWORD PTR SS:[EBP-14]

00C23D9C C3 RETN

这是典型的ASPR的最后一个异常。(两个JE加个RETN),这时不要SHIFT+F9了,不然程序会运行的。要用SHIFT+F7进入。这时会停在系统空间。用ALT+M打开MEMORY MAP,找到SYSTEM CLEAN所在的位置,第一个SECTION如下.

Address size section contains

00401000 00161000 code

在上面这个地方“右键—>set memory breakpoint on access"下个内存断点.然后F9运行,呵,你可发现,我们已经从壳的迷宫走出来了,(这个方法,再也不用象以前那样小心翼翼的F8F7了.)程序停在这:

00407278 - FF25 2CF35600 JMP DWORD PTR DS:[56F32C]

0040727E 8BC0 MOV EAX, EAX

00407280 - FF25 28F35600 JMP DWORD PTR DS:[56F328]

00407286 8BC0 MOV EAX, EAX

00407288 - FF25 24F35600 JMP DWORD PTR DS:[56F324]

0040728E 8BC0 MOV EAX, EAX

00407290 - FF25 20F35600 JMP DWORD PTR DS:[56F320]

00407296 8BC0 MOV EAX, EAX

00407298 50 PUSH EAX

00407299 6A 40 PUSH 40

0040729B E8 E0FFFFFF CALL SystemCl.00407280

004072A0 C3 RETN

这并不是程序的真正入口(入口位还远呢,这是ASPR的新特点),但是它给我们提供了一个很有用的信息,那就是IAT的位置(新版SAPR无法用importREC自动搜索IAT了),所以我们可以先 D 56F32C,让内存区定位在这里,去掉内存断点,F8,又回到壳中,不过没关系再按几下F8就又可从壳中回来的,回来后我们来到这:

0040734D A3 68B65600 MOV DWORD PTR DS:[56B668], EAX ; SystemCl.00400000

00407352 A1 68B65600 MOV EAX, DWORD PTR DS:[56B668]

00407357 A3 D8205600 MOV DWORD PTR DS:[5620D8], EAX

0040735C 33C0 XOR EAX, EAX

0040735E A3 DC205600 MOV DWORD PTR DS:[5620DC], EAX

00407363 33C0 XOR EAX, EAX

00407365 A3 E0205600 MOV DWORD PTR DS:[5620E0], EAX

0040736A E8 C1FFFFFF CALL SystemCl.00407330

0040736F BA D4205600 MOV EDX, SystemCl.005620D4

00407374 8BC3 MOV EAX, EBX

00407376 E8 75D8FFFF CALL SystemCl.00404BF0

0040737B 5B POP EBX

0040737C C3 RETN

到这里我们要做3件事:

1.拿出LOADPE,把这个东东从内存DUMP出来DUMPED.EXE.

2,记下EBX的值560d08.

3,先修复好引入表,修复方法如下:

看看内存区在56f32c一块(别不记得为什么在这里了,上下找找,很快就可发现IAT的位置:56F21C--->56FBA4,大小为56FBA4-56F21C=988,

打开importREC,选中程序IAT的RVA填入16F21C,size:988,按下"获得输入信息",这时可找到一些指针,但还用很多无效,按"显示无效--->追踪层次1(分解),可修复大部分指针,还有一些得手动了,不过我发现用新版的ASPR插件竞可以全部修复(试了几个都可以,所以也就偷懒了,用ASPR插件修复,还有几个无效的指针其实是垃圾把它们CUT了(看看它们的值就知道是不是垃圾了).然后FIX DUMPED.EXE为DUMPED_.EXE.

下面就是修复入口处了.

回到原程序.按几下F8,过了RETN我们就来到程序入口了.

005613DF 0000 ADD BYTE PTR DS:[EAX], AL

005613E1 0000 ADD BYTE PTR DS:[EAX], AL

005613E3 0000 ADD BYTE PTR DS:[EAX], AL

005613E5 0000 ADD BYTE PTR DS:[EAX], AL

005613E7 0000 ADD BYTE PTR DS:[EAX], AL

005613E9 0000 ADD BYTE PTR DS:[EAX], AL

005613EB E8 4C5FEAFF CALL SystemCl.0040733C

005613F0 FF15 84A15600 CALL DWORD PTR DS:[56A184] ; SystemCl.005608F0

005613F6 E8 BD39EAFF CALL SystemCl.00404DB8

005613FB 90 NOP

程序是停在5613F0,可以断定前面的CALL已运行过了.而且入口处和以前一样被

改成了0,我们要把它补回,但是新版入口的代码似乎不好找(如果谁发现更好的方法告诉我一声:-),不过看这个特点

是用D7写的,D7的代码特征是

PUSH EBP

MOV EBP,ESP

ADD ESP -10(也可能是ADD ESP -0C)

MOV EAX,******

所以只要找出最后这一句MOV,EAX,******,中的*****值就可以补回去了,还记得开始要大家记做的EBX的值560D08吗,它就是这里的值.这样我们就可以打开DUMP出并已经修复引入表的程序DUMPED_.EXE,把这一段代码补回去了,补完后是这样

005613E0 > $ 55 PUSH EBP

005613E1 . 8BEC MOV EBP, ESP

005613E3 . 83C4 F0 ADD ESP, -10

005613E6 . B8 080D5600 MOV EAX, jjjj_.00560D08

005613EB . E8 4C5FEAFF CALL jjjj_.0040733C

005613F0 . FF15 84A15600 CALL DWORD PTR DS:[56A184] ; jjjj_.005608F0

005613F6 . E8 BD39EAFF CALL jjjj_.00404DB8

保存后用LOADPE把入口点改成1613e0,OK,程序可以运行了.脱壳完成.

应WINROOT要求,补上脱壳动画:

HTTP://wangming.west263.com/asprunpack/asprunpack.rar

jwh51

(出处:赢政天下整理收藏)

相关文章:

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史