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

 eXeL@B —› Вопросы новичков —› Разобрать загрузчик. Как ?
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 ноября 2018 00:17 · Поправил: tinycat
· Личное сообщение · #1

Приветствую уважаемое коммьюнити. У меня возник вопрос. Есть загрузчик для роутера на RT5350. Называется Breed. Всем хорошо бы, да одно НО. Написан на ядреном китайском языке. Что можно в такой ситуации сделать, можно ли как-то заменить китайские иероглифы ? Прошу совета! Китаец на контакт не идет и никак не отзывается. Хотя народ считает что он просто украл исходники GPL.
Заранее спасибо.
Binwalk дает такой вот отчет:
Code:
  1. 0_0x0_uImage header, header size: 64 bytes, header CRC: 0x871007F5, created: 2017-12-26 15:09:30, image size: 82882 bytes, Data Address: 0x80200000, Entry Point: 0x80200000, data CRC: 0x8F7A0FCE, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: none, image name: "Breed for RT5350"
  2. 7008 _0x1B60_Copyright string: "Copyright (C) 2017 HackPascal <hackpascal@gmail.com>"
  3. 7428_0x1D04_LZMA compressed data, properties: 0x6D, dictionary size: 33554432 bytes, uncompressed size: 260690 bytes


50a8_03.11.2018_EXELAB.rU.tgz - breed-rt5350-hame-a5-r1163.bin

Добавлено спустя 59 минут
зажаты lzma следующие файлы (в прикрепленных)

3f6c_03.11.2018_EXELAB.rU.tgz - breed_extract.zip




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

Создано: 03 ноября 2018 09:29 · Поправил: f13nd
· Личное сообщение · #2

Проц MIPS little endian, загружается по 80200000, вот твой lzma-заголовок:
Code:
  1. seg000:80201CC4 6D 00 00 00                 .word 0x6D
  2. seg000:80201CC8 02 52 FA 03                 .word 0x3FA5202
  3. seg000:80201CCC 00 00 00 00                 .word 0
  4. seg000:80201CD0 00 00 00 24                 .word 0x24000000

Вырезаю, в отдельный файл, 7zip вываливает файл 260 690 байт. Загружаю по 80100000. Примерно по 8013BB1C находится длинная таблица с адресами функций (которые с 80100000 по 80128CC8, 2/3 файла примерно), а по 8012E5CC - таблица с адресами интересующих тебя строчек с китайским языком.
Архив с частично разобраной прошивкой --> Link <-- (ida70 x64).
Отсюда два варианта: либо переводить как русифекализаторы игрушек 90х годов, пытаясь вписать строчку в отведенное пространство, либо дизассемблировать, перевести, и собрать обратно. Если не всю прошивку целиком, то все, что касается адресов (примерно с 80128CC8 до потолка). Второе кстати вполне осуществимо, останется только найти где прошивка сами эти таблицы адресует и ручками уже исправить.

Добавлено спустя 16 минут
tinycat пишет:
Хотя народ считает что он просто украл исходники GPL

Выглядит так же смешно, как и звучит.

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




Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 ноября 2018 14:59
· Личное сообщение · #3

f13nd огромное спасибо за отклик.
Может вы подробнее раскажете про "второй вариант".
Этот загрузчик разбирается в линуксе на файлы (я прикрепил), там внутри html-размеченные страницы с иероглифами. Если иероглифы заменить на переводы, и зажать обратно - с какими проблемами можно столкнуться ?
Прошу заранее прощения, если задаю глупые вопросы.




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

Создано: 03 ноября 2018 15:23 · Поправил: f13nd
· Личное сообщение · #4

tinycat пишет:
Этот загрузчик разбирается в линуксе на файлы (я прикрепил), там внутри html-размеченные страницы с иероглифами.

Плохо себе представляю как. Я бы загрузил в иде со смещения 28CC8 и по адресу 80128CC8 (чтоб адреса программной части ида воспринимала как константы, это сильно упросит жизнь), раскидал бы на дворды, переработал это в fasm-исходник (даже без всяких костылей, айбиэм писи тоже литтл эндиан)
Code:
  1. org 0x80100000
  2. file 'unpacked.bin':0,0x28CC8
  3. ...

Нашел бы нужные фрагменты html, которые надо перенести, вынес бы их во внешние двоичные файлы типа '13300C.bin' и подключил бы вместо них
Code:
  1. a13300C: file '13300C.bin'

Потом перед второй таблицей
Code:
  1. repeat 0x80139E8C - $
  2. db 0
  3. end repeat

Если бы потребовалось, вынес бы пару этих файлов в конец (если перевод окажется хоть на 1 байт длинней, тогда фасм ругнется на аут оф рендж) и пересобрал. Все таблицы должны остаться на своем месте, все адреса будут верными. Это наверное самый правильный способ как избежать возможных проблем.

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


| Сообщение посчитали полезным: Jupiter, HandMill, tinycat


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 04 ноября 2018 11:09
· Личное сообщение · #5

f13nd
Хороший вариант, к тому же поддерживает допиливание в будущем.

-----
EnJoy!





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

Создано: 04 ноября 2018 11:30
· Личное сообщение · #6

Jupiter пишет:
Хороший вариант, к тому же поддерживает допиливание в будущем.

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

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




Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 17 ноября 2018 22:20
· Личное сообщение · #7

f13nd: чувствуется в вашем решении простота
Мне да этого еще ох как далеко...
1)Первым делом, какой выбирать тип процессора при загрузке ? mipsl ?
2)Какие адреса нужно указывать в табличке разметки памяти (на картинке) ?
3)Что значит "раскидать на dword-ы" ?
4)Как искать нужные фрагменты html, которые надо перенести ? Копируя в поиск IDA сами иероглифы через буфер обмена ?

