如何对黑盒进行逆向工程?

逆向工程 二元分析 静态分析 开发 二进制 罗普
2021-06-30 23:42:47

我正在尝试对一个黑匣子系统进行逆向工程/研究,这是一个根本没有公开信息的系统。假设该系统是一个现代手持控制台。

我已经收集了以下信息和数据:

  • 系统使用 ARM 处理器,我知道它们的版本(准确地说是 ARM9 和 ARM11)
  • 该系统启用了 NX 位(所以我认为它有一个 MMU)。此外,一些关键应用程序运行在裸机上,而普通用户程序运行在虚拟内存上
  • RAM 内容未加密。使用硬件设置,我有内存转储。

所以,我有内存转储。什么是有效的方法?

首先,我相信用 IDA(或 r2)加载它可能会有所帮助。但我不知道如何在 IDA 中设置原始转储,我是否必须手动加载它?我错过了什么吗?

其次。转储未加密。我可以找到字符串、对在系统中运行的程序字符串的引用等......我想我也可以找到我应该能够反转的代码(如 PC 中的 .text 部分,但无论在这个系统中调用什么)。这个理论对吗?如果是这样,如何将其付诸实践?我怎样才能找到代码片段?我试过熵,它似乎很有用;代码往往具有高熵。从技术上讲,我如何在 IDA 中正确加载该代码?

一切都欢迎

编辑:在 ram 转储上运行 binwalk。很有趣:https : //gist.github.com/pedro-javierf/2476a1f4f0db72b785e414f77c273512

1个回答

First I believe loading it with IDA (or r2) could be helpful. But I don't know how to set up a raw dump in IDA, do i have to load it manually? am i missing something?

IDA 直接处理原始图像,您所要做的就是ARM little-endian [ARM]在处理器类型中指定加载后,您的第一个挑战是确定内存布局。

Secondly. The dump is not encrypted. I can find strings, references to programs that run in the system, etc... I guess I can also find code (like .text sections in PC but whatever are called in this system) which I should be able to reverse. Is this theory right? if so, how to put it in practice? how can I find pieces of code? I have tried entropy, which seems to be quite useful; code tends to have high entropy. Technically speaking, how would I load that code in IDA properly?

需要的信息是了解您拥有哪种类型的转储,如果您从漏洞、JTAG 或其他内容转储内存。布局可能不同。

几个例子:

  • 如果这是原始转储,我建议从地址 0x0 开始并查找 Arm 异常向量。
  • 如果您从闪存中转储它,您可能会发现 binwalker 中嵌入的文件。
  • 如果有 MMU,您可以检索页表并重新创建虚拟布局。
  • 您可以查找开源软件(例如 u-Boot、linux 等)使用的字符串并检索函数指针以开始重建图像。
  • 等等。

希望您能提供有关目标的更多信息,这听起来很有趣。:)