我读的文件的恶意软件二进制文件的自动静态开箱(凯文·库根等人)与试图重现给定的实验结果(与目标Hybris-C
,MyDoom.q
,tElock
,等),并研究如何将它用于其他案件进行扩展。
据我了解,作者首先使用指针分析通过检测转换点(即该点将正常指令的执行与运行时生成的指令分开)来提取解包代码,然后使用反向切片分析提取解包代码从这一点来说。
经过“代码双关”和“重组”的过程(例如修补防御代码,修复一些重定位问题等),人们可以获得一个新的二进制文件,其每个解压缩的块最初都被标记为s-object
(节对象的缩写))。然后可以模拟新的二进制文件(如果我理解正确的话),其中s-object
(s)将由解压缩的代码填写。
虽然我可能能够想象论文中应用的静态分析的一些限制(例如向后静态切片的不准确、指针分析、副作用......),以及关于过渡点存在的隐含假设,但我仍然无法想象了解所描述的静态解包器是如何工作的。
首先,作者说由于问题的上下文是非结构化的二进制文件,所以应用了向后静态切片(这是真的,因为恶意代码是非结构化的),但是
问题1:如何 应用价值集分析?
因为我们没有希望恢复非结构化二进制文件中的抽象位置(由值集分析使用)。例如,在下面的Hybris
蠕虫解包存根中:
mov edx, 0x135
mov ebx, 0x401000
mov eax 0x6bf00803
unpack:
sub [ebx], eax
nop
sub eax, 0x15e3c0
add ebx, 0x4
dec ecx
jne unpack
jmp _oep
_oep:
...
我想不存在抽象的位置,不是吗?
其次,作者说每个都s-object
包含关于某个部分的元数据(即名称、大小、...),如V.B.3.1
论文中引用的那样:
一个 s 对象...包含有关它所呈现的部分的元数据...这些元数据是从二进制文件的部分表中获得的...
但
问题二:如何确定解压后的代码一定能放入一个section(其信息可以通过解析二进制头获得)?
UPX
在解压缩代码位于 节中的“纯”情况下,这可能是正确的UPX0
,但通常情况下并非如此(例如,上述 的情况Hybris
)。
由于其中描述的地址转换步骤是由于V.B.3.1
二进制的正常运行时解包过程与静态解包器的解包过程之间的差异而引起的,因此我假设此解包器的输出是一个新的二进制文件,仅包含解包的代码和没有拆包存根。但
问题三:如何处理多级打包程序?
例如,Figure 5
论文中给出的实验结果有Peed-44
使用定制UPX
包含至少2
解包级别的情况:哪种形式应该被视为“真正的”解包代码?
所以我的问题是
我对论文的理解是否正确?(应该不是)那我哪里误解了?