我有大约 300 字节的二进制机器码。
我不知道代码是针对哪个指令集的,所以我无法用 IDA 打开它。
有没有什么工具可以帮助识别指令集?
我有大约 300 字节的二进制机器码。
我不知道代码是针对哪个指令集的,所以我无法用 IDA 打开它。
有没有什么工具可以帮助识别指令集?
有多种工具可以识别文件中的操作码。
binwalk
如果您的 blob 是一个存档并混合了多个文件,或者一开始没有幻数,那么尝试binwalk使用以下选项运行它(有关更多详细信息,请参阅binwalk 的文档):
#> binwalk --opcodes myfile.bin
如果你使用 IDA,你也可以使用这个binwalk IDA 插件。
file
如果您的文件有一些幻数,那么最简单的方法是对其运行 a file。该程序可识别许多不同的文件格式并显示有关每种格式的大量信息。
#> file myfile.bin
您可能会尝试使用cpu_rec,它声称能够通过分析原始二进制数据(70 种架构)来识别各种架构。
cpu_rec 是一种识别任意二进制文件中的 cpu 指令的工具。它可以用作独立工具,也可以用作binwalk的插件。
-%使用 binwalk 时添加标志。
要有耐心。等待几分钟的结果是意料之中的。在我的笔记本电脑上,该工具需要 25 秒和 1 Gb 的 RAM 来为 70 种架构创建签名,然后对二进制文件的分析每 Mb 需要一分钟。如果您希望该工具更快,您可以删除一些架构,如果您知道您的二进制文件不是其中之一(通常在固件中找不到 Cray 或 MMIX)。
只需运行该工具,将要分析的二进制文件作为参数该工具将尝试匹配整个文件的架构,然后检测与 CPU 架构对应的最大二进制块;通常这是正确的答案。
如果结果不令人满意,-v在参数前加上两次会使该工具变得非常冗长;这在向语料库添加新架构时很有帮助。
如果安装了https://github.com/LRGH/elfPriority,那么该工具还会从ELF、PE、Mach-O或COFF文件中提取文本部分,并输出该部分对应的架构;从完整的二进制文件构建语料库时,也可以使用提取文本部分的可能性。
选项-d后跟一个目录,转储该目录中的语料库;使用此选项可以重建默认语料库。
将该工具作为 binwalk 模块运行通常会导致:
shell_prompt> binwalk -% corpus/PE/PPC/NTDLL.DLL corpus/MSP430/goodfet32.hex
Target File: .../corpus/PE/PPC/NTDLL.DLL
MD5 Checksum: d006a2a87a3596c744c5573aece81d77
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 None (size=0x5800, entropy=0.620536)
22528 0x5800 PPCel (size=0x4c800, entropy=0.737337)
335872 0x52000 None (size=0x1000, entropy=0.720493)
339968 0x53000 IA-64 (size=0x800, entropy=0.491011)
342016 0x53800 None (size=0x22000, entropy=0.727501)
Target File: .../corpus/MSP430/goodfet32.hex
MD5 Checksum: 4b295284024e2b6a6257b720a7168b92
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 MSP430 (size=0x5200, entropy=0.472185)
20992 0x5200 None (size=0xe00, entropy=0.467086)
我们可以注意到,在分析过程中,PPC/NTDLL.DLL
一个小块被识别为IA-64。这是一个错误的检测,因为 IA-64 架构具有类似于数据段的统计特性。
如果熵值大于0.9,很可能是加密或压缩的数据,因此cpu_rec的结果应该是没有意义的。
默认语料库中的已知架构
68HC08
68HC11
8051
Alpha
ARcompact
ARM64 ARMeb ARMel ARMhf
AVR
AxisCris
Blackfin
Cell-SPU
CLIPPER
CompactRISC
Cray
Epiphany
FR-V
FR30
FT32
H8-300
HP-Focus
HP-PA
i860
IA-64
IQ2000
M32C
M32R
M68k
M88k
MCore
Mico32
MicroBlaze
MIPS16 MIPSeb MIPSel
MMIX
MN10300
Moxie
MSP430
NDS32
NIOS-II
OCaml
PDP-11
PIC10 PIC16 PIC18 PIC24
PPCeb PPCel
RISC-V
RL78
ROMP
RX
S-390
SPARC
STM8
Stormy16
SuperH
TILEPro
TLCS-90
TMS320C2x TMS320C6x
V850
VAX
Visium
WE32000
X86-64
X86
Xtensa
Z80
#6502#cc65