无法从 Cortex-M3 固件中提取机器码

逆向工程 手臂
2021-07-08 21:31:02

我想从 XBee DigiMesh 固件(Cortex-M3、EM357)中提取机器代码,所以我有一个包含 3 个部分的 SREC 文件。我想这些部分之一是代码部分,但 arm-none-eabi-objdump 经常报告“未知指令”。有谁知道为什么会这样?

这就是我尝试这样做的方式:

arm-none-eabi-objcopy --input-target=srec --output-target=binary -j .sec2 xbp24-dm_8073.ehx2.dec sec2.bin
arm-none-eabi-objdump -D -bbinary -marm -Mforce-thumb sec2.bin

更新:我通过http://git.nazaryev.ru/xctu-decoder.git/将 ehx2 转换为 ehx2.dec

2个回答

文件中的代码不是 ARM。在二进制文件中可以看到以下字符串:

硬件部件号:MC13213

谷歌搜索它导致这个页面说:

MC13213 系统级封装 (SiP) 将MC9S08GT MCU 与 MC1320x 收发器集成到单个 9x9mm LGA 封装中。

40 MHz HCS08低电压、低功耗内核

事实上,在 IDA 中选择 HCS08 会导致合理的反汇编

seg000:1893 start:
seg000:1893
seg000:1893 ; FUNCTION CHUNK AT seg000:23BC SIZE 0000009F BYTES
seg000:1893
seg000:1893                 ldhx    #$F2E
seg000:1896                 txs
seg000:1897                 ldhx    #$E02
seg000:189A                 sthx    $177
seg000:189D                 bra     loc_18AD
seg000:189F ; ---------------------------------------------------------------------------
seg000:189F
seg000:189F loc_189F:                               ; CODE XREF: start+20j
seg000:189F                 lda     #$A5 ; 'Ñ'
seg000:18A1                 ldhx    $177
seg000:18A4                 sta     , x
seg000:18A5                 ldhx    #$177
seg000:18A8                 inc     1, x
seg000:18AA                 bne     loc_18AD
seg000:18AC                 inc     , x
seg000:18AD
seg000:18AD loc_18AD:                               ; CODE XREF: start+Aj
seg000:18AD                                         ; start+17j
seg000:18AD                 ldhx    $177
seg000:18B0                 cphx    #$F2E
seg000:18B3                 bcs     loc_189F
seg000:18B5                 jsr     sub_182C
seg000:18B8                 jmp     loc_23BC

 

固件文件哈希

E:\zigb>rahash2 -a md5 xbp24-dm_8073.ehx2.dec
xbp24-dm_8073.ehx2.dec: 0x00000000-0x00022bcd md5: 971f71b674af2d5edb670a5ce4b0371f

我的 Windows 框中的 mingw objcopy 版本

E:\zigb>objcopy -V
GNU objcopy (GNU Binutils) 2.25.1
Copyright (C) 2014 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.

复制文件

E:\zigb>copy xbp24-dm_8073.ehx2.dec test.dec
        1 file(s) copied.

现在我objcopy它

E:\zigb>objcopy -I srec -O binary -S  test.dec

E:\zigb>ls -l
total 200
-rw-rw-rw-  1 HP 0  60800 2017-03-30 03:25 test.dec
-rw-rw-rw-  1 HP 0 142286 2017-03-30 02:43 xbp24-dm_8073.ehx2.dec

从文件中转储 32 个字节

E:\zigb>xxd -g 1 -l 32 test.dec
0000000: 43 54 02 d1 47 10 36 43 4e 00 d1 31 00 00 41 43  CT..G.6CN..1..AC
0000010: 00 d1 12 00 00 56 52 02 9c 1d fd 46 46 52 00 d1  .....VR....FFR..

从原始文件转储前两行

E:\zigb>head -n 2 xbp24-dm_8073.ehx2.dec
S0260000433A5C446576656C6F706D656E745C646D32345C62696E5C584232342D444D2E70726DBE
S1231080435402D1471036434E00D1310000414300D11200005652029C1DFD46465200D14C

解密第一个 s0 记录(标题)和第二行 S1 数据记录

E:\zigb>rax2 -s 433A5C446576656C6F706D656E745C646D32345C62696E5C584232342D444D2E70726D
C:\Development\dm24\bin\XB24-DM.prm

E:\zigb>rax2 -s 435402D1471036434E00D1310000414300D11200005652029C1DFD46465200D1
CT☻╤G►6CN ╤1  AC ╤↕  VR☻£↔²FFR ╤

它似乎是 objcopy 的正确转换

顺便说一句,objdump 可以使用 srec 作为目标,所以我认为不需要 objconv

:\>arm-none-eabi-objdump.exe -D -bsrec -marm  -Mforce-thumb --start-address=0x1893 --stop-address=0x
18a3 e:\zigb\xbp24-dm_8073.ehx2.dec

e:\zigb\xbp24-dm_8073.ehx2.dec:     file format srec


Disassembly of section .sec2:

00001893 <.sec2+0x67>:
    1893:       0f45            lsrs    r5, r0, #29
    1895:       942e            str     r4, [sp, #184]  ; 0xb8
    1897:       0e45            lsrs    r5, r0, #25
    1899:       9602            str     r6, [sp, #8]
    189b:       7701            strb    r1, [r0, #28]
    189d:       0e20            lsrs    r0, r4, #24
    189f:       a5a6            add     r5, pc, #664    ; (adr r5, 0x1b38)
    18a1:       0132            lsls    r2, r6, #4

:\>

二进制 xbee-pro digimesh v24 和 mc13213 中的字符串似乎是一个 hcs08 兼容的 cpu