有什么方法可以区分不同的微控制器的十六进制文件吗?我有一个十六进制文件,现在我忘记了它属于哪个微控制器。有没有可用的工具来告知这一点?或任何提示或技巧要知道?

编辑:
这里有一个类似的问题,但是这个问题专门属于PIC系列,而如果我要区别于AVR,8051和PIC等不同系列怎么办? />

评论

相关:reverseengineering.stackexchange.com/q/233/187

也许您已经可以指定微控制器品牌了? ARM,PIC,..?

我已经编辑了我的问题,使其更加清晰

也许有人可以贡献出您可能在不同体系结构中看到的通用字节模式?这是您要问的问题吗?

#1 楼

我的第一个想法是对对齐的字节执行频率分析。对于大多数汇编语言,最相关的字节在最高有效位上对齐。

因此创建一个可以识别asm类型的识别器可能很容易。但是,令人惊讶的是,经过数次谷歌搜索之后,我没有找到任何与此相关的工具或论文...

也许这里有事要做。

#2 楼

我不知道为此设计工具。实际上,将它加载到具有不同体系结构的IDA(或任何其他反汇编程序)中直到看起来正确为止,这可能是最简单的方法。如果您想构建自己的工具,建议您看一下Christopher Domas的演讲“ RE动态二进制可视化的未来”。它讨论了许多可用于分析未知数据的技术。总体思路是绘制每个文件中每两个或三个字节的组的频率。这些图在不同的体系结构之间明显不同,可以用于自动识别数据类型。实际的工具和所需的数据集尚未公开,但是如果我想进行自动体系结构检测,这就是我要采取的方法。

一种更简单的方法是搜索功能不同架构中的序言模式。尽管实现较为简单,但是准备数据集将花费更多的时间(因为无法自动识别功能序言)。某些处理器可能不够强大,无法运行C代码,如果代码未编译,则可能没有可预测的函数序言。您也许可以找到其他可以搜索的常见操作。

评论


我的第一个想法也是Domas的Cantor Dust工具,但我似乎在任何地方都找不到在线演示版本。缺少文件中2或3个字节序列的简单直方图,可以快速了解其中包含哪种数据,并得出一些通用指令。如果您不想编写自己的工具,则某些十六进制编辑器内置了直方图功能。

– nopnopgoose
13年3月25日在3:26

@nopnopgoose可以从黑帽媒体档案中下载“演示/ alpha”版本的Cantor Dust。如果您在/ resources /下将二进制文件重命名为“ visual_re.example”,则可以尝试一下。

– ixje
13年3月25日在7:46

#3 楼

尝试了解它可以定位的CPU类型。您可能还可以通过查看此文件来猜测CPU的位长(file_size%32 == 0?可能是32位)。获得简单列表后,通过一些反汇编程序运行二进制文件,然后查看代码是否有意义。尝试在某些仿真的CPU上运行它,看看它是否有作用。

此外,请记住,无效指令可能并不意味着您使用了错误的CPU,它可能只是数据或其他内容。实际上可能值得检查一下文件以查看是否找不到任何字符串或任何东西,只是为了更好地了解事物的位置。

评论


我们在这里谈论微控制器,也有8位和16位MCU。这与计算机无关。

–user187
13年3月24日在19:57

哦,哎呀,看错了问题。道歉。

–提请DeVault
2013年3月25日20:11在