In Real English

то что я так давно обещал:

Инструкция по адаптации моих (и не только) патчей для других прошивок (как это делаю я)

Часть 1

Для адаптации нам понадобится следующие программы: IDA 4.30 & PATSearch.

Приступим:

Сначала научимся загружать ФФ в IDA (все применительно для ФФ C/M/S35):

  1. File -> OpenFile, выбираем файл с нашим ФФ.

  2. "Load a new file": Processor type -> Siemens C166: c166 ->Set; LoadFile ->Binary file; Options -> Load as code segment

  3. "Disassembly memory organization": RAM -> Create RAM section; RAM start address 0x0; RAM size 0x200000 (на картинке ошибка); ROM -> Create ROM Section; ROM start address 0xC00000; ROM Size 0x400000; Input File -> Loading address 0xC00000

  4. View -> OpenSubview -> Segments Удалим все сегменты кроме RAM и ROM.

  5. Расширим сегмент RAM до 0x200000

  6. Дважды кликнув на сегмент ROM переходим в его начало, нажимаем Ctrl+Shift+PageDown выделяем весь сегмент, нажимаем "C" для преобразования в код и отвечаем "Force"

  7. Идем курить и пить кофе, будет небольшой тормоз, а затем анализ кода, ждем когда загорится зеленый сигнал :)


Теперь попытаемся перенести патч на примере переноса патча Indifferent Logo с C35 1804 на C35 2404

;Patch: Indifferent Logo
;Firmware: C/M35 1804
;Release: 26.07.04
;Author: BoBa!®

;Исправляем глюк с СИМкой с прописанным именем оператора===========
0x26F734: 48802D02E13C0D01E12CF016F1C2 DAC1E4D608413D0948802D0DE13C

;Лого в роуменге===================================================
0x01D7FE: 3D03 CC00

;Лого с любой СИМкой===============================================
0x01D7E4: 3D10 CC00

  1. Загружаем ФФ C35 1804 в IDA

  2. Включим вывод кодов операции: Option -> General ->Disassembly -> Display disassembly line parts -> Number of opcode bytes -> 4

  3. Переходим в IDA по адресу патча "Лого в роуменге" (клавиша "G"). Напомню что адрес в патче это адрес в файле ФФ. ИДА же работает с адресным пространством процессора, а значит нужно к адресу в патче добавить адрес загрузки ФФ (для C35 это 0xC00000). Получаем адрес 0xC1D7FE (В ИДЕ все адреса шестнадцатеричные и по этому префикс "0x" не нужен) и нашу строку условного перехода который мы и патчим:

    у Вас может немного отличаться, т.к. я использую уже частично разобранную базу.

  4. Выделяем произвольный кусок кода вокруг нашего патча:

  5. Вставляем в PATSearch, нажимаем "GO"

    получаем адрес C1DF98

  6. Загружаем в ИДУ ФФ C35 2404

  7. переходим по адресу C1DF98, и видим абсолютно такой же кусок кода:

    в том числе и нашу команду условного перехода которую мы патчим:

  8. а значит результат это патч для 2404 (не забываем отнять 0xC00000):
    ;Лого в роуменге===================================================
    0x01DFAA: 3D03 CC00

Вот и все... кто говорил что это сложно?

Д/З №1 патч "Лого с любой СИМкой" попробуйте адаптировать самостоятельно


©BoBa!® 2004


Обновлено: 29.06.2007
Copyright by BoBa!®