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

由于我只用反汇编程序(IDA Pro)进行盲目工作,所以我发现很难上手。我知道一些表和2个标量的地址,但是在反汇编代码中找不到任何引用。

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

我在想,如果我可以找到进行此转换的操作所在,我将有一个开始浏览的地方。但是,我不确定该如何进行操作,是乘法操作码还是移位?我不知道在构建代码时使用了哪些编译器选项或使用了什么优化。

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

已知表为13x19的热图


分析之前在IDA中使用相同的表


分析之后在IDA中使用相同的表

如果我寻找任何XREF在dword_208C8上没有任何



评论

IDA不会为您这样做吗?您应该能够从标量中导航回访问它的代码,或者将地址加载到寄存器中。对于大型表或缓冲区,它并不总是做得很出色,因此您可能需要查看附近的地址,但是那里可能有东西。
@Rup IDA提供了一些参考,但是它们并不完全准确,也无法全部获得。实际上,在数据区域中没有进/出数据项的XREF,否则我会很好的。我不知道是否需要首先以某些方式定义数据,但是我尝试了一些没有结果的事情。我将标量定义为数据,并且反汇编的方式不同,但是仍然没有XREF

@Rup我为您更新了一些屏幕截图的问题

如果您已将二进制文件加载到IDA中,而数据没有引用,我建议您将二进制文件加载到错误的地址空间中。或者以相对方式对其进行引用,而您尚未解码引用该代码的代码。根据CPU以及引用的方式而定,又名FR之类的东西只能做绝对引用,因此您可以通过函数调用来锻炼该地址空间,而ARM则使用了大量相对调用,因此可以在其中使用问题来查找信息绑定的内存访问可以帮助识别正确的基地址。

通常,我将文件加载为零,然后查找内存地址偏移量,将jmps查找为没有意义的地址。然后,我打开一个新项目,并以我认为现在正确的“新偏移量”加载图像,然后从该位置开始。.我发现每个型号的相机代码均已加载到尼康相机的新位置/地址中,寻找正确的问题,而当您这样做时更有意义。接下来的事情是,如果将代码复制到RAM中以允许更新固件,则尼康会执行此操作,或者将其RTOS加载到其他位置。所有可能就是访问此数据的代码。

#1 楼

如果您已将二进制文件加载到IDA中,而数据没有引用,我建议您将二进制文件加载到错误的地址空间中。或者以相对方式对其进行引用,而您尚未解码引用该代码的代码。根据CPU以及引用的方式而定,又名FR之类的东西只能进行绝对引用,因此您可以通过函数调用来锻炼该地址空间,而ARM会使用很多相对调用,因此可以使用问题来查找绑定的内存访问可以帮助您识别正确的基址。

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