Re:从零开始的逆向生活04day

本文详细介绍了壳(包括压缩壳和加密壳)的工作原理,加载过程中的入口现场保存、API地址获取、数据解密、IAT初始化、重定位项调整和HookAPI等关键步骤。同时涵盖了脱壳技术,如使用工具、脱壳机和手动调试的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

简介

压缩壳

加密壳

壳的加载过程

入口现场保存

获取程序所需API地址

解密各区块数据

初始化IAT

调整重定位项

Hook API

跳转回程序入口

脱壳

查壳

脱壳机脱壳

命令行脱壳

手动脱壳


前言

老早之前学的,印象有点模糊,有些部分网上也没什么比较新的教程,写得不好请见谅

简介

壳是一些计算机软件里一段专门负责保护软件不被非法修改或反编译的程序

它们一般在代码执行前获得程序控制权完成保护软件的任务,且不影响软件的正常功能

我们通常将壳分为两类,一类是压缩壳,另一类是加密壳

压缩壳

压缩壳可以帮助缩减PE文件的大小,隐藏了PE文件内部代码和资源,便于网络传输和保存

通常压缩壳有两类用途,一种只是单纯用于压缩普通 PE 文件的压缩壳,而另一种则会对源文件进行较大变形,严重破坏 PE 文件头,经常用于压缩恶意程序

常见的压缩壳有:UPX、ASpack

加密壳

加密壳或称保护壳,应用有多种防止代码逆向分析的技术

由于加密壳的主要目的不再是压缩文件资源,所以加密壳保护的 PE 程序通常比原文件大得多。

目前加密壳大量用于对安全性要求高,对破解敏感的应用程序,同时也有恶意程序用于避免(降低)杀毒软件的检测查杀

常见的加密壳有:ASProtector、EXECryptor、Themida、VMProtect

壳的加载过程

以压缩壳为例

入口现场保存

加壳程序初始化时保存各寄存器的值,待外壳执行完毕后恢复各寄存器值,最后再跳到原程序的入口点OEP,通常用pushad/popad、pushfd/popfd指令对来保存和恢复现场环境

获取程序所需API地址

一般壳的输入表中有GetprocAddress、GetModuleHandle和LoadLibrary这几个 API 函数,也有函数在动态链接库DLL中

解密各区块数据

外壳一般按区块加密,有代码段、数据段和其他区块,程序执行时也按区块解密,并将解密的数据放回在合适的内存位置,让程序正常运行

初始化IAT

在壳的加载过程中,为了保护程序并控制对其的访问,壳会介入导入地址表IAT的初始化过程,因此在分析壳时需导入原程序所需系统API地址

调整重定位项

如果程序存在重定位项,壳可能会进行相应的调整,以适应加载到不同基地址的情况

Hook API

一些壳可能会在加载过程中,通过Hook系统API或其他技术手段,实现一些额外的保护功能,如反调试、代码混淆等

跳转回程序入口

执行相应的跳转指令,将控制权交还给程序,使其开始执行

参考资料:保护壳简介 - CTF Wiki (ctf-wiki.org)

脱壳

在介绍脱壳之前推荐个网站:爱盘 - 最新的在线破解工具包 (52pojie.cn)

方便懒懒们找工具,虽然不一定最新,但是方便

再提醒一遍,逆向工具容易报毒然后隔离,假如发现不能用可以看看电脑管家

查壳

当我们遇到一个加壳程序,第一步应该分析是什么壳,既可以根据经验直接判断,也可以通过查壳分析。

常见的查壳工具有Exeinfo PE,PEiD。虽然PEiD较经典,但年久失修,因此我们来简单讲一下Exeinfo PE如何看壳

将文件拖入Exeinfo PE

由图可知,文件名为Base.exe,64位,无加壳提示

随后我们对该文件进行UPX加壳,可以对比看一下

倒数第二行提示该文件加了UPX壳,倒数第一行给了try upx.exe -d的建议

注1:其实Exeinfo PE还有其他功能,受编者能力所限暂时不细讲

注2:UPX是简单并且常见的壳,所以我们大多以此为例子

脱壳机脱壳

网络上对于某些壳会有专门的脱壳机,服务懒懒们,拖入文件即可

但个人觉得,不是很泛用,比如这个脱壳机就不能解决upx.exe -d,会报错

命令行脱壳

某些壳开源并且广为流传,会有专门加壳脱壳文件,因此我们可以借此利用命令行进行脱壳

以UPX为例可以看这个:upx命令行脱壳_M0th@n的博客-优快云博客

这是上述try upx.exe -d的有效解决方案

手动脱壳

当然,也会存在上述方案无法解决的情况,这就需要我们亲自调试程序的执行

常用工具有ollydbg,x64dbg,windbg

这个相对复杂,有时间再讲(狠狠地鸽一下嘿嘿嘿

参考资料:day2-1_课程二:逆向实战之病毒分析_哔哩哔哩_bilibili

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值