我已经整理了几天的反汇编代码,但我有几个问题。 br />
1)我编写了一个简单的程序,该程序使STM32F4板上的LED闪烁(这不是我正在升级的板上),编译代码,并查看IDA中的hex文件。在十六进制视图中,我看到了一些清晰的文本,如下所示:

..Q..<...8pG../s
ystem/src/stm32f
4-hal/stm32f4xx_
hal_cortex.c....
../system/src/st
m32f4-hal/stm32f
4xx_hal_gpio.c..
................
../system/src/st
m32f4-hal/stm32f

任何痕迹的可读字符。这是否意味着固件被混淆了(编程板的售价为60美元,所以我不会感到惊讶)?

2)IDA无法识别切入点,因此我在拆解后进行筛分文件寻找任何有趣的东西(如函数)。我之前已经进行过汇编编程,但是固件的第一行对我来说没有任何意义。它包含连续的STR操作...它存储了什么?相同的操作几乎执行了50次!?此外,它具有EQ条件,但我看不出它在比较什么。我链接的起始代码不是电路板独有的,STM32F4十六进制文件以类似的方式启动。

3)当我在“ IDA View-A”中查看反汇编的固件时,我按下箭头,然后按“ C”键查看汇编代码,但其中一些代码仍然存在作为DCB操作。这是为什么?这里的示例。

4)是否有专门用于寻找切入点的指南?大量的汇编代码让我不知所措。

评论

那些DCB在那里,因为不是每个字节的随机序列都形成有效的代码。顺便说一句,确实出现在它们周围的代码也不太像有效代码。所以,是的,它已经打包,加密或根本没有编码。

#1 楼

这里有两个主要问题:

1)固件的开始是数据(中断向量表),而不是代码
2)Cortex-M使用Thumb模式指令而不是传统的ARM。

通常,当您将ARM二进制文件加载到IDA中时,会显示以下消息:

因此您可以将顶部的T设置为1。然后,您需要遵循第二个双字(复位向量)来找到初始入口点。理想情况下,您应该得到以下内容:

---------------------------
Information
---------------------------
 ARM AND THUMB MODE SWITCH INSTRUCTIONS

 This processor has two instruction encodings: ARM and THUMB.
 IDA allows to specify the encoding mode for every single instruction.
 For this IDA uses a virtual register T. If its value is zero, then
 the ARM mode is used, otherwise the THUMB mode is used.
 You can change the value of the register T using
 the 'change segment register value' command
 (the canonical hotkey is Alt-G)

---------------------------
OK   
---------------------------


评论


当我加载二进制文件时,我在顶部看到“二进制文件[binary.llx]”,处理器类型为“ MetaPC(反汇编所有操作码)[metapc]”,这意味着它无法将代码识别为ARM(请纠正我是错误的)。如果我将其保留不变并单击“确定”,它将反汇编为Intel语法。如果选择“ ARM Little-endian”作为处理器类型,则会收到您在上面编写的“ ARM AND THUMB MODE ...”提示,然后将其反汇编为我们想要的ARM程序集。我对你接下来要说的感到困惑。我按照提示说的那样用Alt + G将T设置为0x1,但没有任何反应。

–泰勒
16年7月12日在18:47

而且我不认为我在用错误的地址加载IDA ...在手册的第48页上,内存映射显示闪存在0x0800 0000处,这是我在加载程序的地方。感谢您的帮助!

–泰勒
16年7月12日在18:52



更改T时没有可见的“意外”,但这会影响字节的解码方式(例如,下次按C时)

–伊戈尔·斯科钦斯基♦
16年7月12日在19:02

一旦设置了T并分析了整个文件,我为我的无知表示歉意。非常感谢您的帮助,您今天过得很愉快!

–泰勒
16年7月12日在19:48