手机版
扫描查看手机站
首页 > 文章 > 软件教程 > 正文

exe脱壳是什么意思?exe脱壳教程步骤详解(附带工具包)

时间:2025-11-07 23:31:08来源:525游

这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文,希望能给新学软件逆向和脱壳的童鞋们一点帮助。

1 一些概念

1.1 加壳

加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。

加壳是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过Windows加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。

壳的类型通常分为压缩壳和加密壳两类。压缩壳的特点是减小软件体积大小,加密保护不是重点。加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制、使用次数、时间限制等。

1.2 OEP

OEP:(Original Entry Point),程序的入口点。软件加壳一般隐藏了程序真实的OEP(或者用了假的OEP), 我们需要寻找程序真正的OEP,才可以完成脱壳。

一般加壳程序在使用Ollydbg等动态调试工具时,会停在壳的预处理块。即处在对于程序原始代码块的解压或解密操作之前,在运行完程序自脱壳模块后,会停留在程序加壳之前的OEP位置,此时是dump程序的最佳时期。脱壳时在真实OEP处下int3断点,就可以捕捉到程序代码段完全恢复的状态。因此,寻找加壳程序的正确OEP,也成了手动脱壳时的第一要务。

1.3 IAT

IAT:(Import Address Table),导入地址表。由于导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL中。当PE文件被装入内存的时候,Windows装载器才将DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成。其中导入地址表就指示函数实际地址。多数加壳软件在运行时会重建导入地址表,因此获取加壳程序正确的导入地址表也是手动脱壳操作中的一个关键问题。

2 一些脱壳方法

2.1单步跟踪法

单步跟踪法的原理就是通过Ollydbg的单步(F8)、单步进入(F7)和运行到(F4)功能,完整走过程序的自脱壳过程,跳过一些循环恢复代码的片段,并用单步进入确保程序不会略过OEP。这样可以在软件自动脱壳模块运行完毕后,到达OEP,并dump程序。

2.2 ESP定律法

ESP定律法是脱壳的利器,是应用频率最高的脱壳方法之一。

ESP定律的原理在于程序中堆栈平衡的合理利用。由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器内容压栈,如使用pushad,在解压结束后,会将之前的寄存器值出栈,如使用popad。因此在寄存器出栈时,往往程序代码被自动恢复,此时硬件断点触发。然后在程序当前位置,只需要少许单步跟踪,就很容易到达正确的OEP位置。

2.3内存镜像法(二次断点法)

内存镜像法是在加壳程序被加载时,通过OD的ALT+M快捷键,进入到程序虚拟内存区段。然后通过加两次内存一次性断点,到达程序正确OEP的位置。

内存镜像法的原理在于对于程序资源段和代码段下断点,一般程序自解压或者自解密时,会首先访问资源段获取所需资源,然后在自动脱壳完成后,转回程序代码段。这时候下内存一次性断点,程序就会停在OEP处。

2.4一步到达OEP

所谓的一步到达OEP的脱壳方法,是根据所脱壳的特征,寻找其距离OEP最近的一处汇编指令,然后下int3断点,在程序走到OEP的时候dump程序。如一些压缩壳往往popad指令距离OEP或者Magic Jump特别近,因此使用Ollydbg的搜索功能,可以搜索壳的特征汇编代码,达到一步断点到达OEP的效果。

2.5最后一次异常法

最后一次异常法的原理是,程序在自解压或自解密过程中,可能会触发无数次的异常。如果能定位到最后一次程序异常的位置,可能就会很接近自动脱壳完成位置。现在最后一次异常法脱壳可以利用Ollydbg的异常计数器插件,先记录异常数目,然后重新载入,自动停在最后一次异常处。

2.6 模拟跟踪法

模拟跟踪法的原理就是使用Ollydbg下条件断点,SFX相当于是一个自解压段,在自解压段结束时(eip的值转到代码段时),已经距离OEP很近,但是这种跟踪方法会比较耗时。

2.7 “SFX”法

“SFX”法利用了Ollydbg自带的OEP寻找功能,可以选择直接让程序停在OD找到的OEP处,此时自解压已经完成,可以直接dump程序。

3一些脱壳实践

下面给出整理的使用以上方法,自己尝试手动脱这几种常用壳的脱壳笔记。

3.1UPX脱壳笔记

首先进行侦壳:

