2025-10-31-壳

2025-10-31-壳

十月 31, 2025

什么是壳

Packing 在网络安全领域加壳是一种对软件保护或恶意逃过软件检测是手段。加壳通过将原始可执行文件(如EXE、DLL或APK)包裹在一层外部代码中,来混淆、加密或压缩原始程序,从而使其难以被分析、逆向工程或检测。

  • 壳的本质:壳是一种附加在程序外层的代码层,它在程序运行时首先执行,负责解密、解压缩或激活原始代码。这类似于给程序穿上一件“外衣”,隐藏其真实内容。

例如使用UPX(Ultimate Packer for eXecutables)压缩可执行文件

  • 壳的主要类型
    • 压缩壳:UPXASPack,…
    • 加密壳:ThemidaVMProtect,…
    • 混淆壳:Ollie,…

壳的工作原理

  1. 加载阶段:当用户运行加壳程序时,操作系统先加载壳代码(而非原始程序)。壳代码通常存储在文件头部或附加段中。
  2. 解密/解压阶段:壳代码在内存中执行,使用内置算法(如AES、ZLIB)解密或解压缩原始代码。这个过程可能涉及动态内存分配,以避免将原始代码暴露在磁盘上。
  3. 修复导入表:壳会重建原始程序的导入地址表(IAT),确保外部函数调用正常工作。
  4. 跳转到原始入口点(OEP):壳将控制权转移给解密后的原始代码,程序开始正常执行。
  5. 反检测机制:壳可能集成反调试代码(如检测OllyDbg)、反虚拟机代码(如检测VMware)或代码自修改,以阻碍分析。

查壳方法

  • 静态分析:使用工具如PEiD、Exeinfo PE或file命令检测常见壳签名。但自定义壳可能逃避检测。
  • 动态分析:在沙箱或调试器(如OllyDbg、x64dbg)中运行程序,观察内存变化和行为。工具如Process Monitor可以监控文件活动。
  • 启发式分析:杀毒软件使用行为检测(如异常API调用)来识别加壳程序

脱壳技术

  • 自动脱壳:工具如UPX自带脱壳功能,或使用通用脱壳器(如Unpacker)。
  • 手动脱壳:在调试器中设置断点、转储内存并修复OEP。这需要汇编语言和逆向工程知识。
  • 内存分析:使用Volatility(用于内存取证)直接提取解密后的代码

实例: 通过binwalk 查看upx壳

1
2
3
4
5
6
7
(langchain-env) ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/ctf_god/upx_file]
└─$ binwalk attachment

DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 ELF, 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux)
267368 0x41468 Copyright string: "Copyright (C) 1996-2018 the UPX Team. All Rights Reserved. $"