Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Coldfire bootloader
Посл.ответ Сообщение

Ранг: 11.7 (новичок), 2thx
Активность: 0.020.04
Статус: Участник

Создано: 10 мая 2020 10:44 · Поправил: r0lka
· Личное сообщение · #1

Здравствуйте,

Разбираю прошивку довольно с простым bootloader MCF5475, он расшифровывает кусочек кода xor (как я понял) и передает на этот код управление.

сама прошивка

https://mega.nz/file/YzJBjKYZ#EpCDLu-y7kjmqs7TXweJO6TbKN2wp9ZSmi1Jqry3NDI


тут код

https://pastebin.com/XR3Me2nM


можно выделить кусочки

Code:
  1. ROM:00000744                          loop:                                   ; CODE XREF: decodeLoader+D2↓j
  2. ROM:00000744 BA86                                     cmp.l   d6,d5
  3. ROM:00000746 6418                                     bcc.s   next
  4. ROM:00000748 207C 3102 0000                           movea.l #block,a0
  5. ROM:0000074E D1C5                                     adda.l  d5,a0
  6. ROM:00000750 1010                                     move.b  (a0),d0
  7. ROM:00000752 1233 5800                                move.b  (a3,d5.l),d1
  8. ROM:00000756 B380                                     eor.l   d1,d0
  9. ROM:00000758 1B80 5800                                move.b  d0,(a5,d5.l)
  10. ROM:0000075C 5285                                     addq.l  #1,d5
  11. ROM:0000075E 60E4                                     bra.s   loop


и ксор на DWORD счетчик тактов, не уверен что он вообще выполняется

Code:
  1. ROM:0000076A 2839 3800 0908                           move.l  (SCNT0).l,d4
  2. ROM:00000770 5284                                     addq.l  #1,d4
  3. ROM:00000772 4204                                     clr.b   d4
  4. ROM:00000774 7A00                                     moveq   #0,d5
  5. ROM:00000776
  6. ROM:00000776                          loopXorKey4Bytes:                       ; CODE XREF: decodeLoader+F4↓j
  7. ROM:00000776 BA87                                     cmp.l   d7,d5
  8. ROM:00000778 6408                                     bcc.s   loc_782
  9. ROM:0000077A B9B2 5C00                                eor.l   d4,(a2,d5.l*4)
  10. ROM:0000077E 5285                                     addq.l  #1,d5
  11. ROM:00000780 60F4                                     bra.s   loopXorKey4Bytes
  12.  



написал кода для расшифровки по сути просто xor c ключиком адрес 0x1000 с размером 0x400 байт и данные 0x2000 размером 0x56800

Code:
  1.  
  2. import struct
  3.  
  4. def xor(data,key):
  5.     data=bytearray(data)
  6.     key=bytearray(key)
  7.     n=len(key)
  8.  
  9.     for i in range(len(data)):
  10.         data[i]=data[i]^key[i%n]
  11.     return bytes(data)
  12.     
  13.  
  14. key=get_bytes(0x1000,0x400)
  15. data=get_bytes(0x2000,0x56800)
  16. dec=xor(data,key)
  17.  
  18. with open("dec.bin","wb+") as f:
  19.     f.write(dec)
  20.  


но результат расшивровки некорректный
1. высокая энтропия
2. нет повторяющихся последовательностей если бы был еще xor 4 байта

анализ повторяющихся данных по 4е байта, рассчитываю найти шифрованные прологи

Code:
  1.  
  2. ROM:00000788 4E5E                                     unlk    a6
  3. ROM:0000078A 4E75                                     rts
  4.  


Code:
  1.  
  2. block=dec[:]
  3. d={}
  4.  
  5. while len(block)>0:
  6.     n,=struct.unpack(">I",block[:4])
  7.     if d.get(n)==None:
  8.         d[n]=0
  9.     d[n]+=1
  10.     block=block[4:]
  11.  
  12. for n in d:
  13.     if d[n]>1:
  14.         print(hex(n),d[n])
  15.  
  16.  


0xf6204e4e 2


Может кто нить глянет свежим взглядом, что то я пропустил в этом алгосе?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 10 мая 2020 12:12
· Личное сообщение · #2

Прогнал через симулятор, расшифровывает он 0x56800 байт в 0x46011000, затем
Code:
  1. ROM:0000062A jsr     (a5)

