-
Notifications
You must be signed in to change notification settings - Fork 157
So文件Section修复思路
freakishfox edited this page May 12, 2017
·
2 revisions
- Section信息对IDA等相关静态分析工具的分析效果起到至关重要的作用
- 异常的Section信息会进一步引发静态分析工具报错或者中断加载和分析
- 错误的Section信息会引导静态分析工具向不可预知的方向进行分析,结果也是不可预期的
- So文件经过strip工具处理
- So文件被加固,加固工具刻意删除Section信息
- So文件是从内存中dump出来的,不包含有效的Section信息
- 总体思路:认为文件中现存的Section信息全部无效,依赖Program Header中的 dynamic节中的数据进行修复
- 修复步骤:
-
从Program Header Table中查找所有类型为PT_LOAD的Segment, 然后分别记录每个PT _LOAD节的Virtual地址和文件Offset
-
从Program Header Table中遍历类型为PT_DYNAMIC的Segment, 按照这个节中每个Elf32 _Dyn中的Tag类型,加载如下几种类型的信息:
- DT_SYMTAB
- DT_STRTAB
- DT_STRSZ
- DT_REL
- DT_RELSZ
- DT_JMPREL
- DT_PLTRELSZ
- DT_INIT _ARRAY
- DT_INIT _ARRAY _SZ
- DT_FINI _ARRAY
- DT_FINI _ARRAY _SZ
-
使用上一步骤中的信息,初步建立Section内容雏形,目前缺少Offset的数据项,根据步骤1中获取的Virutal地址,确定刚刚建立的每个Section雏形属于哪个Load段,使用这个Load段的 Virutal - Offset + Section(Virtual)来进行Section(Offset)修复
-
修复每个Section的名称字段的StrTab序号
- 如果StrTab中有则复用序号
- 如果没有则自建字符串
-
Section数据回填
- 把section数据组合成数组转换成二进制流添加到文件最后
- 修正Elf文件头相关字段
-