我有一个文本文件,并且我知道它是设备的固件。该文件具有Intel Hex格式,如下所示:
:03:8000:00:028100FA
:02:8003:00:XXXXXX
:02:800B:00:XXXXXX
:02:8013:00:XXXXXX
:01:801B:00:XXXX
:01:8023:00:XXXX
:10:802B:00:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
:10:803B:00:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
:10:804B:00:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
:10:805B:00:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我如何找出该文件属于哪种类型的处理器(Intel / ARM / PIC / ...)?以及如何拆卸呢?
字节的频率:
ebra@him:~$ cat single-byte-per-line | sort | uniq -c | sort -n
      1 
      3 59
      5 4C
      6 49
      6 57
      6 5D
      8 47
      8 48
      8 4A
      8 4E
      8 52
     10 C6
     11 7E
     11 8F
     11 9B
     12 51
     12 8E
     12 95
     12 9C
     12 9D
     12 B7
     12 CE
     13 CF
     14 27
     14 55
     14 56
     14 58
     14 5C
     14 7F
     15 73
     15 8D
     15 9E
     15 C7
     15 D6
     16 5F
     16 D7
     17 1B
     17 A5
     17 C8
     17 CB
     18 AF
     18 B1
     19 46
     19 5A
     19 8B
     19 C1
     20 D9
     20 ED
     21 72
     21 94
     21 A6
     22 43
     22 4F
     22 71
     22 AC
     22 B9
     22 C9
     23 9F
     23 A3
     23 BE
     24 42
     24 AD
     24 BD
     24 BF
     24 E9
     25 4D
     25 CC
     26 87
     26 A1
     26 B8
     26 E8
     27 69
     27 6F
     27 88
     28 F1
     29 53
     29 5E
     29 61
     29 77
     29 BC
     30 45
     30 AB
     31 1A
     32 86
     33 1E
     33 4B
     34 1C
     35 1F
     35 67
     36 BB
     36 EA
     37 98
     37 99
     37 DD
     37 F4
     37 FD
     38 2C
     38 B2
     40 3B
     40 EE
     41 25
     41 97
     41 E7
     42 2D
     42 D4
     42 EF
     43 1D
     43 8C
     44 5B
     44 96
     44 DC
     46 28
     46 3A
     46 D5
     46 DF
     46 F7
     46 FE
     47 76
     47 7D
     48 C5
     48 FC
     49 D8
     50 35
     53 0E
     53 B5
     57 BA
     57 E6
     58 A7
     58 C4
     58 CA
     59 19
     59 21
     59 AA
     62 3D
     62 A8
     63 93
     63 A9
     65 34
     65 8A
     65 B0
     65 F6
     67 AE
     67 D1
     68 31
     69 EC
     70 26
     70 41
     71 14
     71 81
     72 23
     72 3E
     72 65
     72 B6
     74 F8
     75 44
     75 6B
     76 64
     76 7C
     76 92
     77 FF
     78 37
     78 91
     78 B3
     79 2F
     80 A0
     82 38
     84 A2
     85 DA
     87 0D
     90 24
     91 6D
     91 A4
     93 18
     95 62
     95 CD
     96 0B
     96 3C
     99 68
     99 E4
    101 6C
    103 50
    106 63
    109 39
    109 3F
    109 DE
    111 6E
    112 6A
    115 E1
    116 36
    117 70
    117 89
    118 D3
    128 17
    131 FB
    134 D0
    137 54
    146 FA
    149 0C
    151 0A
    154 F9
    164 60
    173 C3
    174 2A
    183 DB
    184 C0
    185 29
    185 E3
    189 16
    191 83
    200 2E
    203 9A
    204 66
    207 F3
    212 15
    212 20
    220 0F
    221 7B
    226 7A
    240 33
    241 E2
    242 F5
    244 EB
    247 30
    247 32
    255 2B
    256 06
    261 10
    275 13
    284 07
    286 40
    288 E0
    309 84
    311 85
    313 03
    321 04
    325 22
    326 C2
    327 F2
    333 01
    333 79
    344 82
    353 90
    357 11
    362 F0
    376 80
    414 05
    422 78
    436 09
    467 74
    489 D2
    570 08
    656 E5
    889 B4
   1301 12
   1369 02
   1717 00
   2081 75