逆向基础:软件手动脱壳技术入门

 

首先把程序扔到OllyIce里面可以看到:

逆向基础:软件手动脱壳技术入门

 

然后这里尝试使用ESP定理:即在ESP第一次改变时,对ESP的地址设置硬件字访问断点,这样可以在代码被UPX算法还原之后,跳转到程序的正常入口处。

逆向基础:软件手动脱壳技术入门

 

然后F5运行,并没有直接到跳转到程序入口处的大跳位置,但是可以看到UPX的大跳就在眼前:

逆向基础:软件手动脱壳技术入门

 

所以被还原后的程序入口点就是0x00445151(通过单步往下走,F4略过往回走的循环语句,也可以看到这个大跳的位置。)接下来走到大跳位置,跳到正常程序入口处:

逆向基础:软件手动脱壳技术入门

 

然后去掉硬件断点,并使用LoadPE的dump功能dump目标程序:

逆向基础:软件手动脱壳技术入门

 

先修正映像大小,然后再选择完整脱壳,这样可以得到第一步dump的程序,然后再使用ImportREC修复dump程序的OEP,OEP的信息通过OD自带的dump功能查询或者直接填45151:

逆向基础:软件手动脱壳技术入门

 

将正确的入口地址填入ImportREC中,然后自动搜索IAT信息:

逆向基础:软件手动脱壳技术入门

 

然后点击获取输入表得到修正IAT之后的程序函数输入表,然后再点击显示无效函数,愉快地发现没有无效函数,那么就可以直接修复转存文件了。

逆向基础:软件手动脱壳技术入门

 

选择刚刚第一步dump下来的转储文件进行修复,修复完成之后脱壳完成:

逆向基础:软件手动脱壳技术入门

 

这里对于压缩壳UPX,直接使用了ESP定律,可以很方便找到OEP并dump程序。

4.2 tElock脱壳笔记

这里脱的是一个tElock的壳:

逆向基础:软件手动脱壳技术入门

 

1、先使用最简单的最后一次异常法:首先把程序扔到OllyIce里面设置OD调试选项中的异常选项,

逆向基础:软件手动脱壳技术入门

 

仅保留内存非法访问异常,然后使用异常计数器插件,在使用前要清空断点设置:

逆向基础:软件手动脱壳技术入门

 

等到程序正常运行后,重新加载程序,再选择第二步,停在最后一次异常之前:

逆向基础:软件手动脱壳技术入门

 

然后用Alt+M转到内存窗口,对主程序code段下内存断点,SHIFT+F9执行:

逆向基础:软件手动脱壳技术入门

 

这样程序就中断在了正确的OEP处,可以选择从模块中删除分析以显示正常分析的汇编代码。然后使用LoadPE dump程序,并修正程序映像大小。但是在使用ImportREC v1.6F Fix版,输入正确的OEP,获取函数输入表信息时,会发现无效的指针。使用方法一修复后,再使用方法三可以完全修复

逆向基础:软件手动脱壳技术入门

 

再点击Fix dump,可以修复之前dump下来的程序,脱壳完成:

逆向基础:软件手动脱壳技术入门

 

2、使用二次内存断点法:首先载入程序,将所有的异常类型忽略,然后在idata段设置内存断点, 然后SHIFT+F9:

逆向基础:软件手动脱壳技术入门

 

停下来后再次在code段设置内存断点,再次SHIFT+F9执行,可以直接达到正确的OEP中:

逆向基础:软件手动脱壳技术入门

 

然后LoadPE dump,然后修复IAT。修复方法同方法1。

3、寻找magic jump以及修复函数表完成后dump程序:前两步还是加内存断点(idata、code),然后定位到程序的正确OEP处

逆向基础:软件手动脱壳技术入门

 

然后如果这时使用LoadPE dump后修复,就和前两种一样了。这里先是使用ImportREC获取函数输入表第一个位置的指针地址。

逆向基础:软件手动脱壳技术入门

 

然后得到函数指针偏移地址在0x005512C,加上基地址后为0x045512C,这时在该位置下硬件访问双字断点。再重新SHIFT+F9忽略异常执行后,由于下了断点,会触发tElock的CRC校验错误:

逆向基础:软件手动脱壳技术入门

 

