2025-10-31-壳
十月 31, 2025
什么是壳
Packing 在网络安全领域加壳是一种对软件保护或恶意逃过软件检测是手段。加壳通过将原始可执行文件(如EXE、DLL或APK)包裹在一层外部代码中,来混淆、加密或压缩原始程序,从而使其难以被分析、逆向工程或检测。
- 壳的本质:壳是一种附加在程序外层的代码层,它在程序运行时首先执行,负责解密、解压缩或激活原始代码。这类似于给程序穿上一件“外衣”,隐藏其真实内容。
例如使用UPX(Ultimate Packer for eXecutables)压缩可执行文件
- 壳的主要类型
- 压缩壳:UPX,ASPack,…
- 加密壳:Themida,VMProtect,…
- 混淆壳:Ollie,…
壳的工作原理
- 加载阶段:当用户运行加壳程序时,操作系统先加载壳代码(而非原始程序)。壳代码通常存储在文件头部或附加段中。
- 解密/解压阶段:壳代码在内存中执行,使用内置算法(如AES、ZLIB)解密或解压缩原始代码。这个过程可能涉及动态内存分配,以避免将原始代码暴露在磁盘上。
- 修复导入表:壳会重建原始程序的导入地址表(IAT),确保外部函数调用正常工作。
- 跳转到原始入口点(OEP):壳将控制权转移给解密后的原始代码,程序开始正常执行。
- 反检测机制:壳可能集成反调试代码(如检测OllyDbg)、反虚拟机代码(如检测VMware)或代码自修改,以阻碍分析。
查壳方法
- 静态分析:使用工具如PEiD、Exeinfo PE或file命令检测常见壳签名。但自定义壳可能逃避检测。
- 动态分析:在沙箱或调试器(如OllyDbg、x64dbg)中运行程序,观察内存变化和行为。工具如Process Monitor可以监控文件活动。
- 启发式分析:杀毒软件使用行为检测(如异常API调用)来识别加壳程序
脱壳技术:
- 自动脱壳:工具如UPX自带脱壳功能,或使用通用脱壳器(如Unpacker)。
- 手动脱壳:在调试器中设置断点、转储内存并修复OEP。这需要汇编语言和逆向工程知识。
- 内存分析:使用Volatility(用于内存取证)直接提取解密后的代码
实例: 通过binwalk 查看upx壳
1 | (langchain-env) ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/ctf_god/upx_file] |
查看评论