Ghidra 上的大量错误书签

逆向工程 固件 吉德拉
2021-07-07 17:39:18

我是 Ghidra 的新手,所以请放轻松。在 Windows 上运行它。

从 nRF51 成功提取蓝牙门锁固件后,我继续使用 Ghidra 对其进行反编译。我的目标是能够阅读它的一些原始源代码,即使我知道它不会像原始代码那样干净。

但是,在分析了 bin 文件后,我得到了大量错误。用于/尝试解决此问题的架构是 ARM Cortex LE 32 位和 ARM v6 LE 32 位。在互联网上寻找解决方案,我没有找到任何有同样问题的人。所有的错误都是Bad Instruction.

这是两种不同分析的图片:

没有 ARM 主动式指令查找器(原型) 在此处输入图片说明

使用 ARM 主动指令查找器(原型) 在此处输入图片说明

我之所以贴两张代码浏览器的图片是因为这两种不同的分析给了我不同数量的书签。我知道这是因为指令查找器,但谁知道这可能会帮助你帮助我。

我还尝试ia.sinc按照名为nsadeveloper789的用户GitHub 问题上的建议在我的文件中添加一行,但它没有解决我的问题。我也尝试过PDF 课程(第 11 页)中No Return方法,但也没有运气。

也使用过 SVD-Loader 但仍然没有解决问题,因为 SVD-Loader 的脚本本身可能有问题,我已经在 GitHub 上评论了这个问题(目前没有具体的解决方案)。您可以在此处查看此问题

有谁知道如何解决这个问题?我已经尝试了一两个星期,甚至在非官方的 Ghidra 的 Discord 小组中问过这个问题,但还没有答案。

期待您的回答。提前致谢。

这是下载 bin 文件的链接:https : //filebin.net/5abhimciwdfr5gfi

1个回答

固件被错误地转储。在您的文件中,所有出现的字节0A都已替换为0D 0A. 看起来像行尾问题。可能是您用来转储固件的工具0D在每个0A.

替换0D 0Awith 的所有实例后0A,它的大小应该是 256 KiB(262144 字节)。以前它的大小为 263788 字节 ~ 257.6 KiB。

作为参考,我在这里上传了固定固件

$ ./sfk196-linux-64.exe replace dump.bin  -binary /0d0a/0a/ -yes
[total hits/matching patterns/non-matching patterns]
[1644/1/0] dump.bin   -1644 bytes
1 files checked, 1 changed.

$ du -b dump.bin
262144  dump.bin

此外,您可以在固定固件上使用nrf5x-tools进行验证。

$ python3 ./nrfident.py bin ../dump.bin 2>/dev/null
############################ nRF5-tool ############################
#####                                                         #####
#####                Identifying nRF5x firmwares              #####
#####                                                         #####
###################################################################


Binary file provided ../dump.bin

Computing signature from binary
Signature:  26d6240e598f89b8aeabcecb96f3c5595b07bfc315b969a13aca34b2e61a7dc0
Searching for signature in nRF.db
=========================
SDK version:  8.1.0
SoftDevice version: s110
NRF: nrf51822
=========================
SDK version:  9.0.0
SoftDevice version: s110
NRF: nrf51822
=========================
SDK version:  10.0.0
SoftDevice version: s110
NRF: nrf51822
=========================
SDK version:  8.0.0
SoftDevice version: s110
NRF: nrf51822
                               ==================
nRF5x signature written to file nRF_ver in current directory
nRF_ver path must be provided when running nrfreverse.py from IDA

                                     *****
                                  Binary mapping
                                     *****

SoftDevice  :  s110
Card version :  xxaa
           *****
RAM address  :  0x20002000
RAM length   :  0x2000
ROM address  :  0x18000
ROM length   :  0x28000

                                     *****
                                  Binary mapping
                                     *****

SoftDevice  :  s110
Card version :  xxab
           *****
RAM address  :  0x20002000
RAM length   :  0x2000
ROM address  :  0x18000
ROM length   :  0x8000

                                     *****
                                  Binary mapping
                                     *****

SoftDevice  :  s110
Card version :  xxac
           *****
RAM address  :  0x20002000
RAM length   :  0x6000
ROM address  :  0x18000
ROM length   :  0x28000

使用语言在 Ghidra 中加载二进制文件ARM-Cortex-32-little,代码是可读的。

在此处输入图片说明

仍然有一些错误,但那些是因为我还没有创建内存段。有关更多信息,请查看nRF51 系列参考手册,第 - 5 节。

在此处输入图片说明