我正在寻找的东西

由于各种原因,我有一个二进制文件,我可以肯定它是可执行的机器代码(尽管可能是VM语言,尽管我怀疑它是Java)。我正在寻找有关字节值与体系结构的字节频率表。

我知道这些值会因编译器,操作系统ABI / API,应用程序和二进制格式而异,目的是假设它们随体系结构而变化最大,并且:


我只需要实际可执行代码的频率-.text部分-而不是整个二进制文件。 Binary的目标是1985年至2005年间最常见的最终用户操作系统之一(因此,老式的unice,Linux,VMS,DOS,Windows NT,MacOS或OSX)。这些系统的最常见编译器

如果所有失败,我至少想要列出所有最常见体系结构的nop操作码,因为我认为假设大多数编译器都使用nop是很公平的进行填充,并且连续运行可以帮助我弄清楚反汇编程序的良好入口。谢谢维基百科。

我的用例

我有一个二进制代码段,我敢肯定这是可执行对象代码(无标题/节信息。我认为它是原始格式的.text部分(或任何您要称呼的部分)。

我不确定它甚至来自二进制文件,但是当转换为灰度位图时,它具有一些清晰的图案(规则间隔的条纹),我注意到字节FF FF经常出现,并且以Fx的形式出现在其他字节旁边,这让我感觉到我正在查看高内存地址。香农熵足够低,我很确定它没有被压缩或加密(大约7.76),但是所有256个可能的字节值都被表示出来。 。

评论

等一下,看完这里的其他问题之后,我意识到我应该只使用binwalk,说实话,我以前在大型互联网上搜索时没有找到过。我现在觉得很傻,但是我会离开这个问题,然后自己回答。假设binwalk实际上有帮助。如果没有帮助,我想我会...等一下...

嗯binwalk -A没给我任何东西,binwalk -I也没有。从字面上看-他们没有给我任何机会。就像进行健全性检查一样,对/ bin / bash运行binwalk -A也没有得到任何成功,也没有错误代码,因此我不确定该怎么想。
binwalk确实使我对所有四个KB的熵值始终保持在0.94左右,而/ bin / bash(对于代码段)始终在0.75左右波动。不知道该怎么做。

我所知道的是binwalk -H报告/ bin / bash和我正在查看的二进制文件似乎都具有“高熵”部分,该部分扩展了几乎相同的KB数(bash约为5,bash约为6)我正在使用的二进制文件)。根据readelf的说法,它始于.gnu.hash的尾端,其余(大部分)位于.dynsym中。

给定规则间隔的条纹,符号表将很有意义...

#1 楼

假设这确实是完全没有数据的可执行代码(请注意,.text部分曾经包含了当今到.rodata的内容),字节FF和其他Fx也可能是向后分支(循环)的相对地址的一部分
。如果看到明显的条纹,则表明最小。指令大小可能大于1个字节,因此Intel可能已用完。你能分辨出条纹是规则的还是有子图案的吗?如果是前者,则可能是像SPARC或MIPS一样的RISC架构(所有指令长4个字节),否则它是某种类似于PDP-11的指令集(所有指令的长度均等,但有所不同)。缩小范围之后,就必须进行基于字的分析,因为在大多数具有基于字的指令格式的体系结构中,操作码不是字节对齐的。