LINUX.ORG.RU
ФорумTalks

Понять структуру бинарного файла прошивки - получить максимальную информацию

 ,


0

1

Привет, народ.

Имеется вот такая прошивка для гитарного процессора BOSS GT-1:

https://static.roland.com/assets/media/zip/gt1_sys_v109.zip

В архиве лежит незашифрованный бинарник.

Нужно понять две вещи:

1. Что за структура у этого бинарника? Похоже, что вначале идет нечто вроде таблицы разделов какой-то файловой системы. Но какой - по сигнатуре нагуглить не могу. Или это какие-то таблицы смещений? Или еще что-то?

2. Надо понять, где начинается код. И какой архитектуры этот код. ARM? MIPS? Что-то еще? Каким инструментарием смотреть?

Свои мысли я начал записывать здесь: https://webhamster.ru/mytetrashare/index/mtb0/17186974979qcubc1ew5 , хочу расширить понимание как устроена эта прошивка.

★★★★★

Для начала поищи хотя бы фотки чипов в проце, от модели CPU/DSP уже можно отталкиваться.

yu-boot ★★★★★
()
Ответ на: комментарий от Xintrea

Вероятность в разы ниже. Когда знаешь, куда смотреть, смотреть проще.

Zhbert ★★★★★
()
Ответ на: комментарий от yu-boot

Неизвестно даже, с какого смещения CPU начнёт эту прошивку читать, и что там лежит.

Ну в дампе характерные блоки хорошо видны.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Главный камень – IC1 (ESC2), маркировка MB8AA4181

Информации не слишком много, архитектура неизвестная. Скорее всего что-то от Fujitsu.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Хочешь сказать, что у них может быть своя система команд / архитектура? Я не готов в это поверить.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от EXL

Пишут так:

IC1
MB8AA4181 (ESC2)

Где IC1 - это что-то Intergated Cpu 1, просто обозначение на схеме.

Нашел только маркетоидный бред:

MB8AA4181, произведенный компанией FUJITSU и распространяемый Worldway Electronics. Он относится к категории микросхем электронных компонентов. Он применяется во многих областях, таких как электроника для автомобильных кузовов и осветительное оборудование, средства связи, Широкополосный фиксированный доступ к персональной электронике, периферийные устройства и принтеры.


Как минимум, этот чип не чисто музыкальный, судя по сфере применения. А если он используется в принтерах, то в нем не должно быть DSP, нафиг бы он был там нужен.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)

binwalk на него не натравливал, ничего не видно?

MB8AA4181, произведенный компанией FUJITSU

Прискорбно. Документацию б на него.

sehellion ★★★★★
()
Ответ на: комментарий от sehellion

binwalk на него не натравливал, ничего не видно?

Все глухо, пробовал:

binwalk GT1ROM.BIN
inwalk --signature GT1ROM.BIN
binwalk --opcodes GT1ROM.BIN

Xintrea ★★★★★
() автор топика

Сорри за оффтоп: повествование навеяло, как я писал драйвер к винмодему. Выполнял реверс под этот ваш Линукс.

sparkie ★★★★★
()
Ответ на: комментарий от Xintrea

Хочешь сказать, что у них может быть своя система команд / архитектура?

Легко. Какой-нибудь Fujitsu RISC или H8.

Я не готов в это поверить.

Девайс специализированный, там наверняка DSP с какой-то эксклюзивной архитектурой, а не ARM/MIPS общего назначения.

EXL ★★★★★
()

с телефона неудобно глядеть, но что там в строке 0000 0507?

0507 я взял из из вашего ROMINFO.txt:

0064,0507,4096

Например, в прошивках Apple II также указана строка 0507 и это точка входа, там начало вычисления контрольной суммы файла прошивки.

4096 эт 4К RAM. 0064 это какое-то смещение от строки 0507, либо (вроде бы) как в Apple II - точка обработки input/output.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от Obezyan

с телефона неудобно глядеть, но что там в строке 0000 0507?

Ничего внятного, середина какой-то таблицы:

