Вивчення прошивки на прикладі SCX-3200 7 версії Fix-free blog by Mo-skin
Безкоштовні прошивки
Вивчення прошивки на прикладі SCX-3200 7 версії
На численні прохання читачів пишу серію статей про формат прошивок принтерів.
Почнемо, мабуть, із найпростішого, практично з початку одноапаратних прошивок. SCX-3200. Починаючи з 8 версії, виробник почав застосовувати шифрування, тут же простий стиск gzip. Отже, нам знадобиться:



Ліричний відступ: 2 основні частини прошивки - завантажувач та ядро. Завантажувач перевіряє контрольну суму прошивки, розпаковує та запускає ядро. Тут же знаходиться примусовий режим та дебаг. Ядро – основна робоча програма принтера, реалізує функції друку, взаємодія з комп'ютером, мережеві протоколи та інші робочі процеси апарата.
Тепер настав час запустити Devel Studio. Додамо на форму кнопку та створимо для неї подію «Клік»


З цього моменту починається програмування. Пишемо наступний код:
Компілюємо та запускаємо (F9 ), натискаємо нашу єдину кнопку. Якщо шляхи до файлів прописані правильно і помилок не виникає – бачимо повідомлення «ОК». Файл 'D:\kernel.hd ', що з'явився, і є наше розпаковане ядро.
У ньому можна знайти серійний номер.

Усміхаємося, і уявляємо, як ці знання ще кілька років тому могли вас значно збагатити.
Тепер завантажимо ядро в ІДУ і трошки дизасемблуємо. Вибираємо процесор ARMB (big endian):


Далі в менюOptions ->General ->Analysis ->Kernel options 1 ставимо галкуMake final analysis pass ->OK ->Reanalyze program Кілька хвилин куримо. Поки йде процес аналізу коду, скажу вам, що вірити Іде на 100% не можна, іноді вона помилково приймає дані за код і навпаки. І часто додумує зайві конструкції, що ускладнює розуміння коду. Краще запускати досліджувані функції в емуляторі та дивитися, що відбувається з регістрами та пам'яттю. Але все-таки загальну картину зрозуміти можна значно швидше за допомогою Іди.

Серійний номер зчитується з прошивки під час виконання 0x400C768C і передається через R0 у функцію sub_400DBF70, яка перевіряє його, і у разі відповідності пише R0 = 0.
ROM:400C769C CMP R0, #0 Тут порівняння R0 з нулем, власне, те місце, де зміною пари байт можна зробити багатоапаратну прошивку.
На цьому поки що все, чекайте продовження. Якщо ви не розумієте всього сказаного вище, то лізти в цю тему сенсу немає - далі ще складніше.
3 thoughts on " Вивчення прошивки на прикладі SCX-3200 7 версії "
Паліть, шановний Mo-skin! є варіант спробувати розколупати прошивку від 3010 року, розпакувати ядро вдалося, зараз вивчаю. Якщо взяти шматок 1С-0015CAF6 з файлу R1XRM_ES_020002.brn і прогнати через gzip - отримаємо ядро в якому багато цікавого. Наприклад, що в ядрі є згадки про факс, сканер, мережу, кольорові картриджі та інше, наводить на думку, що це обрубок деякого кольорового мфу.