#1 [08.11.09, 12:41] F.A.Q по портированию замэйновых патчей
Написал статью для начинающих патчеров
Портирование патча, который ставится в за-main'не
Нам понадобится: 1) IDA Pro Advanced 5.2 2) Main-файл прошивки на которую есть патч(w660_r8bb001) и Main-файл прошивки под которую будем портировать патч(k550_r6bc002) 3) patsearchnt 4) 2 Idc файла (для применения/отката патча в IDA Pro Advanced) 5) babe2raw(именно она, т.к main2raw иногда, конвертирует с корявыми адресами) 6) компилятор от den_po (да, да именно им)
начнём:
1 этап) // Создание исходника
Конвертируем обе прошивки в .raw - формат
Берем патч
Патч:
;W660 R8BB001 ;Ability to minimize the window admission / transfer files via Bluetooth ;Ver 1.3 (stability fix) ;(c) Joker XT ;(p) Adow
Открываем прошивку w660_r8bb001 в IDA Pro Advanced 5.2, переводим в Tumb-режим, ставим 4 в пункте number of opcode bytes и т.д(обьяснять как это делать не буду, не чайники) Применяем патч на прошивку с помошью ApplyPatch.idc (File=>idc file...) и так, берем первый адрес f0148a: E069 B047 к f0148a прибавляем оффсет +44000000(в патче указан именно этот) получаем 44F0148A - переходим по нему, видим это
Теперь нажимаем кнопку "С" - бобежали циферки
Нам нужна всего лишь одна строка ROM:44F0148A B0 47 BLX R6 создаем простой текстовой-файл первой строчкой вписываем include "x.inc" а ниже, копируем нашу строку, только в таком виде:
org 0x44F0148A BLX R6
возьмем второй адрес 44F014C8(+44000000) открываем его и видим это
сразу видно - это адрес:
Код:
ROM:44F014C8 01 DCB 1 ROM:44F014C9 10 DCB 0x10 ROM:44F014CA CE DCB 0xCE ; + ROM:44F014CB 45 DCB 0x45 ; E
Нажимаем кнопку "D" 3 раза и получаем это
ROM:44F014C8 01 10 CE 45 DCD unk_45CE1001 переделываем так org 0x44F014C8 DCD 0x45CE1001
1ce1000+44000000=45CE1000 переходим по адресу 45CE1000 и видим такое
нажимаем "С" на всех желтых адресах ниже, до тех пор, пока не пойдут нули... Обратите внимание, Код:
ROM:45CE1066 FF DCB 0xFF ROM:45CE1067 FF DCB 0xFF
подобные адреса мы не трогаем, пока что... Теперь выделяем весь наш код(от адреса ROM:45CE1000 до ROM:45CE1098) Нажимаем File => Produce file => Create asm file... и сохраняем в удобное место. Теперь открываем его текстовым редактоом и в самый вверх вставляем нашу раннюю заготовку:
; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: Mach EDV Dienstleistungen, Jan Mach, 1 user, adv, 11/2007 | ; +-------------------------------------------------------------------------+ ;
После всех loc_XXXXXXXX ставим ":" т.е loc_45CE1006: и т.д Все # нужно удалить, чтобы сделать быстро, нажимаем Ctrl+H в поле Что: ставим # поле Чем: оставляем пустым, заменяем всё Все ADDS превращаем в ADD Все MOVS превращаем в MOV Все SUBS превращаем в SUB Все ADR превращаем в adr (если таковые есть) Теперь наще DCB 0xFF DCB 0xFF все loc_XXXXXXXX+1, sub_XXXXXXXX+1 меняем на 0xXXXXXXXX+1 пример: 0x453E9488+1 заменяем на выравнивание align 4 Для "красоты" все адреса выносятся перед началом "тела исходника" т.е делаем так:
перед самым началом "тела исходника" пишем org 0x45A6C350 CODE16
где org 0x45A6C350 - это адрес, откуда пойдет "тело" нашего патча
Наш исходник готов
Этап 4) // портирование
Откроем прошивку k550_r6bc002 в другом окне(с помощью IDA Pro Advanced 5.2) так же переведём в tumb-режим, только патч устанавливать не надо.
Берём первый адрес из исходника
0x44F0148A
открываем его в прошивке w660_r8bb001(переоткройте её или откатите установленный патч)
Самый лучший и безошибочный способ нахождения адресов - создание паттерна(паттерн - кусок кода прошивки) Выделяем примерно 26 строк начиная с адреса 0x44F0148A
Копируем этот кусок, открываем patsearchnt, удаляем старый паттерн в окне и вставляем наш, Ставим стартовый адрес начала main'а(0x44140000 SE) нажимаем load ff и указываем main-файл прошивки k550_r6bc002 в .raw формате жмем Convert Теперь, что касается паттерна:
Код:
??,69 ??,1C ??,??,??,01 ??,??,??,FA[code]
в нём присутствуют как 2-х байтные, так и 4-x байтные строки 4-x байтные строки мы всегда заменяем на ??,??,??,?? т.е будет так:
[code]??,69 ??,1C ??,??,??,?? ??,??,??,??
ок, разобрались, нажимаем Search - ура, адрес найден - 44DB715A
Что касается вот этого адреса: org 0x44F033B8 PUSH {R4-R6,LR} LDR R0, 0x44F0344C BLX R0 org 0x44F0344C off_44F0344C DCD 0x45CE1016+1
делаем так: находим 0x44F033B8 в прошивке w660_r8bb001 портируем его на k550_r6bc002 получаем 0x44DB9110 находим 0x44F0344C в прошивке w660_r8bb001 портируем его на k550_r6bc002 получаем 0x44DB91A8 находим 0x45CE1016+1 как находим? - ищем 0x45CE1016 в прошивке w660_r8bb001 - это за main'овый адрес, я расчитываю его для своего места и получаю 0x45A6C366 и прибавляю 1 0x45A6C366+1 В патче присутствуют текстовые метки 0x668 с помошью LNGEditor находим id метки в языковом файле w660_r8bb001(0x668) Свернуть теперь ишем такое название в языковом файле k550_r6bc002 и находим 0x114C
и так ищем все остальные адреса, после того, как мы портировали всё, у нас должно получиться так:
Рапаковываем компилятор от den_po в любую папку, у меня это D:\armpc2\ Кладём туда main-файл прошивки k550_r6bc002 в .raw - формате, наш исходник, называем его Untitled1 Открываем Командную строку и вписываем такую команду:
нажимаем выполнить и получаем скомпилированный патч.
Патч:
;K550 SW-R6BC002 ;Возможность сворачивать окно приёма/передачи файлов по Bluetooth etc ;Ver 1.3 ;(c) Joker XT ;(p) SEVENI
Не всегда так всё легко, байты могут не совпадать, разные ошибки. По всем вопросам писать в тему Спасибо Arthur Oganyan, за выкладывание материала Автор F.A.Q.: SEVENI
#2 [08.04.10, 23:32] Re: F.A.Q по портированию замэйновых патчей
А что делать если после отката патча, надо портировать замейновые адреса, а они там нулевые, тоесть соответствующий адрес в другой прошивке найти нельзя через Patsearchnt???
#3 [08.04.10, 23:45] Re: F.A.Q по портированию замэйновых патчей
BlackSerh, он не это имел ввиду) makzim, такие адреса оставляй как есть, не надо loc_ на 0х менять! Если конкретно по мануалу, то такой адрес: Код:
addr9 = 0x45CE104A+1
лучше так: loc_45CE104A+1 Потому что этот адрес ведет в сам патч!
Sony Xperia XZ3 Green Sony Xperia Z3 Compact Orange W995i SW-R1GA026 :(
makzim
Новичок
Регистрация: 6.3.09 Сообщений: 20 Репутация: -5
#4 [08.04.10, 23:52] Re: F.A.Q по портированию замэйновых патчей
D3mon пишет: BlackSerh, он не это имел ввиду) makzim, такие адреса оставляй как есть, не надо loc_ на 0х менять! Если конкретно по мануалу, то такой адрес: Код:
addr9 = 0x45CE104A+1
лучше так: loc_45CE104A+1 Потому что этот адрес ведет в сам патч!
Как раз таки это и имел :) Спс... Просто я не уверен был, ставить любые замейновые или все таки каким то образом искать соответствующие... :) А что по мануалу loc_ и sub_ можно не менять? кстати, а у меня еще есть и unk_504830D с ним надо что нибудь делать?
Регистрация: 27.4.10 Сообщений: 171 Репутация: 1282 Откуда: Россия
#9 [30.07.10, 15:02] Re: F.A.Q по портированию замэйновых патчей
Therion, я пробовал заменить эти DCB 0xC0 DCB 0x46 значения на align 4, но из за этого у меня почему патч неправильно компилился, вот DCB 0xFF DCB 0xFF я заменил этим align 4, вот исходник у меня сейчас нормально компилится и полученный патч абсолютно идентичен оригиналу, и в нем я уже смысла нет ковырятся, мне вот только осталось адреса портануть, почему иногда через patsearchnt не находит адрес? выделяй хоть много хоть мало кода все равно не находит
Добавлено 30.7.10 15:22
Therion, да в этом то нет проблем, проблемы при портировании, первый раз портанул все адреса и в патче не хватало 4 байтов, я скопировал их с оригинала w610, залил этот патч но везде в инфе о файле ребуты
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.