a69e_17.11.2018_EXELAB.rU.tgz - trans.jpg




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

Создано: 17 ноября 2018 22:58 · Поправил: f13nd
· Личное сообщение · #8

tinycat пишет:
1)Первым делом, какой выбирать тип процессора при загрузке ? mipsl ?

mipsl

tinycat пишет:
2)Какие адреса нужно указывать в табличке разметки памяти (на картинке) ?

ROM section:
ROM start address: 0x80128CC8

Input file:
Loading address: 0x80128CC8
File offset: 0x28CC8
tinycat пишет:
3)Что значит "раскидать на dword-ы" ?

D + D + D
я обычно питоновым скриптом это делаю, на хоткей alt+2 авторан-скрипт биндит вот это:
Code:
  1. import idaapi
  2. ida_idaapi.set_script_timeout(1)
  3. pos = ida_bytes.next_unknown(idc.get_screen_ea(),BADADDR)
  4. idc.create_data(pos,FF_DWORD,4,BADADDR)
  5. idc.jumpto(pos)

Зажимаю alt+2 и до победного (смотри чтоб адреса были кратны 4)
Авторанится вот так:
Code:
  1. Windows Registry Editor Version 5.00
  2.  
  3. [HKEY_CLASSES_ROOT\*\shell\IDA70]
  4.  
  5. [HKEY_CLASSES_ROOT\*\shell\IDA70\command]
  6. @="D:\coding\debugger\IDA 7.0\ida64.exe -S"D:\coding\scripts\ida\autorun.py" "%1""

Потом достаточно файл открыть через контекстное меню - IDA70.

tinycat пишет:
4)Как искать нужные фрагменты html, которые надо перенести ? Копируя в поиск IDA сами иероглифы через буфер обмена ?

Открыть в нех-редакторе, искать теги. Если внутри будет содержимое в неизвестной кодировке (любые кракозябры кроме аглицкого), то такой фрагмент надо переводить.

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




Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 17 ноября 2018 23:30
· Личное сообщение · #9

Выбрасывает с ошибкой Virtual Array: Adress space limit is reached
Что указывать в ROM size и Loading Size ?




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

Создано: 17 ноября 2018 23:49
· Личное сообщение · #10

tinycat пишет:
Что указывать в ROM size и Loading Size ?

Да ида там сама Loading size выберет (0x3FA52), когда смещение подставишь, максимум перенести его останется в ROM size.

как-то так примерно http://sendfile.su/1456007

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




Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 ноября 2018 00:10 · Поправил: tinycat
· Личное сообщение · #11

ага, а IDA то у меня 5-й версии Может как раз в этом дело, попробую обновить сча. Заодно и питон установлю. Спасибо!
Интересно, 7 версия действительно сама распознала и тип бинарника и адреса и даже IDAPython установила. Только что размер не порадовал




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

Создано: 18 ноября 2018 00:29
· Личное сообщение · #12

tinycat пишет:
Интересно, 7 версия действительно сама распознала и тип бинарника и адреса и даже IDAPython установила.

Проц распознал ты сам, я просто прочитал первое сообщение внимательно) Базовый адрес прошивки обычно несложно выяснить глядя на нее. Идапитон вроде бы есть в комплекте, сам питон у меня изначально был установлен. Размер это при сохранении файла пункт 'deflate', подождав лишние полсекунды получаешь файл в несколько раз меньше.

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




Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 ноября 2018 03:52 · Поправил: tinycat
· Личное сообщение · #13

f13nd: не могу импортировать ключ. В реестре всего лишь создаются разделы. Как должен этот параметр выглядеть для ручного ввода ? Мой вариант не срабатывает:
Code:
  1. Windows Registry Editor Version 5.00
  2.  
  3. [HKEY_CLASSES_ROOT\*\shell\IDA70]
  4.  
  5. [HKEY_CLASSES_ROOT\*\shell\IDA70\command]
  6. @="C:\Program Files\IDA 7.0\ida64.exe -S"C:\python\autorun.py" "%1""

Потом этот скрипт должен проявится в меню скриптов IDA ? Или его нужно вручную прописывать ?




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

Создано: 18 ноября 2018 04:51 · Поправил: f13nd
· Личное сообщение · #14

tinycat пишет:
Потом этот скрипт должен проявится в меню скриптов IDA ? Или его нужно вручную прописывать ?

Этот ключ добавляет в контекстное меню любых файлов (правая кнопка в файловом менеджере) пункт IDA70, которым файл откроется сразу с запущенным скриптом autorun.py. По-моему форумный движок съел маскирующие бекслеши. Должно быть так:

И сразу держи --> Link <--, а то мало ли. 'scripts_path' замени в autorun.py на свой.

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




Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 ноября 2018 05:22 · Поправил: tinycat
· Личное сообщение · #15

Cпасибо, читал-читал про IDAPython и правильное прописывание команд, а оказывается форум съел символы
Так мне скриптом обрабатывать i64-файл, правильно я понимаю ? Что должно получится в результате этой процедуры, набор кусков файлов ? Что с ними необходимо делать дальше ? (как в той сказке "и что, уже можно есть?"




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

Создано: 18 ноября 2018 11:54
· Личное сообщение · #16

tinycat пишет:
Что с ними необходимо делать дальше ?

Там дальше про фасм было --> Link <--

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



 eXeL@B —› Вопросы новичков —› Разобрать загрузчик. Как ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати