objdump -b 二进制是什么意思?

逆向工程 拆卸 恶意软件 转储
2021-06-25 11:06:54

所以我开始深入研究恶意软件分析,我遇到了一些我无法用 objdump 反汇编的恶意软件样本。更具体地说,我使用

objdump -dS /path/to/malware

我得到了输出

malwareFile: file format pei-i386
objdump: Reading section .text failed because: File truncated 

通过一点搜索,我发现

无法使用 objdump 转储恶意软件程序集

所以我用

objdump -b binary -D -m i386 /path/to/malware

我得到了它的助记符代码,但即使阅读了 Linux 手册页,我也无法理解会发生什么。这样是不是把data、bss和code segment当成一个整体来处理?我真的可以依靠这个解决方案来进行我的研究吗?

2个回答

-b开关将格式指定为二进制,告诉 objdump 忽略标头并将所有内容视为指令。-D开关也出现在您的问题中,这意味着 objdump 会将所有部分的内容视为指令,即使它确实考虑了标头/文件类型。

如果您只指定,-D那么它会将所有部分视为指令,但它会在其数据之前打印部分名称,因此您可以知道它来自哪里。

话虽这么说,如果它是一个恶意文件,并正常使用objdump的并不正确处理它,然后它表明该文件打包,在这种情况下,拆卸是不是之前,它是解压的那么有用。当然,除非对包装技术本身感兴趣。

因此,objdump's-d只会反汇编已知的代码部分,通常.text和其他标记为可执行的部分。如果节表损坏或丢失,这将失败。

但是,OS 可执行文件实际上并不需要节表,因此可以删除或修改它而不影响文件的行为。在这种情况下,您可以使用-b binary -Dtellobjdump反汇编文件中的所有字节,忽略任何文件结构。这将尝试反汇编所有内容,包括文件头数据部分字符串表等。您需要通过将实际代码与反汇编无关数据产生的无意义代码区分开来理解所产生的反汇编。或者,您可以找出文件的实际可执行部分并反汇编该.