所以这里要先绕过CRC校验,才能成功执行到硬件断点位置,所以首先暂停程序,然后使用Alt+F9返回用户代码。点击确定按钮后,程序暂停在调用ExitProcess的位置:

逆向基础:软件手动脱壳技术入门

 

现在要向上找一找能跳过这个退出的跳转(CRC判断跳转),然后进行修改并跳过:

逆向基础:软件手动脱壳技术入门

 

找到了应该修改的位置,但是如果修改之后重新运行是会被恢复的,所以先记下来这个跳转的地址,0x00469622。重新运行之后,在idata断设置内存断点,SHIFT+F9停下后,再Ctrl+G找到修改点再修改。修改完之后再设置之前的硬件断点,这样不会触发CRC校验错误了。

无数次的SHIFT+F9之后,在寄存器窗口可以看到指针以及能够正常显示:

逆向基础:软件手动脱壳技术入门

 

然后此时F8单步,找magic jump……看小生大大的视屏是通过分析疑似CRC跳转得到magic jump的位置:

逆向基础:软件手动脱壳技术入门

 

这里记下来magic jump的地址是0x0046973B,然后清空udd文件,删除硬件断点,再次重新运行程序,然后在idata下内存断点停住,然后Ctrl+G找到magic jump位置处,修改跳转:

逆向基础:软件手动脱壳技术入门

 

然后在code段下内存断点:

逆向基础:软件手动脱壳技术入门

 

然后SHIFT+F9执行,停下来就到了OEP的位置:

逆向基础:软件手动脱壳技术入门

 

这时候再dump程序,IAT表已经被修复,可以直接获得脱壳版程序:

逆向基础:软件手动脱壳技术入门

 

这里尝试使用了另外两种脱壳方法,并且通过预先找OEP的方式,修复了CRC校验后,直接dump到了IAT被修复了的程序。

3.3 PEncrypt脱壳笔记

逆向基础:软件手动脱壳技术入门

 

先把程序扔到OllyIce里面,然后程序停在这里,看起来蛮怪的:

逆向基础:软件手动脱壳技术入门

 

好吧,重新加载程序,尝试使用最后一次异常法,不忽略所有异常,然后使用异常计数器插件,程序停在最后一次异常处:

逆向基础:软件手动脱壳技术入门

 

如果此时F8单步下去,程序会触发异常处理,然后又到不了OEP了。这时需要看一下堆栈数据情况:

逆向基础:软件手动脱壳技术入门

 

这时需要在0040CCD7处F2下断点,然后SHIFT+F9执行,可以跳过这个坑:

逆向基础:软件手动脱壳技术入门

 

然后接下来就是F8+F4的操作,一路直到OEP:

逆向基础:软件手动脱壳技术入门

 

用LoadPE脱壳,然后用ImportREC修复后,虽然没有无效指针,但是还是不能运行:

逆向基础:软件手动脱壳技术入门

 

这时候用LoadPE的重建PE功能:

逆向基础:软件手动脱壳技术入门

 


逆向基础:软件手动脱壳技术入门

 

然后就可以正常运行了:

逆向基础:软件手动脱壳技术入门

 

这个壳使用了单步跟踪的脱壳方法,一路跳过程序“陷阱”,最后达到OEP。并且使用了LoadPE的重建PE功能,对程序进行了重建,最终完成了这个加密壳的脱壳全过程。

3.4 FSG变形壳脱壳笔记

首先进行侦壳:

逆向基础:软件手动脱壳技术入门

 

使用ESP定律,首先把程序扔到OllyIce里面,F8单步走,观察ESP变化,在ESP第一次发生变化时,对ESP对应的地址处设置内存硬件访问WORD断点,然后SHIFT+F9运行,在程序停下来之后,取消硬件断点,进行F8单步:

逆向基础:软件手动脱壳技术入门

 

用F4略过向后的跳转(循环),然后继续往下找,一直到这里:

逆向基础:软件手动脱壳技术入门

 

在这个jmp下面F4,程序会跑飞。说明程序代码在这个循环中就已经释放完毕,所以向上找找这个循环中有没有带条件的大跳。这样很容易找到magic jump的位置,然后我们Enter或者Ctrl+G到00402666的位置,发现果然是OEP,重新分析,然后F2下断点,让程序走到OEP:

逆向基础:软件手动脱壳技术入门

 

