使用二进制 (arm64) 文件,该文件似乎是某种损坏的 ELF 文件。标头数据丢失,由于某种原因,它包含一个符号表,其格式对我来说似乎等于objdump -t <filename.elf>
在有效 ELF 上运行时的输出,在所有代码之后连接。
(为了避免误解;如果我在不同的有效 ELF 上运行提到的命令,我会得到一个以下格式的符号表输出,这是我在损坏的 ELF 中找到的这种格式的符号表。)
然而,IDA pro 和 Ghidra 都没有设法利用这些信息,所以现在我设法利用其中的一些优势的唯一方法是编写一个 (IDA)python 脚本并“手动”解析它以添加函数,函数名等基于符号表的内容。
这个过程在某种程度上有效,但不是很好(可能是由于我编写好的 IDA-python 解析器的经验有限)。这让我想知道是否已经存在其他一些工具?
我对 IDA 或 Ghidra 的经验不是很丰富,因此它们中的一个/两个都可能具有以这种格式加载符号表的功能,但如果是这样,我至少忽略了这一点。
这是损坏的 ELF 中包含的符号表数据的一小段摘录(只是更改了一些名称)。如前所述,该格式与objdump -t randomfile.elf > table.txt
在有效 ELF 文件上运行时获得的格式相同。
randomfile.elf: file format elf64-littleaarch64
SYMBOL TABLE:
0000000010c00000 l d .text 0000000000000000 .text
0000000010e2a550 l d __ex_table 0000000000000000 __ex_table
0000000010e2a570 l d .text.unlikely 0000000000000000 .text.unlikely
0000000010e2a5a0 l d .data 0000000000000000 .data
0000000010ebf380 l d .got.plt 0000000000000000 .got.plt
0000000010ebf398 l d .module 0000000000000000 .module
0000000010ebf740 l d .bss 0000000000000000 .bss
0000000000000000 l d .debug_info 0000000000000000 .debug_info
0000000000000000 l d .debug_abbrev 0000000000000000 .debug_abbrev
0000000000000000 l d .debug_loc 0000000000000000 .debug_loc
0000000000000000 l d .debug_aranges 0000000000000000 .debug_aranges
0000000000000000 l d .debug_line 0000000000000000 .debug_line
0000000000000000 l d .debug_str 0000000000000000 .debug_str
0000000000000000 l d .comment 0000000000000000 .comment
0000000000000000 l d .debug_frame 0000000000000000 .debug_frame
0000000000000000 l d .debug_ranges 0000000000000000 .debug_ranges
0000000000000000 l df *ABS* 0000000000000000 init.o
0000000000002000 l *ABS* 0000000000000000 STACK_SIZE
0000000010c00034 l .text 0000000000000000 init_start
0000000010c00024 l .text 0000000000000000 fw_magic
0000000010c00328 l .text 0000000000000000 feature_init
0000000010c00370 l .text 0000000000000000 subfeature_init
0000000010c001d4 l .text 0000000000000000 twee_init
.
.
.
0000000010d541a0 g F .text 0000000000000004 memset
0000000010e5e510 g O .data 0000000000000080 acFont_ASCII
0000000010c2bd5c g F .text 0000000000000004 get_curve
0000000010c29d24 g F .text 0000000000000118 inject_mem
基于旧版本的ELF文件中,我发现,它同时包含头和一个“正确”的符号表(应有作为,我可以运行objdump
,readelf
在没有错误的文件等),我已经开始对“重建”头对于损坏的 ELF - 基本上是从旧的 ELF 版本复制标题并调整加载地址等。它远非 100% 正确,但由于 IDA pro 正在自动分析文件,这似乎让我更容易一些。另一方面,如果我包含我的部分 ELF 标头,Ghidra 根本无法加载 ELF。
如果我也可以从损坏的 ELF 中加载符号表 -按原样- 在具有某些功能的 IDA 中,那就太好了。如果有一种方法可以将某种其他格式的符号表合并到 ELF 中,以便 IDA/Ghidra 在分析时自动管理使用这些信息,那就更好了。
也许这是一个遥不可及的梦想,但值得一试。据我所知,可能有一些现有的功能。