如何拆解.NET恶意软件投放器的Shellcode载荷?工具及monodis参数咨询
问题背景
我正在Linux环境下逆向分析一款通过CreateThread函数和数据块释放Shellcode的.NET PE恶意软件。已使用monodis反编译得到shellcodeRunner函数,以及疑似传入该函数的Shellcode数据块。目前直接用monodis拆解该数据块无效(其无自身表头),想了解可用哪些工具拆解其中的指令,以及monodis是否有强制拆解的参数。
解答
关于monodis的说明
monodis是专门用于解析.NET程序集的**中间语言(IL)**反编译工具,它的设计目标仅针对.NET的IL代码和元数据,并不支持原生机器码Shellcode的拆解,也没有强制拆解无表头二进制数据块的参数——这类场景完全不在它的处理范围内。
Linux下可用的Shellcode拆解工具
objdump:GNU binutils套件中的工具,可指定目标架构强制拆解二进制数据。命令示例:
# 拆解32位x86 Shellcode objdump -D -b binary -m i386 shellcode.bin # 拆解64位x86_64 Shellcode objdump -D -b binary -m x86-64 shellcode.bin其中
-D表示反汇编所有内容,-b binary指定输入为原始二进制文件,-m指定目标处理器架构。ndisasm:NASM汇编器配套的轻量反汇编工具,专注于x86/x86_64架构的原生指令解析,无需文件表头即可直接从起始字节拆解。命令示例:
# 拆解32位Shellcode ndisasm -b 32 shellcode.bin # 拆解64位Shellcode ndisasm -b 64 shellcode.binradare2:跨平台逆向工程框架,支持多架构,可通过命令行快速处理原始二进制数据。操作示例:
# 以32位模式加载Shellcode并进入交互模式 r2 -b 32 shellcode.bin # 在交互模式中执行以下命令: aa # 分析所有指令 pd # 打印反汇编结果若为64位Shellcode,将
-b 32替换为-b 64即可。Ghidra:Linux下可运行的GUI逆向工具,支持导入原始二进制数据。导入时选择「Raw Binary」格式,设置对应处理器架构(如x86、x86_64)和位数,即可自动解析Shellcode中的指令。
内容的提问来源于stack exchange,提问作者MidasVanVeen

