如何识别内存访问位置

逆向工程 拆卸 嵌入式
2021-06-23 04:12:51

我正在从来自汽车(MT86 ECU)的 TriCore TC1766 中拆卸闪存转储。我的目标是识别数据区域中的表和标量,并确定它们的用途。我使用热图分析根据我发现的模式定位了 200 多个潜在表,并根据一些已知的表位置验证了我的结果(大部分)是有效的。表尺寸也是已知的。

由于我只使用反汇编程序(IDA Pro)盲目工作,我发现很难开始。我知道几个表和 2 个标量的地址,但在反汇编代码中找不到对它们的任何引用。

我知道每个表值和缩放器都需要以某种方式转换以获得正确的值。例如,位于 0x30D4C 的标量具有以下字节 F8 D9,当反转时,是一个整数 55,800,然后乘以 0.125 得到目标值 6975,即 ECU 将使发动机旋转的最大 RPM .

我在想,如果我能找到进行此转换的操作的位置,我就会有一个开始导航的地方。但是,我不确定这些操作将如何完成,它是乘法操作码还是位移位?我不知道在构建代码时使用了哪些编译器选项或使用了哪些优化。

我可以使用哪些技术来查找引用这些内存位置的位置?

13x19 已知表的热图 在此处输入图片说明

分析前IDA中的同一张表 在此处输入图片说明

分析后IDA中的同一张表 在此处输入图片说明

如果我在 dword_208C8 上查找任何 XREF,则没有

在此处输入图片说明

1个回答

如果您已将二进制文件加载到 IDA 并且数据没有引用,我建议您将二进制文件加载到错误的地址空间中。取决于 CPU 和引用的方式,也就是像 FR 这样的东西只做绝对引用,所以你可以通过函数调用来锻炼地址空间,因为 ARM 使用了很多相对调用,这是使用问题找出的地方绑定内存访问可以帮助识别正确的基地址。

一般来说,我加载一个文件为零,然后查找内存地址偏移量,jmps 到没有意义的地址。然后我打开一个新项目并以我认为现在正确的“新偏移量”加载图像,然后从那里开始..我发现每个型号的相机代码都加载到尼康相机的新位置/地址中,它是找到正确的问题,当你这样做时,它更有意义。接下来的事情是,如果代码被复制到 RAM 中以允许更新固件,尼康会这样做,或者在不同的位置加载它的 RTOS。所有这些都可能是访问这些数据的代码。