происходит переход в 0x46011000. Код там на выходе либо некорректен, либо там более широкий набор инструкций, чем у меня есть (дамп). хз.

-----
2 оттенка серого


| Сообщение посчитали полезным: r0lka

Ранг: 11.7 (новичок), 2thx
Активность: 0.020.04
Статус: Участник

Создано: 10 мая 2020 12:38
· Личное сообщение · #3

f13nd

да после моей расшифровки скриптом точно такой же дамп как у тебя. а какой симулятор использовал?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 10 мая 2020 12:44
· Личное сообщение · #4

r0lka пишет:
а какой симулятор использовал?

Trace32 (t32m68). Скрипт был таким:
Code:
  1. WinCLEAR
  2. AREA.RESet
  3. WinCLEAR
  4. WinPOS 0% 0% 50% 100%
  5. Data.List
  6. WinPOS 50% 0% 50% 50%
  7. Register.View
  8. WinPOS 50% 50% 29% 50%
  9. RESet
  10. SYStem.CPU MCF5485
  11. system.down
  12. system.up
  13. data.load.binary "coldfire_bootloader" 0
  14. r.s PC 0x400
  15. d.s 0x25000000 %be %long 0xFFFFFFF3
  16. data.dump 0x46011000 /byte /noascii

Чтоб не ставить бряков (они там лепятся прямо в код, иногда мешает корректной расшифровке), когда зависнет ожидая флагов в каком-то системном регистре сделай еще раз 'd.s 0x25000000 %be %long 0xFFFFFFF3'.

-----
2 оттенка серого




Ранг: 11.7 (новичок), 2thx
Активность: 0.020.04
Статус: Участник

Создано: 10 мая 2020 12:52 · Поправил: r0lka
· Личное сообщение · #5

f13nd просто странно очень, там вроде кроме ксора нет ничего, а выхлоп какой то странный получается. может дамп косячный конечно...

Добавлено спустя 17 минут
f13nd блин не знал что можно скачать у TRACE32 симелятор на халяву https://www.lauterbach.com/cgi-bin/download.pl?file=sim68k.zip знал что только что у них отладчик хрен купишь...




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 10 мая 2020 13:10 · Поправил: f13nd
· Личное сообщение · #6

r0lka пишет:
а выхлоп какой то странный получается. может дамп косячный конечно

Ну если сильно хочется изъябнуться как-нибудь, чтоб не распаковали, придумывают всякое. Может в оперативке от начального загрузчика из бутзаписи что-то остается и они это как-то используют в расшифроке или еще что-нибудь этакое. Опять же флаги в 0x25000000 хз что это такое, что их обычно устанавливает, что их может устанавливать, может ли оно в оперативке что-то подкорректировать перед установкой флагов - разбирайся.

Добавлено спустя 2 минуты
r0lka пишет:
блин не знал что можно скачать у TRACE32 симелятор на халяву

Демоверсии там кастрированные сильно, но этого должно хватить.

-----
2 оттенка серого




Ранг: 11.7 (новичок), 2thx
Активность: 0.020.04
Статус: Участник

Создано: 10 мая 2020 13:17
· Личное сообщение · #7

f13nd и да там прошивка чего то ожидает в регистре 0x25000000...

Code:
  1.  
  2. ROM:0000072A 2039 2500 0000                           move.l  (dword_25000000).l,d0
  3. ROM:00000730 0800 0010                                btst    #$10,d0
  4. ROM:00000734 67F4                                     beq.s   loop9
  5.  


возможно что то химичит с памятью перед расшивровкой

Добавлено спустя 17 минут
f13nd пишет:
Демоверсии там кастрированные сильно, но этого должно хватить.


ну я демкой прошел вринципе работает, хоть что то




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 мая 2020 15:26
· Личное сообщение · #8

загрузить в гидру и посмотреть декомпилятором не судьба что ли



Ранг: 11.7 (новичок), 2thx
Активность: 0.020.04
Статус: Участник

Создано: 10 мая 2020 16:34
· Личное сообщение · #9

reversecode а смысл? и так там понятно шифрование сейчас. только толку от этого какая-то переферия код модифицирует в буффере block.


 eXeL@B —› Основной форум —› Coldfire bootloader
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати