混淆代码分析:静态与动态反分析技术揭秘
1. 未初始化数据与UPX解压存根
在分析二进制文件时,我们会发现其中有一个较大的部分包含未初始化的数据,在列表窗口中显示如下:
004034e3 ?? ??
004034e4 ?? ??
在文件的稍远处,Ghidra识别出了另一块未定义内容。在这些数据的末尾,有一个区域被Ghidra识别为一个函数,这个函数很容易被认作是UPX解压存根,Ghidra将其确定为二进制文件的入口点。我们观察到的未定义内容段是UPX压缩过程的结果。解压存根的任务是将这些数据解压到未初始化区域,然后将控制权转移到解压后的代码。
地址类型概述栏所呈现的信息可与二进制文件中每个段的属性相关联,以确定每个显示中呈现的信息是否一致。某UPX打包二进制文件的内存映射如下:
| 段 | 地址范围 | 可执行标记 |
| ---- | ---- | ---- |
| UPX0 | 00401000 - 00408fff | 是(X标志设置) |
| UPX1 | 00401000 - 00408fff | 是(X标志设置) |
在这个特定的二进制文件中,段UPX0和段UPX1(00401000 - 00408fff)包含的整个地址范围都被标记为可执行。鉴于此,我们应该期望看到整个地址类型概述栏被着色以表示函数。但实际并非如此,再加上UPX0的整个范围都是未初始化且可写的,这应该被视为高度可疑,为我们分析该二进制文件提供了有价值的线索。
使用Ghidra在静态环境下(不
超级会员免费看
订阅专栏 解锁全文
1509

被折叠的 条评论
为什么被折叠?