如果是FSG1.33,直接使用LoadPE dump文件,然后使用ImportREC修复,就可以正常脱壳了。但是这里在使用ImportREC修复时,会出现一个无效指针:

逆向基础:软件手动脱壳技术入门

 

这里直接剪掉(或者删掉)这个指针,然后修复转存文件,发现无法正常打开:

![在这里插入图片描述](https://img-blog.csdnimg.cn/6b2cb9beb0804eb4a47bcb665cebf62f.png?x-oss- process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Luj56CB54as5aSc5pWy,size_12,color_FFFFFF,t_70,g_se,x_16)

然后再把修复后的程序,丢到OllyIce中F9直接运行:

逆向基础:软件手动脱壳技术入门

 

这里是变形壳添加的一个暗桩,会导致程序出现异常退出,这里直接nop掉或者把之前的jle(校验)改成jmp,然后保存修改另存文件。然后就可以运行了

逆向基础:软件手动脱壳技术入门

和平精英赛季手册总积分为什么不能用(和平精英赛季手册总积分为什么兑换不了) 挖矿app十大排名,数字货币挖矿软件app十大排名 dnf点卷充值成功未到账怎么办(dnf充值的点卷会过期吗) 有哪些三国回合制手机游戏(回合制的三国手机游戏) 我的世界蜂巢生成在什么地方(我的世界蜂巢用法) 迷你世界假方块怎么做(无限刷迷你豆的方法) 魔兽世界工程学分支哪个好(魔兽世界里的工程学) 欧易怎么交易才赚钱?欧易期权交易怎么玩? 艾尔登法环哪里存档(艾尔登法环xbox) 和平精英表情包怎么设置(和平精英表情包设置找不到) 好玩的3d修仙类网游有哪些(大型3d修仙网游) 和平精英丧尸岛在哪个地方(和平精英丧尸地图去了哪里) 币圈合约稳定套利的方法有哪些?币圈合约最稳的玩法解密 欧亿欧意交易所app 比特币如何提现到微信 普通人可以玩比特币的交易吗?普通人买比特币赚钱最简单方法 SBO币靠谱吗 SBO币是否值得信赖? imToken钱包连接DOTC使用教程 诛仙手游炼器怎么提高成功率(诛仙手游炼器技巧百分百成功) 香港Crypto交易所有哪些?合规的香港加密货币交易所官网入口 普通人参与chia挖矿,一定要注意的坑有哪些 币 安交易所官网安全吗?币 安官网入口 2021年狗狗币概念的数字货币有哪些? 正规比特币交易网站有哪些?比特币正规交易app下载苹果 2023年最赚钱的5个行业(2023年什么最赚钱) 梦幻须弥真言兽决效果是什么(梦幻西游须弥真言兽决什么效果) 找币网交易所怎么样?找币交易所正规安全吗? 炒币平台App哪个最好?易欧交易所App最新版全球第二交易所 什么游戏不氪金又好玩手游(哪个游戏不氪金又好玩手游) PETN是什么币种?PETN币怎么样详细介绍 梦幻新诛仙神兽进阶需要什么(梦幻新诛仙神兽进阶什么时候出) 魔兽世界德鲁伊职业大厅在哪里(wow德鲁伊职业大厅在哪里) 区块链CHAT是什么币?CHAT币官网总量和上架交易所介绍 区块链将成为互联网基础协议,类似于TCP/IP、HTTP dnf灵魂之源怎么获得(dnf灵魂之源怎么获得技能) ADA币总量多少发行量多少?ADA艾达币2025最新消息未来价格预测 宝可梦传说阿尔宙斯隆隆岩怎么进化(隆隆岩超进化) Trust Wallet最全安装使用教程 输入法哪个好用又实用? 输入法排行榜2025 什么是冷钱包、什么是热钱包?私钥公钥又是怎么回事? 和平精英自救型除颤器怎么用(吃鸡自救型除颤器是什么) 无神之界平民职业怎么选择(无神之界手游职业) shib币是什么意思?shib币柴犬币怎么买? Windows 7将SATA硬碟由IDE改为AHCI模式 派币2024年官方最新消息_派币2024年官方最新消息数字 问道手游探索技能选哪个好(问道手游探索攻略) 复古传奇手游单机版 热血江湖复古手游来袭 第五人格牛仔天赋加点方法(第五人格牛仔的技能是什么) RSI指标三条线使用技巧,期货RSI指标参数最佳设置 时空猎人觉醒材料要多少(时空猎人觉醒任务) 方舟无齿翼龙吃什么(方舟无齿翼龙吃什么饲料怎么驯服) 全球公认的五大公链是哪五个?币圈Web3公链排行榜 宝可梦阿尔宙斯皮丘怎么进化(去吧皮卡丘神宠阿尔宙斯) 持币生息是什么意思?一文读懂持币生息模式 BitCola交易所怎么样?BitCola交易所正规吗 江南百景图月影桥怎么获得(江南百景图月兔建筑) 欧易期权怎么玩?OKEx欧易期权操作教程详解 YAG是什么币种?YAG币官网总量和发行价介绍 梦幻西游手游超级金柳露和金柳露有区别吗(梦幻西游手游金柳露多少钱) DORA是什么币种?DORA/铜锣烧币全面介绍 阿卡丽的神秘商店多久开一次?阿卡丽的神秘商店官网入口2022进入方式 王者荣耀荣耀水晶推荐换什么 荣耀水晶兑换推荐(荣耀水晶兑换哪个英雄最划算) 王者荣耀全国大赛荣誉选手怎么获得(王者荣耀全国大赛冠军奖杯) csgom4a1有多少发子弹(为什么csgom4a1只有25发子弹) 只狼跨越死斗之后获得什么(只狼 影逝二度跨越死斗) 和平精英金币军需怎么没有了(和平精英金币军需怎么没有了ss18) BITBANK交易所怎么提币到其他地址?BITBANK交易所提币教程 BUT币是什么币?BUT币上架交易所及用途盘点 币在交易所安全吗?币在交易所怎么样? SPS币发行价多少?SPS币发行价格和发行时间介绍 阴阳师鬼使黑御魂怎么搭配2022(阴阳师鬼使黑御魂六个位置图) 迷你世界香蕉树苗怎么获得(迷你世界香蕉树,用用什么种) TradingView被国家叫停还可以用吗?TradingView国内替代软件分享 诛仙手游焚香技能加点攻略(手游诛仙焚香技能加什么厉害不厉害) 无线路由器不会设置怎么办(路由器不会设置找谁) 问道手游平民玩什么职业好(问道手游平民玩什么职业好2020) 10个完全免费的游戏站!又有一大波免费游戏的平台了 梦幻西游109凌波城伤害多少正常(梦幻109凌波城怎么样) 比特派钱包知识库:火币生态链HECO中MDEX使用教程 cloudflare防CC、DDOs攻击保姆级教程,附带防御规则 推荐三个翻译软件(翻译软件最准确的app推荐) 宝可梦阿尔宙斯六尾在哪(精灵宝可梦阿尔宙斯在哪抓) 放置类手游的可玩性在哪里(放置类手游的可玩性在哪里设置) 创造与魔法可可豆有什么用(创造与魔法可可豆饼) 有什么比较好玩的网游推荐(有哪些比较好玩的网游) 火币永续合约每天扣多少钱?火币永续合约怎么玩? 区块链科普:什么是以太坊私钥储存(Keystore)文件? Exmo交易所究竟怎么样?Exmo交易所是哪个国家的 有哪些bt公益服手游充值打折(bt公益手游盒子) 翻译app排行 十大翻译软件排名 宝可梦阿尔宙斯传说怎么换小精灵(阿尔宙斯怎么弄) 几家任务类兼职平台汇总,总有一款适合你的工作) DNF扭曲世界的次元在哪里(dnf 扭曲世界的次元在哪) 帝国战纪英雄搭配(帝国战纪手游英雄) 和平精英精彩时刻怎么保存到相册(和平精英精彩时刻怎么自动保存) 柴犬币在哪里购买?SHIB币在哪个交易所买卖? 王者荣耀涅槃之凤击败特效稀有吗(涅槃之凤击败特效和ko击败特效都有了) 我的世界神奇宝贝怎么提升亲密度(我的世界神奇宝贝怎样提升亲密度) 以太经典为什么不爆发?值得长期持有吗?以太经典币ETC前景价格预测 ipv4无Internet访问权限?你可能没有权限访问使用网络资源 MTGOX赔付最新公告在哪查看?MT·GX交易所中国官网入口

热门文章

推荐专题

更多>>

游戏推荐

更多>>