000004C0 03 B5 9D F8 │ 00 00 00 F0 │ 0F 00 08 28 │ 45 D2 DF E8  ...........(E...
000004D0 00 F0 04 0C │ 14 1C 24 2C │ 34 3C 9D F8 │ 00 00 02 09  ......$,4<......
000004E0 08 68 62 F3 │ 03 00 08 60 │ 38 E0 9D F8 │ 00 00 02 09  .hb....`8.......
000004F0 08 68 62 F3 │ 07 10 08 60 │ 30 E0 9D F8 │ 00 00 02 09  .hb....`0.......
00000500 08 68 62 F3 │ 0B 20 08 60 │ 28 E0 9D F8 │ 00 00 02 09  .hb.. .`(.......
00000510 08 68 62 F3 │ 0F 30 08 60 │ 20 E0 9D F8 │ 00 00 02 09  .hb..0.` .......
00000520 08 68 62 F3 │ 13 40 08 60 │ 18 E0 9D F8 │ 00 00 02 09  .hb..@.`........
00000530 08 68 62 F3 │ 17 50 08 60 │ 10 E0 9D F8 │ 00 00 02 09  .hb..P.`........
00000540 08 68 62 F3 │ 1B 60 08 60 │ 08 E0 9D F8 │ 00 00 02 09  .hb..`.`........
00000550 08 68 62 F3 │ 1F 70 08 60 │ 00 E0 00 BF │ 00 BF 0C BD  .hb..p.`........

Xintrea ★★★★★
() автор топика

В прошивке мелькает весьма специфичная строка «GPVFN: Pure virtual fn called», что может намекнуть хотя бы на компилятор.

token_polyak ★★★★★
()
Ответ на: комментарий от Xintrea

google.com

Неудивительно.

«GPVFN» действительно не гуглится и не яндексится, а вот «Pure virtual fn called» находит даже треды на ЛОРе. ЧСХ, не Гугл, только Яндекс - Гугл норовит поменять fn на function, лишая поиск всякого смысла.

Находит конкретно ARM Compiler Toolchain, или как минимум что-то другое LLVM-based(?).

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 4)
Ответ на: комментарий от token_polyak

Кстати, как ты нашел? я сделал выборку через «strings -n 10», мне твою строку не показали. Максимум что внятного нашлось:

BSSESC2:GT1Upd  210610153839
BSSESC2:GT1Appli210610153839
Mello_w Jzz
_Warm? Clean
tackCrncmh
Drivin''MS
StackCornch\L
Mid _BoostFl
JFa?t Solo
RiffMaoster}
z<ThickDrgive
etalDrivee
]Voodoo 7Wahb
Massisve^0[;
ComboDrimvL
cNuzz Phwase}K
Stac?k Solo
Retro oTrem
}eepS_pring
yComboDrwive
0ComboColean
,/>/NatrlCornchZ+
Sl?apback0
epSpringvS
,o>oPoboto
o(o:oLo^opo
o,o>oPoboto
ROBINS B_RIDGE8
MODERN? METALK
METAL? MONEY
RIPLE DE?EP DLY
0s STUDI?O LEAD
EAD MODUwLAT
KY CLEAN4i
YpY GROOV}E_z
 SUSTAINNR8
OMP CR_UNCH 
RO TREMOKLO=Y
2oDoVohozo
8E1SELECT>W7FXEDI
2INDICAgTOR
K5PL1TUNER
pTA NO?T FOUN
PSOU?NDHOLD
-vSLaRETUR
PxiER_AECHOxiR
LsyVIBRAT~svPREAMP
UCHAIN/ POSd
ACOUSTJ _PIEZO
yY`LANGpV`
END/ RETwURNh
VIDV`N`p GTGs
KNOB_P_OPUP2L
07_INVIS=I
qVE_SPAOCE_C
Hi GAIN STACK   
TERA ECHO LEAD  
NATURAL CLEAN   
POWER METAL RIFF
HARMONY LD in Am
ROUND & ROUND   
FDR BLUES CRUNCH
SYNC TREMOLO    
ADD TRANSPARENCY
ORNG ROOMY LEAD 
AC SIM STRAIGHT 
ROYAL LEAD      
SUPER SLOW GEAR 
SLAPBACK ECHO   
A-DIST &OVERTONE
FAT BLUESY LEAD 
DIVID ORGAN TONE
STACK CRUNCH    
VAN FLANGE      
SPACY LEAD      
1959 CRUNCH     
MID BOOST COMBO 
CRUNCH 4 RHYTHM 
ROTARY          
1969 XPERIENCE  
CREAMY SET      
DEEP DELAY & VIB
ROBINS BRIDGE   
RIPPIN'         
OCTAFUZZ LEAD   
60s FUZZ LEGEND 
5th PS & GATE   
ROADS           
SLOW GEAR LEAD  
POWER DRIVE     
AMBIENT DIRTY OD
MATCH CRUNCH    
ORNG CRUNCH     
STEREO STACK    
LA TR RIFF      
COMBO AC        
TWIN CRUNCH     
SLIDE FOR LP    
BASIC BLUES     
KING OF BLUES   
FINGER LEAD     
BLUES BUDDY     
SQUEEZE BLUES GT
BARK TONE       
70s US HARD ROCK
BROWN SND For ST
1984 DRIVIN'    
OD-1 + STACK    
GREAT ROCK      
BGNR LEAD       
MODERN METAL    
CHORUS LEAD     
R-FIER LEAD     
METAL MONEY     
METAL CORN      
DRAGON METAL    
BLADE METAL     
TRIPLE DEEP DLY 
METAMORPHOSIS GT
DIAMOND ECHO    
TREMOLO MOD DLY 
MULTI DIMENSION 
YOU TWO         
MELLOW FELLOW   
80s STUDIO LEAD 
SUPER CLEAN     
SUPER MODULATE  
SLICED UP       
DEEP CS StCHORUS
WALL OF FUZZTONE
NY LEAD MODULATE
LEZLY HEAVEN    
NOISY DUB       
TIGHT CRUNCH    
70s FUNKY CLEAN 
FLAGEOLETTO     
TERA FUNK       
FUNKY GROOVE    
TERA REV & COMP 
FUSION 335      
80s JAZZ FUSION 
MILD JAZZ       
JAZZ FIELD      
JAZZ SIMULATOR  
CLEAN SUSTAIN   
COMP CRUNCH LEAD
FULLERTN DRIVE  
UNMATCHED COMBO 
COUNTRY PICKIN' 
TWEED CLEAN
ClnTWIN SOUTHERN
SAFARI USA
MELLOW LEAD
RETRO TREMOLO

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от token_polyak

В прошивке мелькает весьма специфичная строка «GPVFN: Pure virtual fn called»

Ты точно ничего не напутал? В прошивках 1.08 и 1.09 нет даже слова «virtual».

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Оно чуть перемешано с другими символами:

00098890: 00f7 f031 f8d4 1100 0053 49ff 4750 5646  ...1.....SI.GPVF
000988a0: 4e3a 2050 ff75 7265 2076 6972 74ff 7561  N: P.ure virt.ua
000988b0: 6c20 666e 2063 df61 6c6c 6564 c132 46f8  l fn c.alled.2F.
token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от token_polyak

А, вот оно что. Я не пойму, а почему так много «битых» строк? Как так компилятор мог работать?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Там 0xFF или 0xDF после каждых 8 байт строки. Наверное, это должно что-то значить.

static_lab ★★★★★
()

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

Не знаю, может пригодятся сервисмануалы со схемами с этим чипом (как видите - все кейсы родственные - обработка звука) - мало ли, оттолкнетесь от схемы включения, найдете ему менее экзотического родственника:

https://music-electronics-forum.com/filedata/fetch?id=932182

http://www.rolandinfo.com.br/ctr/open/SERVICE%20NOTE/DVD-1%20A_I/ACS-PRO_LIVE.pdf

https://www.scribd.com/document/439042835/KTN100-KTN100-212-pdf

но шансы, полагаю, у вас нулевые и время тратить не стоит

vaddd ★☆
()
Ответ на: комментарий от vaddd

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

Однако на нём куча роландовских продуктов основана, судя по обилию принципиальных схем с ним.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Схемы старые, чип уже значит немодный, в продаже нет, даташитов не видно. Применение узкое, значит чип специализированный. Так что без детального описания структуры чипа и фужитсевского инструментария именно под этот чип знакомые буквочки и слова из прошивки или даже обрывки кода вряд ли что дадут для практического использования.

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

vaddd ★☆
()

Я лично вижу следующее:

  • Это почти наверняка не прошивка контроллера, а внешняя SPI Flash
  • Имеет некую структуру, состоит из нескольких «файлов» разного назначения
  • В начале нечно похожее на таблицу и код, скорее всего загрузчик
  • Начиная с 2000 и по 1BBB0 - 1 лежит файл сжатых данных, некий «Update» версии 1.001000, можно попробовать выкусить, пропустить кастомный заголовок и пройтись по нему gzip или LHA
  • С 1BBB0 таблица 64-битных чисел c FF-разделителями (или это 72-битные числа с FF в крайнем рязряде)
  • В районе 20400 эта таблица без четкой границы переходит в программный код, на глазок похож на ARM thumb, но не он (модификация?)
  • С 235A8 по 40000 - 1 свободное место.
  • С 40000 по 15BF40 - 1 снова архив, аналогичный 2000, но «Application» версии 1.090000, заканчивается тоже большим количеством несжатых данных и исполняемым кодом (большего, чем 2000 объема).
  • С 15BF40 много свободного места
  • С 1FE000 сильно разреженные данные с названиями эффектов, скорее всего параметры этих самых эффектов
  • С 331758 до конца пусто.
quwy
()
Ответ на: комментарий от quwy

Начиная с 2000 и по 1BBB0 - 1 лежит файл сжатых данных, некий «Update» версии 1.001000, можно попробовать выкусить, пропустить кастомный заголовок и пройтись по нему gzip или LHA

В адресах:

0000:2000
0004:0000

отличие для разных версий только в заголовке, а так весь код идентичен. Это говорит о том, что «загрузчики» абсолютно одинаковые, отличия только в Application.

Xintrea ★★★★★
() автор топика

ARM Thumb, адрес загрузки 0x00FFFFD0 (вернее, 0x1000000, но в файле заголовок размером 0x30).

Main() в 0x01000AE4.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

Интересно, надо теперь разобраться как дизассемблить.

Почему же binwalk не нашел армовских опкодов?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от ValdikSS

ARM Thumb, адрес загрузки 0x00FFFFD0 (вернее, 0x1000000, но в файле заголовок размером 0x30).
Main() в 0x01000AE4.

Что-то я тебя не понимаю. Размер файла всего 0x003F:FFFF.

А ты говоришь про адреса 0x00FF:FFD0, 0x100:0000 и 0x0100:0AE4.

Где-то есть какой-то заголовок, в котором в неизвестном мне формате расписано, какие блоки куда раскладываются в памяти?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Файл загружается в память, начиная с адреса 0x00FFFFD0, затем управление передаётся по адресу 0x01000AE4, то есть смещение в файле будет 0x01000AE4 - 0x00FFFFD0 = 0xB14.

static_lab ★★★★★
()

Ну, от файла прошивки, ты изначально получишь алгоритм Лемпеля-Зива. Как минимум. А потом - опять-же. LZ сжатый EXE, а точнее, самораспаковывающийся СОМ-образ. Который, как младенчик, как сцуко сперматозоид, входит через USB в адресное пространство проги. И начинает... =)

cadaber ★★
()
Последнее исправление: cadaber (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Файл загружается в память, начиная с адреса 0x00FFFFD0

Откуда взята эта информация?

Из этого комментария: Понять структуру бинарного файла прошивки - получить максимальную информацию (комментарий)

static_lab ★★★★★
()
Последнее исправление: static_lab (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Из заголовка файла.

https://developer.arm.com/documentation/dui0552/a/the-cortex-m3-processor/exception-model/vector-table

Стек начинается на 0x1011240, reset-вектор: 0x1000ae5

Нечётный адрес прыжка означает thumb-режим.

ValdikSS ★★★★★
()
Последнее исправление: ValdikSS (всего исправлений: 2)
Ответ на: комментарий от ValdikSS

Из заголовка файла.
https://developer.arm.com/documentation/dui0552/a/the-cortex-m3-processor/exc...
Стек начинается на 0x1011240, reset-вектор: 0x1000ae5

Я не понимаю, с чего ты взял, что в файле GT1ROM.BIN структура «Vector table» находится с адреса 0000:0030?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Догадался, благодаря опыту.

В таблице IRQ повторяющиеся адреса (так часто делают), в reset нечетный байт, выглядит, как типичный вектор. Загрузил в IDA, чтобы проверить предположение — всё выглядит корректно.

ValdikSS ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)