Нам понадобится:1) IDA 5.2
2) Pattsearch
3) Ida_cxcloader
4) read3150_0.5
5) патч
6) Компилятор от den_po
7) 2 idc-файла для применения/отката патча на phone_app.cxc
8) main прошивки на которую есть патч (W595_R3EA037) и main прошивки на которую будем портировать патч (W760_R3CA033)
я приведу пример портирования патча
с W595_R3EA037 на W760_R3CA033
1) загрузка прошивки:первым делом, нам нужно правильно загрузить обе прошивки в
IDAдля этого воспользуемся следующим:
кладём
cxcldr.ldw в
IDA/loadersкиаем оба
main-файла прошивок на
read3150.exe по очереди
в полученных каталогах с именем прошивок находим
phone_app.cxcтеперь открываем
IDAFile/open (в типах файлов ставим all files) и открываем
phone_app.cxc от прошивки
W595_R3EA037 в окне загрузки мы нажимаем Set и Ok ждем загрузки
далее переводим прошивку в
Thumb-режим (Alt+G=T, value 1)
и настраиваем отображение байт
Options/general/Disassembly/Number of opcode bytes ставим 4
переходим на вкладку analysis/Processor specific analysis options и ставим галку на пункте Disable pointer dereferencing, нажимаем Reanalyse program и Ok запускаем
IDA ещё раз и проводим аналогичную операцию с
phone_app.cxc от прошивки
W760_R3CA033и так, переходим в окно с
phone_app.cxc от прошивки
W595_R3EA0372) создание исходника:применяем патч на прошивку (File/IDC file.../Applypatch.idc)
и переходим по первому адресу патча("G") -
10dc11a8нажимаем
"C" - побежали циферки
нам нужен
код 2-х байт 401C - смотрим напротив их это
ADDS R0, R0, #1 создаем текстовый файл и записываем первой строкой
include "x.inc", далее расписываем первую врезку
Код:
include "x.inc"
org 0x10dc11a8
ADDS R0, R0, #1
аналогично переходим по второму адресу патча
10dc14a0 здесь нам
нужен код 12-ти байт 00B50149884700BDE1D06C12т.е это будет
Код:
PUSH {LR}
LDR R1, off_10DC14A8
BLX R1
POP {PC}
off_10DC14A8 DCD loc_126CD0E0+1
оформляем 2-ю врезку:
аналогично преобразовываем 3-й, 4-й и 5-й адрес, получаем
include "x.inc"
org 0x10dc11a8
ADDS R0, R0, #1
org 0x10dc14a0
PUSH {LR}
LDR R1, off_10DC14A8
BLX R1
POP {PC}
off_10DC14A8 DCD loc_126CD0E0+1
org 0x10dc14cc
PUSH {LR}
LDR R1, off_10DC14D4
BLX R1
POP {PC}
off_10DC14D4 DCD loc_126CD12C+1
org 0x10dc1636
MOVS R2, #9
org 0x10e647a2
CMP R2, #0xA
BCS loc_10E647AA
MOVS R2, #0xA
теперь мы переходим в тело патча,
берем начальный адрес тела патча и записываем его аналогично врезке и добавляем
Thumb-режим CODE16 (не обязательно)
include "x.inc"
org 0x10dc11a8
ADDS R0, R0, #1
org 0x10dc14a0
PUSH {LR}
LDR R1, off_10DC14A8
BLX R1
POP {PC}
off_10DC14A8 DCD loc_126CD0E0+1
org 0x10dc14cc
PUSH {LR}
LDR R1, off_10DC14D4
BLX R1
POP {PC}
off_10DC14D4 DCD loc_126CD12C+1
org 0x10dc1636
MOVS R2, #9
org 0x10e647a2
CMP R2, #0xA
BCS loc_10E647AA
MOVS R2, #0xA
org 0x126cd0e0
CODE16
переходим по адресу
126cd0e0 в прошивке и нажимаем
"C" на всех
жёлтых адресах ниже,
пока не пойдёт пустота:
Код:
DCB 0
DCB 0
DCB 0
DCB 0
т.е наше тело патча - это кусок кода с адреса
126cd0e0 до адреса 126CD168 - выделяем, нажимаем
File/Produce file/create ASM file и сохраняем в удобное место
открываем наш полученный asm-файл
;
; +-------------------------------------------------------------------------+
; | 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_126CD0E0 ; CODE XREF: ROM:10DC14A4j
; DATA XREF: ROM:off_10DC14A8o
CMP R0, #0x14
BCS loc_126CD0E8
MOVS R0, #0
BX LR
; ---------------------------------------------------------------------------
loc_126CD0E8 ; CODE XREF: ROM:126CD0E2j
CMP R0, #0x1E
BCS loc_126CD0F0
MOVS R0, #1
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F0 ; CODE XREF: ROM:126CD0EAj
CMP R0, #0x28
BCS loc_126CD0F8
MOVS R0, #2
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F8 ; CODE XREF: ROM:126CD0F2j
CMP R0, #0x32
BCS loc_126CD100
MOVS R0, #3
BX LR
; ---------------------------------------------------------------------------
loc_126CD100 ; CODE XREF: ROM:126CD0FAj
CMP R0, #0x3C
BCS loc_126CD108
MOVS R0, #4
BX LR
; ---------------------------------------------------------------------------
loc_126CD108 ; CODE XREF: ROM:126CD102j
CMP R0, #0x46
BCS loc_126CD110
MOVS R0, #5
BX LR
; ---------------------------------------------------------------------------
loc_126CD110 ; CODE XREF: ROM:126CD10Aj
CMP R0, #0x50
BCS loc_126CD118
MOVS R0, #6
BX LR
; ---------------------------------------------------------------------------
loc_126CD118 ; CODE XREF: ROM:126CD112j
CMP R0, #0x5A
BCS loc_126CD120
MOVS R0, #7
BX LR
; ---------------------------------------------------------------------------
loc_126CD120 ; CODE XREF: ROM:126CD11Aj
CMP R0, #0x64
BCS loc_126CD128
MOVS R0, #8
BX LR
; ---------------------------------------------------------------------------
loc_126CD128 ; CODE XREF: ROM:126CD122j
MOVS R0, #9
BX LR
; ---------------------------------------------------------------------------
loc_126CD12C ; CODE XREF: ROM:10DC14D0j
; DATA XREF: ROM:off_10DC14D4o
CMP R0, #8
BHI loc_126CD166
ADR R1, loc_126CD138
LDRB R1, [R1,R0]
ADD PC, R1
; ---------------------------------------------------------------------------
NOP
loc_126CD138 ; DATA XREF: ROM:126CD130o
LSRS R2, R1, #0x18
ASRS R2, R2, #0x18
SUBS R2, R3, #0
MOVS R6, #0x22
LSLS R2, R5, #0
MOVS R0, #0xA
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x14
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x1E
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x28
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x32
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x3C
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x46
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x50
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x5A
BX LR
; ---------------------------------------------------------------------------
loc_126CD166 ; CODE XREF: ROM:126CD12Ej
MOVS R0, #0x64
BX LR
; ---------------------------------------------------------------------------
удаляем шапку и комментарии, получаем:
; ---------------------------------------------------------------------------
loc_126CD0E0
CMP R0, #0x14
BCS loc_126CD0E8
MOVS R0, #0
BX LR
; ---------------------------------------------------------------------------
loc_126CD0E8
CMP R0, #0x1E
BCS loc_126CD0F0
MOVS R0, #1
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F0
CMP R0, #0x28
BCS loc_126CD0F8
MOVS R0, #2
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F8
CMP R0, #0x32
BCS loc_126CD100
MOVS R0, #3
BX LR
; ---------------------------------------------------------------------------
loc_126CD100
CMP R0, #0x3C
BCS loc_126CD108
MOVS R0, #4
BX LR
; ---------------------------------------------------------------------------
loc_126CD108
CMP R0, #0x46
BCS loc_126CD110
MOVS R0, #5
BX LR
; ---------------------------------------------------------------------------
loc_126CD110
CMP R0, #0x50
BCS loc_126CD118
MOVS R0, #6
BX LR
; ---------------------------------------------------------------------------
loc_126CD118
CMP R0, #0x5A
BCS loc_126CD120
MOVS R0, #7
BX LR
; ---------------------------------------------------------------------------
loc_126CD120
CMP R0, #0x64
BCS loc_126CD128
MOVS R0, #8
BX LR
; ---------------------------------------------------------------------------
loc_126CD128
MOVS R0, #9
BX LR
; ---------------------------------------------------------------------------
loc_126CD12C
CMP R0, #8
BHI loc_126CD166
ADR R1, loc_126CD138
LDRB R1, [R1,R0]
ADD PC, R1
; ---------------------------------------------------------------------------
NOP
loc_126CD138
LSRS R2, R1, #0x18
ASRS R2, R2, #0x18
SUBS R2, R3, #0
MOVS R6, #0x22
LSLS R2, R5, #0
MOVS R0, #0xA
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x14
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x1E
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x28
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x32
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x3C
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x46
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x50
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x5A
BX LR
; ---------------------------------------------------------------------------
loc_126CD166
MOVS R0, #0x64
BX LR
; ---------------------------------------------------------------------------
теперь добавляем нашу первую часть исходника(врезки)
include "x.inc"
org 0x10dc11a8
ADDS R0, R0, #1
org 0x10dc14a0
PUSH {LR}
LDR R1, off_10DC14A8
BLX R1
POP {PC}
off_10DC14A8 DCD loc_126CD0E0+1
org 0x10dc14cc
PUSH {LR}
LDR R1, off_10DC14D4
BLX R1
POP {PC}
off_10DC14D4 DCD loc_126CD12C+1
org 0x10dc1636
MOVS R2, #9
org 0x10e647a2
CMP R2, #0xA
BCS loc_10E647AA
MOVS R2, #0xA
org 0x126cd0e0
CODE16
; ---------------------------------------------------------------------------
loc_126CD0E0
CMP R0, #0x14
BCS loc_126CD0E8
MOVS R0, #0
BX LR
; ---------------------------------------------------------------------------
loc_126CD0E8
CMP R0, #0x1E
BCS loc_126CD0F0
MOVS R0, #1
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F0
CMP R0, #0x28
BCS loc_126CD0F8
MOVS R0, #2
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F8
CMP R0, #0x32
BCS loc_126CD100
MOVS R0, #3
BX LR
; ---------------------------------------------------------------------------
loc_126CD100
CMP R0, #0x3C
BCS loc_126CD108
MOVS R0, #4
BX LR
; ---------------------------------------------------------------------------
loc_126CD108
CMP R0, #0x46
BCS loc_126CD110
MOVS R0, #5
BX LR
; ---------------------------------------------------------------------------
loc_126CD110
CMP R0, #0x50
BCS loc_126CD118
MOVS R0, #6
BX LR
; ---------------------------------------------------------------------------
loc_126CD118
CMP R0, #0x5A
BCS loc_126CD120
MOVS R0, #7
BX LR
; ---------------------------------------------------------------------------
loc_126CD120
CMP R0, #0x64
BCS loc_126CD128
MOVS R0, #8
BX LR
; ---------------------------------------------------------------------------
loc_126CD128
MOVS R0, #9
BX LR
; ---------------------------------------------------------------------------
loc_126CD12C
CMP R0, #8
BHI loc_126CD166
ADR R1, loc_126CD138
LDRB R1, [R1,R0]
ADD PC, R1
; ---------------------------------------------------------------------------
NOP
loc_126CD138
LSRS R2, R1, #0x18
ASRS R2, R2, #0x18
SUBS R2, R3, #0
MOVS R6, #0x22
LSLS R2, R5, #0
MOVS R0, #0xA
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x14
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x1E
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x28
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x32
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x3C
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x46
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x50
BX LR
; ---------------------------------------------------------------------------
MOVS R0, #0x5A
BX LR
; ---------------------------------------------------------------------------
loc_126CD166
MOVS R0, #0x64
BX LR
; ---------------------------------------------------------------------------
3) редактирование исходника:редактируем наш исходник при помощи обычного текстового редактора:
все
"#" удаляем (Ctrl+H) в поле
"Что?" вставляем
#, поле
"Чем?" оставляем пустым
нажимаем
заменить всёадреса типа
"DCD loc_126CD0E0+1" преобразовываем в
"DCD 0x126CD0E0+1"Все команды
MOVS, LSRS, SUBS, LSLS, ASRS и т.д заменяем на
MOV, LSR, SUB, LSL, ASRпосле ссылок, типа
loc_126CD0E0, loc_126CD0E8 ставим
":" т.е у нас получится
loc_126CD0E0:, loc_126CD0E8:, у всех
ADR меняем регистр на
adrи так, у нас получился готовый исходник
include "x.inc"
org 0x10dc11a8
ADD R0, R0, 1
org 0x10dc14a0
PUSH {LR}
LDR R1, off_10DC14A8
BLX R1
POP {PC}
off_10DC14A8 DCD 0x126CD0E0+1
org 0x10dc14cc
PUSH {LR}
LDR R1, off_10DC14D4
BLX R1
POP {PC}
off_10DC14D4 DCD 0x126CD12C+1
org 0x10dc1636
MOV R2, 9
org 0x10e647a2
CMP R2, 0xA
BCS 0x10E647AA
MOV R2, 0xA
org 0x126cd0e0
CODE16
; ---------------------------------------------------------------------------
loc_126CD0E0:
CMP R0, 0x14
BCS loc_126CD0E8
MOV R0, 0
BX LR
; ---------------------------------------------------------------------------
loc_126CD0E8:
CMP R0, 0x1E
BCS loc_126CD0F0
MOV R0, 1
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F0:
CMP R0, 0x28
BCS loc_126CD0F8
MOV R0, 2
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F8:
CMP R0, 0x32
BCS loc_126CD100
MOV R0, 3
BX LR
; ---------------------------------------------------------------------------
loc_126CD100:
CMP R0, 0x3C
BCS loc_126CD108
MOV R0, 4
BX LR
; ---------------------------------------------------------------------------
loc_126CD108:
CMP R0, 0x46
BCS loc_126CD110
MOV R0, 5
BX LR
; ---------------------------------------------------------------------------
loc_126CD110:
CMP R0, 0x50
BCS loc_126CD118
MOV R0, 6
BX LR
; ---------------------------------------------------------------------------
loc_126CD118:
CMP R0, 0x5A
BCS loc_126CD120
MOV R0, 7
BX LR
; ---------------------------------------------------------------------------
loc_126CD120:
CMP R0, 0x64
BCS loc_126CD128
MOV R0, 8
BX LR
; ---------------------------------------------------------------------------
loc_126CD128:
MOV R0, 9
BX LR
; ---------------------------------------------------------------------------
loc_126CD12C:
CMP R0, 8
BHI loc_126CD166
adr R1, loc_126CD138
LDRB R1, [R1,R0]
ADD PC, R1
; ---------------------------------------------------------------------------
NOP
loc_126CD138:
LSR R2, R1, 0x18
ASR R2, R2, 0x18
SUB R2, R3, 0
MOV R6, 0x22
LSL R2, R5, 0
MOV R0, 0xA
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x14
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x1E
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x28
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x32
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x3C
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x46
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x50
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x5A
BX LR
; ---------------------------------------------------------------------------
loc_126CD166:
MOV R0, 0x64
BX LR
; ---------------------------------------------------------------------------
4) портирование исходника:осталось только портировать адреса на
W760_R3CA033отменяем патч на
phone_app.cxc от прошивки
W595_R3EA037открываем
pattsearch нажимаем
load ff и выбираем
phone_app.cxc от прошивки
W760_R3CA033в праврм верхнем углу программы указываем базу загрузки, в данном случае
0xFFFE000теперь снова переходим по первому адресу патча в
phone_app.cxc от прошивки
W595_R3EA037нажимаем
"С" и выделяем не большой кусок кода, вставляем в окно
pattsearch и нажимаем
convert - мы создали паттерн
теперь все
4-х байтные строки паттерна мы заменяем на Код:
??,??,??,?? т.е ??,??,??,FD => ??,??,??,??
и т.д
нажимаем
Search и в правом окне программы, получаем адрес
1191FD7C - это адрес 1-й врезки на прошивку W760_R3CA033
двигаемся ниже - получаем адрес
11920070 - это адрес 2-й врезки на прошивку W760_R3CA033
не забываем про то, что адреса в коде тоже нужно портировать
так выглядит врезка на W595_R3EA037:
Код:
org 0x10dc14a0
PUSH {LR}
LDR R1, off_10DC14A8
BLX R1
POP {PC}
off_10DC14A8 DCD 0x126CD0E0+1
а вот так на W760_R3CA033:
Код:
org 0x1191FD7C
PUSH {LR}
LDR R1, off_11920078
BLX R1
POP {PC}
off_11920078 DCD 0x126CD0E0+1
DCD 0x126CD0E0+1 - это адрес ссылающийся на замэйн(в данном случае, с него пойдет замэйн)
двигаемся далее и в конце концов у нас получается готовый исходник с адресами на W760_R3CA033
include "x.inc"
org 0x1191FD7C
ADD R0, R0, 1
org 0x11920070
PUSH {LR}
LDR R1, off_11920078
BLX R1
POP {PC}
off_11920078 DCD 0x126E78F0+1
org 0x1192009C
PUSH {LR}
LDR R1, off_119200A4
BLX R1
POP {PC}
off_119200A4 DCD 0x126E793C+1
org 0x119201EA
MOV R2, 9
org 0x119D9A06
CMP R2, 0xA
BCS 0x119D9A0E
MOV R2, 0xA
org 0x126E78F0
CODE16
; ---------------------------------------------------------------------------
loc_126CD0E0:
CMP R0, 0x14
BCS loc_126CD0E8
MOV R0, 0
BX LR
; ---------------------------------------------------------------------------
loc_126CD0E8:
CMP R0, 0x1E
BCS loc_126CD0F0
MOV R0, 1
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F0:
CMP R0, 0x28
BCS loc_126CD0F8
MOV R0, 2
BX LR
; ---------------------------------------------------------------------------
loc_126CD0F8:
CMP R0, 0x32
BCS loc_126CD100
MOV R0, 3
BX LR
; ---------------------------------------------------------------------------
loc_126CD100:
CMP R0, 0x3C
BCS loc_126CD108
MOV R0, 4
BX LR
; ---------------------------------------------------------------------------
loc_126CD108:
CMP R0, 0x46
BCS loc_126CD110
MOV R0, 5
BX LR
; ---------------------------------------------------------------------------
loc_126CD110:
CMP R0, 0x50
BCS loc_126CD118
MOV R0, 6
BX LR
; ---------------------------------------------------------------------------
loc_126CD118:
CMP R0, 0x5A
BCS loc_126CD120
MOV R0, 7
BX LR
; ---------------------------------------------------------------------------
loc_126CD120:
CMP R0, 0x64
BCS loc_126CD128
MOV R0, 8
BX LR
; ---------------------------------------------------------------------------
loc_126CD128:
MOV R0, 9
BX LR
; ---------------------------------------------------------------------------
loc_126CD12C:
CMP R0, 8
BHI loc_126CD166
adr R1, loc_126CD138
LDRB R1, [R1,R0]
ADD PC, R1
; ---------------------------------------------------------------------------
NOP
loc_126CD138:
LSR R2, R1, 0x18
ASR R2, R2, 0x18
SUB R2, R3, 0
MOV R6, 0x22
LSL R2, R5, 0
MOV R0, 0xA
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x14
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x1E
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x28
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x32
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x3C
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x46
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x50
BX LR
; ---------------------------------------------------------------------------
MOV R0, 0x5A
BX LR
; ---------------------------------------------------------------------------
loc_126CD166:
MOV R0, 0x64
BX LR
; ---------------------------------------------------------------------------
5) компиляция:распаковываем компилятор от
den_po в любую удобную папку(у меня это D:\armpc2)
кладем туда
phone_app.cxc от прошивки W760_R3CA033 и наш исходник(для удобства, я назвал его Untitled1.asm)
Открываем
Пуск/Выполнить и вводим такую строку
Код:
D:\armpc2\make.bat Untitled1.asm phone_app.cxc FFFE000 v.info>log.txt
нажимаем Enter и получаем патч в папке с компилятором
Не всегда адреса находятся так легко, могут возникнуть проблеммы с созданием исходника и т.д
но Практика оправдывает своё название
Автор F.A.Q.: SEVENIСпециально для ресурса
supertrubka.org