ASProtect 1.1手动脱壳入门第十九篇
本次教程的目标是一个使用 ASProtect 1 1b 加壳的程序,该版本相对较早,目前市面上主流已是 1 2x 或更新版本。不过,深入了解其保护机制,对于掌握加壳技术的发展脉络仍然很有帮助。查壳结果显示为:ASProtect 1 1b Registered [SAC],即 Alexey Solod
本次教程的目标是一个使用 ASProtect 1.1b 加壳的程序,该版本相对较早,目前市面上主流已是 1.2x 或更新版本。不过,深入了解其保护机制,对于掌握加壳技术的发展脉络仍然很有帮助。查壳结果显示为:ASProtect 1.1b Registered [SAC],即 Alexey Solodovnikov 的作品。
与当前流行的 ASProtect 1.2x 版本相比,1.1b 版本在异常处理上有一个显著差异:它并未使用 SEH 链,而是精心设计了 13 个非法指令来触发异常。这意味着传统的模拟跟踪方法(用于寻找 OEP,即原始入口点)已不再适用。既然方法失效,我们直接换一种思路,手动操作。
寻找 OEP
使用 Ollydbg(OD)加载目标程序。首先,将除了“错误”和“有特权的指令”之外的所有异常均设置为“忽略”。好消息是,1.1b 版本的壳不会检测调试器,因此省去了隐藏 OD 的麻烦。
加载后,程序停在外壳的入口点:
0040D001 > 60 pushad //外壳入口,F9运行。
0040D002 E9 95050000 jmp chap709.0040D59C
……
直接按 F9 运行。程序会触发一系列精心安排的非法指令异常,例如 lea eax, eax 这种看似合法但实际非法的用法。需要连续按 Shift+F9 共 13 次,将这 13 个异常全部处理。每按一次,程序就会执行一小段异常处理代码,最终到达第 13 次异常的位置。
第 13 次异常处理完后,按 ALT+M 打开内存镜像窗口。找到如下区域:
内存镜像,项目 21
地址=00401000
大小=00004000 (16384.)
Owner=chap709 00400000
区段=
包含=code //对这里下内存访问断点,Shift F9运行。
类型=Imag 01001002
访问=R
初始访问=RWE
对标注为“包含=code”的区段(即代码段)设置一个“内存访问”断点,然后再次按 Shift+F9 运行。这一步至关重要,它会直接引导我们到达程序真正代码开始执行的位置。
程序中断后,我们看到了熟悉的场景:
004010CC 55 push ebp //到达Oep,用Loadpe脱壳吧。
004010CD 8BEC mov ebp, esp
004010CF 83EC 44 sub esp, 44
004010D2 56 push esi
……
这里的 push ebp; mov ebp, esp 是典型的 Windows 程序入口特征。很好,OEP 已经找到,地址为 0x10CC。
到了这一步,就可以使用 LoadPE 等工具将这个进程转存(Dump)下来,生成一个脱壳后的文件。不过先别急,壳虽然脱了,但输入表(IAT)通常已被加密破坏,还需要修复。
IAT 修复
打开 ImportREC,在进程列表中选择正在调试的程序。在 OEP 栏填入 10CC,然后点击“自动搜索”。ImportREC 会根据代码特征找到 IAT 的地址。扫描完成后,发现共有 111 个函数指针未被正确识别,这很常见,壳确实做了手脚。
对于这种加密的 IAT,可以通过调整“跟踪等级”来尝试修复。先用“等级 1”试一下,这次修复了 98 个指针。剩下 13 个顽固分子,再用“等级 3”的深度跟踪处理,这次全部顺利修复。点击“修复转储文件”按钮,选择之前用 LoadPE 转存出来的文件,一个可以正常运行的程序就诞生了。
区段减肥与 PE 重建
不过,事情还没完。脱壳后的程序里,通常还残留着 ASProtect 加壳时创建的许多垃圾区段,例如那些巨大的、包含异常处理代码的区块。这些区段不仅增加了文件体积,有时还会干扰其他分析工具或导致程序不稳定。因此,合理地进行“区段减肥”和“PE 重建”是脱壳工作中的良好习惯。
这个步骤需要一些 PE 文件结构的知识,但跟着做一遍,经验就会慢慢积累。建议先备份好脱壳后的程序,因为如果减肥过度或操作不当,程序可能无法运行。本次操作仅作为示例,旨在展示如何分析原程序的结构,以后遇到类似情况就能举一反三。
我们可以同时用 OD 加载脱壳后的程序和原版的 Win98 记事本(Notepad.exe),分析它们的区段结构,找出哪些是原程序需要的,哪些是垃圾。
原版记事本的内存镜像结构非常清晰:
地址 大小 Owner Section Contains 类型 访问 初始访问 映射为
00400000 00001000 NOTEPAD PE header Imag R RWE
00401000 00004000 NOTEPAD .text code Imag R RWE
00405000 00001000 NOTEPAD .data data Imag R RWE
00406000 00001000 NOTEPAD .idata imports Imag R RWE
00407000 00005000 NOTEPAD .rsrc resources Imag R RWE
0040C000 00001000 NOTEPAD .reloc relocations Imag R RWE
这里的关键区段包括:
- .text:代码段,包含程序的逻辑指令。
- .data:数据段,存放程序初始化时用到的全局变量等。
- .idata:输入表,也就是刚修复好的 IAT,是壳重点破坏的对象。
- .rsrc:资源段,包含图标、菜单、对话框等。
- .reloc:重定位表,对于 EXE 文件来说通常不是必需,可以删除以减小体积。
有了原版的结构作为参照,就能清楚哪些垃圾区段可以安全删除。例如,那些巨大的、名为 .ASProtect 或类似名字的区段,基本都可以移除。最后,使用 PE 工具(如 LordPE 或 CFF Explorer)重建 PE 头,修正所有节表偏移和大小,一个干净、小巧的脱壳版程序就完成了。
整个过程的核心在于两点:一是通过 13 次异常处理找到 OEP,二是修复被加密的 IAT。掌握了这两个关键步骤,再遇到这个系列的壳,处理起来就心中有数了。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
零基础Python网络安全学习指南,包住宿实战培训
先抛出几个核心判断:网络安全人才缺口确实已经超过70万。这个数字不算夸张,各大招聘网站上安全岗位的薪资涨幅和需求增长都是实实在在的。但实话实说,行业真正缺的是能上手干活的人,不是只懂几个理论概念的新手。因此,一套扎实且成体系的训练方案,对于零基础转行或进阶提升就显得格外关键。 从零基础到能够独立应对
网络安全定义与核心概念详解
谈到网络安全,不同组织与标准体系对其定义虽有差异,但核心目标高度统一:保护信息与系统不受威胁侵害。以下梳理几种主流定义—— 什么是网络安全? 国际标准化组织(ISO)在ISO-74982文献中将安全定义为:最大程度地降低数据和资源遭受攻击的可能性。该定义虽简短,却精准点出安全的本质——即风险控制。
IIS 7.0网站漏洞利用与修复方法指南
先来聊聊当前网络安全领域比较流行的一种实战技巧——以PHP环境为例,详细讲解图片马合并与解析漏洞利用的具体操作步骤。整个过程并不复杂,但细节往往决定成败,大家跟着流程逐步操作即可。 合并一张PHP一句话图片马 首先,我们需要将一句话木马脚本与一张正常图片合并,生成一个看似无害的图片文件。合并方式主要
织梦管理系统后台查找功能教程
通过SQL注入漏洞获取织梦CMS(DedeCMS)管理员密码后,满怀期待地准备进入后台,却发现怎么也找不到登录入口——这种情况其实相当常见。别着急,这里有一个实用的技巧值得尝试。 直接在网站地址后面添加以下路径: include dialog select_media php?f=form1 mur
微软IE浏览器BrowseDialog类(ccrpbds6.dll)拒绝服务安全漏洞深度分析
BrowseDialog Class (ccrpbds6 dll) 导致 Internet Explorer 拒绝服务漏洞分析 该漏洞的PoC(概念验证代码)实现极为直接——触发浏览器崩溃的条件简单得令人意外。测试环境采用Windows XP Professional SP2(已安装全部补丁)并运行
- 热门数据榜
相关攻略
2026-07-25 22:28
2026-07-25 22:28
2026-07-25 22:28
2026-07-25 22:28
2026-07-25 22:10
2026-07-25 22:10
2026-07-25 22:10
2026-07-25 22:10
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