如果我提取所有以75开头的2字节序列,我就会:
ebra@him:~$ cat sequence-starts-with-75 | grep -o .... | sort | uniq -c | sort -n
      1 7505
      1 750D
      1 750E
      1 7514
      1 7519
      1 751F
      1 7521
      1 7522
      1 7526
      1 7527
      1 752D
      1 7530
      1 7545
      1 7547
      1 7548
      1 754D
      1 754F
      1 7557
      1 755F
      1 7560
      1 756F
      1 7570
      1 7571
      1 7572
      1 7573
      1 7581
      1 7587
      1 758B
      1 7594
      1 75A8
      1 75B8
      1 75C8
      1 75CA
      1 75CB
      1 75CC
      1 75CD
      1 75E5
      1 75F2
      2 7501
      2 7510
      2 751D
      2 7525
      2 7534
      2 7536
      2 753C
      2 753D
      2 7566
      2 758D
      2 7598
      2 7599
      2 75B4
      2 75D0
      2 75D4
      3 7523
      3 752F
      3 757A
      3 758C
      4 752E
      4 753A
      6 7535
      6 7537
      6 753B
      6 753F
      6 7567
      6 7569
      7 7500
      7 7540
      7 757B
      7 758A
      8 757C
      8 75A0
     10 7524
     11 7563
     11 7574
     11 7576
     11 7577
     11 7579
     12 7518
     13 7575
     14 752C
     16 7565
     16 7578
     17 7517
     17 75F0
     18 7528
     18 7564
     19 7539
     19 753E
     27 7562
     37 7515
     37 7583
     38 7516
     45 7533
     49 756A
     49 756B
     50 756C
     52 756E
     53 756D
     58 7532
     68 7512
     73 7568
    141 752B
    143 7529
    144 752A
    169 7582
    204 7513
    248 7511

对于以75开头的3字节序列:
    ebra@him:~$ cat sequence-starts-with-75 | grep -o ...... | sort | uniq -c | sort -n
  .. [Truncated] ...
  6 750075
  6 752B03
  6 752B08
  6 753269
  6 753F00
  6 756BA4
  6 757500
  6 757800
  6 758204
  6 758205
  6 75820B
  6 75F000
  7 75120A
  7 752801
  7 752B05
  7 756E08
  8 751101
  8 752910
  8 756BC0
  8 756D0C
  8 757400
  8 75A000
  9 751104
  9 752803
  9 758200
  9 758203
 10 752901
 10 752C80
 10 756BB2
 11 751864
 11 753200
 11 756ABC
 11 758208
 12 753290
 13 751210
 14 752B01
 14 752B10
 14 753910
 14 756C01
 14 75820F
 15 752B06
 16 753E00
 16 756BB0
 17 7517FF
 17 75326A
 17 753300
 18 752906
 19 756811
 19 756E00
 19 758209
 20 758201
 21 752904
 21 752B04
 22 756D00
 23 756C00
 24 75820A
 30 756A00
 34 758202
 35 752902
 36 758301
 37 752905
 46 752B02
 46 756810
 65 751103
 77 751102
 79 751100
142 752A00


#1 楼

这听起来类似于给定文档,推断语言。
我将指令的频率(文件中每个值的计数)与从已知处理器类型的文件派生的指令的频率进行比较。有效的会标模型。如果您以通用格式获取文件,我可以帮助您。

评论


很棒的主意,我已经更新了问题。你能看看吗?

–亚伯拉罕
20 Dec 25'9:17

您能指出我一些用于各种芯片的索引十六进制格式文件吗?

– Pythonpython
20/12/25在16:18

不幸的是我没有头绪。如果可以的话,我会分享的。

–亚伯拉罕
20 Dec 25 '18:44

我将看到可以在Intel / ARM / PIC中找到的东西。

– Pythonpython
20 Dec 25 '18:50

好吧,我打开了设备的主体。大声笑。

–亚伯拉罕
20 Dec 26 '19:15



#2 楼

您不能-Intel hex格式不包含此类数据。您需要手动寻找正确的架构。您可以为此使用IDAGhidra,然后针对可能的每种体系结构在下面打开。

然后您需要分解整个文件,看是否有意义。 (控制流,函数数量,外部参照等)。
或者,当然,请使用一些脚本。

评论


该文件中没有任何处理器/特定于体系结构的指令/序言吗?据我所知,指令集是不同的。对?

–亚伯拉罕
20 Dec 24 '17:21

是的,但是十六进制格式仅将字节值映射到地址空间。您可以将其视为一张大地图,上面写着哪个二进制值应该在哪个地址。十六进制格式本身并不关心体系结构。

– macro_controller
20 Dec 24 '19:01