TUTORIAL PARA PORTAR PARCHES COMPLEJOS (ASSEMBLING BASICO)
Este será el tema para Discutir sobre el tutorial:
Crear / Portar parches VKP complejos
Expongan todas sus dudas aqui.
Saludos
Versión para imprimir
TUTORIAL PARA PORTAR PARCHES COMPLEJOS (ASSEMBLING BASICO)
Este será el tema para Discutir sobre el tutorial:
Crear / Portar parches VKP complejos
Expongan todas sus dudas aqui.
Saludos
:eek::eek::eek: la verdad solo lei el primer parrafo, apoco es tan complegisimo portar un patch?? nunca lo pense, creo que es mas facil crear el patch para el firmware corespondiente que portar uno de otro firmware!!
pues gracias man, muy completo tu tuto!!
saludos!;)
Ya era hora de de que se tradusca ese tutorial... ja ja
@Karl05
Recien empiezo con esto de portar parches y no se si estoy en lo correcto en decir que:
Mientras mas variedades del mismo parche a portar tengamos es mas facil el proceso.
Algunos firmwares tienen cadenas similares a otros, y se puede optar por el que nos resulte mas "similar"
Un ejemplo podria ser el que esta en este tema:
Portando Parches... (Parece como si hubieras contestado mi pregunta)
Alli se ve la similitud del parche del W810 R4EA031 con el Firmware a portar (W200 R4HA014)
Ademas no dijiste que los archivos ApplyPatch.idc y UndoPatch.idc Tienen que copiarlo en la carpeta idc dentro de la carpeta donde se instalo el IDA por defecto C:\Archivos de programa\IDA\idc)
Excelente Felicidades estare poniendolo en practica y te hago saber mis dudas, tambien estaria bueno un tuto mas avanzado para portar parches como el confidentiality
saludos
muchas gracias por el tutorial con esto ya podre crear parches dificiles jaja.
oye saves si con este se puede crear un parche para cambiar el logo de operador?
Seria bueno que subas un link con los programas necesarios
Aca les dejo un link para:
FASMARM:http://jokerxt.3dn.ru/files/armpc.rar
IDC scripts: http://jokerxt.3dn.ru/files/idc.rar
Smelter: http://avkiev.kiev.ua/Siemens/Smelter/Smelter.rar (agan un click derecho y selecciones guradar como)
IDA: 4shared.com - online file sharing and storage - download IDA PRO 5.0.0.879.rar
Excelente aporte Karl05.Me solucionaste el problema de leer en ingles!ahora no tienen excusas para no aprender, eh?
Hola, vaya como que me leiste la mente! hoy me pase todo el dia viendo estos tutoriales para intentar aprender a portar, esta muy bueno el tutorial amigo, felicidades, lo voy a Adherir.
Ahora mi pregunta, porque me sale este error al querer abrir el Smelter.exe?
http://img260.imageshack.us/img260/6...bujoyh5.th.jpg
Saludos
porque te falta el archivo comdlg32.ocx en la carpeta del smelter o en windows/system32. Aca lo dejo.
Bueno, estoy intentando hacer esto pero tengo 1 problema y una duda, el problema es que cuando cargo el .raw en el smelter no se abre mostrandome las direcciones sino que me sale esto
y cuando presiono la b para buscar la direccion no hace nada, simplemente se queda en la ventana para insertar la direccion, alguna solucion para esto?, gracias!Cita:
Smelter : v9.64
OS : Microsoft Windows (2) 5.1.2600 Service Pack 2
Flash : C:\armpc\main_nuevo.raw
Tama?o : 840201 = 8,25048923492432M = 8651265
Firmware
Cargando base : 7BFDFF
Telefono
Manufacturer
Fecha ensamblaje
************************************************** ******************************
Cargando base
44140000
A mi tambien me paso eso, solo encontro este 002103482570????????0be0
pero otra direccion no.
Otra pregunta:
Cuando estamos en la parte de comparar las direcciones del FW original con el FW a portar, tenemos que sumarle la diferencia de los ultimos offsets a las direcciones del asm, asi cpmo lo dice esta parte:
En mi w810 el ultimo es 45714984 (offset 1574984), entonces restando con el del z550 que es 45664F24, me da AFA60, eso se lo sumo a las direcciones del asm que son:Cita:
El último de R6CA009 es 45651F84 (offset: 1511F84) y el de R6GA004 es 45664F24 (offset: 1524F24) lo que nos da una diferencia de +12FA0. Asi que sumamos este valor al “patch2” y obtenemos: 45665530.
Asi es que tengo que hacer?Cita:
patch1 equ 0x454E416A
patch2 equ 0x45652490
dir1 equ 0x454DE6C8
dir2 equ 0x45604480
dir3 equ 0x453DFDE1
dir4 equ 0x455A12AD
Otra cosa, cuando debo comparar las direcciones con el IDA, deben decir lo mismo? digo, en las funciones? que pasa si no coincide alguna?
SAludos
Estos son los patrones a buscar:Como dije en el tuto esto no es necesario, el nuevo codigo se puede ubicar en cualquier lugar libre, pero creo que esto es recomendable. ¿Por que? pues, porque de esta manera es menos problable que 2 parches se superpongan (cosa que ya me pasó). Si los parches que portamos del firm de origen no se superponian, tampoco lo haran en el destino si seguimos esa regla. Igualmente recomiendo realizar una copia del idb del firm de destino y aplicarle todos los parches que tengamos. Luego lo guardamos por ejemplo como "R6GA004_Parchado.raw". Cuando terminemos nuestro parche, lo aplicamos en esta idb y lo revizamos para ver si no hay conflictos antes de ponerlo en el telefono (de esa manera nos ahorramos pantallazos en blanco innecesarios;))
- patch1: 002103482570????????0be0
- dir1: f1b581b000256846002405801ce0
- dir2: 004b1847????????20200021024a (aparecen 2, pero el DCD de 45604484 es igual solo en 456172F8)
- dir3 y dir4: 680349884201d10120704700207047 (aparecen muchas, lo siento, no me pregunten, stuCk ubico las direcciones apropiadas).
Lo que voy a responder va sonar muy poco tecnico, pero creo que hay que seguir nuestros instintos:p. Tenemos que poner la que nos paresca mas apropiada, incluso si alguno valores difieren. Tambien puede suceder que la funcion que se busca no exista en nuestro firm por alguna cuestion (no tiene tapa, no tiene tal tecla, no tiene tal menu, etc). Si hay pocas opciones podriamos simplemente probar cada una.
Alguien con mas experiencia que me corrija si tiene una mejor respuesta.
Cuando guardo la database del Firmware, en la parte inferior del IDA me sale "error no se encontro el archivo C:\...\IDA\plugins\jdprean.p64" algo asi y termina guardandolo con extencion .i64 y no .idb como dice el tutorial.
Que raro, el jdprean es un plugin para IDA llamado Justdapreanalizer, pero es un plw, no un p64 :confused:).
Yo puedo usar el IDA perfectamente si ese plugin. Tal vez sea a causa del archivo de configuracion. Te paso el que tengo yo para que lo pruebes.
No se me ocurre otra solucion en este momento.
En la carpeta plugins si esta el plugins.cfg
Ademas de otros archivos .plw y .p64
Digamos hay un strings.p64 y un strings.plw, un samaout.p64 y un samaout.plw
Pero supuestamente el problema es por no contener el jdprean.p64, aunque el jdprean.plw si esta.
Provare desintalando el IDA (el que tengo lo descarge de otra pag.)e instalando el que esta en el tutorial.
EDITO:
Ya solucione mi problema pero ahora el parche que estoy intentando portar tiene demasiadas llamadas a distintas partes del Firm!!:mad:
Bueno, estuve probando el portar algunos parches que ya estaban y funciono!, gracias karl05!, ahora el tema es que queria portar el parche del w710 para ver en pantalla completa y no pude, creo que el principal problema radica en el .asm que se creo, es BASTANTE RARO, aca les paso para ver si alguno encuentra alguna solucion, gracias!
Edito: problema solucionado, lo hice de nuevo y salio bien, en algo me debo haber confundido
ahora tengo un nuevo problema me sale error: relative jump out of range, el tema es q no entiendo arreglarlo con la solucion que diste, porque no tengo ningun BL, mira esta es la primera parte del asm
el error me sale en B dir1, como harian en este caso? gracias!Cita:
include "x.inc"
patch equ 0x44141FBC
dir1 equ 0x44162796
dir2 equ 0x44162CB8
org patch
Align 4
loc_45790257: ADD R7, 0xBA
LSL R3, R7, 6
LSL R5, R4, 6
B dir1
No entiendo las dos partes en negrita, en lo primero en negrita, ¿el firm de origen no es R6CA009 ? ¿cual se abre con el smelter entonces, el de origen o el de destino?Cita:
Quitemos el parche que habiamos aplicado ejecutando el IDC “UndoPatch.idc” de la misma forma que el anterior idc seleccionando el parche a quitar, o sea el mismo que aplicamos al comienzo.
Abrimos el Smelter. “Flash” -> “Abrir”, tipo:”Todos los archivos” y seleccionamos el Raw del firm de origen (R6GA004). . “Flash” -> “Cargando base” -> “Enter the Address” y ponemos “44140000” (o la base que corresponda a tu modelo).
En la parte de arriba hay una fila de botones con letras: E, L, M, P… Presionamos la “B” que abre el cuadro “Search bytes” para buscar en el firm.
Vamos a portar todas las direcciones que definimos al principio del asm (las precedidas por “equ”), buscando su equivalente en el nuevo firm.
Nos dirigimos a 454E416A donde se alojaba el “patch1”. Analizamos el código presionando “C” :
y en lo segundo en negrita, nos dirigimos a esa direccion (454E416A), dentro del IDA del firm de origen o de destino? ¿con parchar o sin parchar?
y por ultimo en esta parte:
¿que otros valores dependen tanto de origen como de destino?? porque existen muchos mas..Cita:
Observen que hay un BL en 454E4170, que llama una subroutine en 454F21EC, el valor de estas instrucciones (Branch) depende tanto del origen como del destino. A diferencia de los DCD en que solo dependerán del destino. Mas alla de eso es evidente que tanto origen como destino puede que no se encuentran en las mismas direcciones en ambos firms, por lo tanto estos 4 bytes pueden ser distintos.
gracias
Gracias
@ LeO_snm: Tengo entendido que esa solucion deberia servir con B, BL, BLX. Yo solo tuve ese problema con los BL, por eso puse este ejemplo en el tuto. Si tengo tiempo veo ese parche con mas detenimiento.:pOops! es el de destino (sin parchar, claro esta), perdón por la errata, ya lo corrigo. En principio BL, BLX, DCD, me parece que a veces algunos B, LDR. Imagino que depende de si la distancia relativa es igual o no entre los firm.
Yo utilizo comodines cada vez que veo una llamada de 4 bytes a otra parte del firm. Aunque tuve casos en que cambiaban valores analizados de a 2 bytes por el IDA.
Realmete no conozco lo suficiente de assembler como para darte una respuesta bien fundamentada. Espero te haya sido util de todos modos.
Un saludo.
Cita:
LeO_snm: Tengo entendido que esa solucion deberia servir con B, BL, BLX. Yo solo tuve ese problema con los BL, por eso puse este ejemplo en el tuto. Si tengo tiempo veo ese parche con mas detenimiento..
el problema es con B, el tema es que no entiendo de donde salen los numeros para agregar esa parte q dice el tuto
la funcion dword_456521B0 me parece que esta fuera del rango, hay que hacer lo mismo que las que empiezan en off, loc, sub
es que intento portar el management radio and player set of means v3.5 y aparece esta de r6ca009 a r6ga004
otra cosa es que en el momento de usar el fasmarm me dice que no se encuentra el archivo temp.bin
Haberm he estado tratando de aplicar este tuto a un parte mas complicado que el del ejemplo (el parche ya existe en varias versiones y para casi todo celuar, lo hice mas para ENTENDER y APRENDER mejor)
Agarre este parche:
y lo pase a asm obteniendo esto:Código:;W810 SW-R4EA031
;Missed calls and messages notification by camera button/vibra/melody
;Notification starts after 1 minute after missed call/message
;You can set the type of notification yourself: 00 - on, 01 - off
;Vibra/melody stops during active call
;v. 3
;© IronMaster
+44140000
10c633e: 3378002B1F4F 204FB847002B
10c63c0: D3E50000 01F06B45
1341388: 021C0020052A00B5 00B53DF25AFE052A
14049ea: 0A1C011C 7AF11CFB
157f000: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 4D4F3378FFB54D4F3E78B007C00F09D1
157f010: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 02252E433E70F007C00F03D14A484949
157f020: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8DF732F9FFBD0A1C011CFFB5424B8B42
157f030: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 06D1002A04D1414F3E78FD252E403E70
157f040: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFBD021C0020FFB53C4F3E78321C0029
157f050: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 01D00E4301E0FE210E403E707107C90F
157f060: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 07D104210E433E70FA2002A101318DF7
157f070: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0BF9FFBDFFB5314F3E78FB252E403E70
157f080: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C907C90F09D1F107C90F06D0B107C907
157f090: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 03D12D482B498DF7F7F8FFBDFFB52EA1
157f0a0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0978012901D100F003F800F01EF8FFBD
157f0b0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFB5224F3E78B007800F09D001210820
157f0c0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00F036F8FF20F53002A101318DF7DCF8
157f0d0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFBDC046FFB50021082000F029F8FF20
157f0e0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5301B498DF7D0F8FFBDFFB54FF54EFC
157f0f0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 072801D8002816D1104F3E78B007800F
157f100: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 15D015A56978012907D10D488069FA21
157f110: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 890032220B1C70F4A1FBA978012902D1
157f120: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E8788DF797F90B4808498DF7ADF8FFBD
157f130: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 004A10475DEE2945D3E50000442B024C
157f140: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E44D044C9DF06B4560EA0000EBF06B45
157f150: FFFFFFFF B1F06B45
157f154: FFFFFFFF 204E0000 ;Time between notifications
157f158: FF 01 ;Cammera button
157f159: FF 01 ;Vibra
157f15a: FF 00 ;Melody
157f15b: FF 0B ;Type melody (charger connected)
para no aburrirme buscando direcciones en otro main (pues el parche ya existe en varios modelos) lo volvi a compilar con las mismas direcciones del w810 obteniendo el parche inicial :a35:, entonces esta bien verdad?:a35:Código:
include "x.inc"
adrress0 equ 0x456BF0D4
adds1 equ 0x456BF074
adds2 equ 0x456BF158
address1 equ 0x4564C288
address2 equ 0x456BF0B0
address3 equ 0x456BF0EA
address4 equ 0x456BF130
address5 equ 0x4540E98C
address6 equ 0x4532F85C
address7 equ 0x4564C454
address8 equ 0x4529EE5C
address9 equ 0x456BF09C
dir1 equ 0x452063C0
dir2 equ 0x456BF042
dir3 equ 0x456BF026
ram1 equ 0x4C022B44
ram2 equ 0x4C044DE4
hook1 equ 0x452063c0
patch1 equ 0x4520633E
patch2 equ 0x45481388
patch3 equ 0x455449EA
patch4 equ 0x456BF000
org patch1
loc_4520633E:
LDR R7, dir1
BLX R7
CMP R3, 0
org hook1
DCD loc_456BF000+1
org patch2
loc_45481388:
PUSH {LR}
BL dir2
CMP R2, 5
org patch3
loc_455449EA:
BL dir3
org patch4
loc_456BF000:
LDR R7, dword_456BF138
LDRB R3, [R6]
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
LSL R0, R6, 0x1E
LSR R0, R0, 0x1F
BNE loc_456BF024
MOV R5, 2
ORR R6, R5
STRB R6, [R7]
LSL R0, R6, 0x1F
LSR R0, R0, 0x1F
BNE loc_456BF024
LDR R0, dword_456BF148
LDR R1, off_456BF144
BL address1
loc_456BF024:
POP {R0-R7,PC}
ADD R2, R1, 0
ADD R1, R0, 0
PUSH {R0-R7,LR}
LDR R3, dword_456BF138
CMP R3, R1
BNE loc_456BF040
CMP R2, 0
BNE loc_456BF040
LDR R7, dword_456BF13C
LDRB R6, [R7]
MOV R5, 0xFD
AND R6, R5
STRB R6, [R7]
loc_456BF040:
POP {R0-R7,PC}
ADD R2, R0, 0
MOV R0, 0
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
ADD R2, R6, 0
CMP R1, 0
BEQ loc_456BF056
ORR R6, R1
B loc_456BF05A
loc_456BF056:
MOV R1, 0xFE
AND R6, R1
loc_456BF05A:
STRB R6, [R7]
LSL R1, R6, 0x1D
LSR R1, R1, 0x1F
BNE loc_456BF072
MOV R1, 4
ORR R6, R1
STRB R6, [R7]
MOV R0, 0xFA
adr R1, adds1
ADD R1, 1
BL address1
loc_456BF072:
POP {R0-R7,PC}
loc_456BF074:
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
MOV R5, 0xFB
AND R6, R5
STRB R6, [R7]
LSL R1, R1, 0x1F
LSR R1, R1, 0x1F
BNE loc_456BF09A
LSL R1, R6, 0x1F
LSR R1, R1, 0x1F
BEQ loc_456BF09A
LSL R1, R6, 0x1E
LSL R1, R1, 0x1F
BNE loc_456BF09A
LDR R0, dword_456BF148
LDR R1, off_456BF144
BL address1
loc_456BF09A:
POP {R0-R7,PC}
loc_456BF09C:
PUSH {R0-R7,LR}
adr R1, adds2
LDRB R1, [R1]
CMP R1, 1
BNE loc_456BF0AA
BL address2
loc_456BF0AA:
BL address3
POP {R0-R7,PC}
sub_456BF0B0:
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
LSL R0, R6, 0x1E
LSR R0, R0, 0x1E
BEQ loc_456BF0D0
MOV R1, 1
MOV R0, 8
BL address4
MOV R0, 0xFF
ADD R0, 0xF5
adr R1, adrress0
ADD R1, 1
BL address1
loc_456BF0D0:
POP {R0-R7,PC}
NOP
loc_456BF0D4:
PUSH {R0-R7,LR}
MOV R1, 0
MOV R0, 8
BL address4
MOV R0, 0xFF
ADD R0, 0xF5
LDR R1, off_456BF150
BL address1
POP {R0-R7,PC}
sub_456BF0EA:
PUSH {R0-R7,LR}
BL address5
CMP R0, 7
BHI loc_456BF0F8
CMP R0, 0
BNE loc_456BF126
loc_456BF0F8:
LDR R7, dword_456BF13C
LDRB R6, [R7]
LSL R0, R6, 0x1E
LSR R0, R0, 0x1E
BEQ loc_456BF12E
adr R5, adds2
LDRB R1, [R5,1]
CMP R1, 1
BNE loc_456BF11A
LDR R0, dword_456BF140
LDR R0, [R0,0x18]
MOVL R1, 0x3E8
MOV R2, 0x32
ADD R3, R1, 0
BL address6
loc_456BF11A:
LDRB R1, [R5,2]
CMP R1, 1
BNE loc_456BF126
LDRB R0, [R5,3]
BL address7
loc_456BF126:
LDR R0, dword_456BF154
LDR R1, off_456BF14C
BL address1
loc_456BF12E:
POP {R0-R7,PC}
sub_456BF130:
LDR R2, off_456BF134
BX R2
align 4
off_456BF134 DCD address8+1
dword_456BF138 DCD 0xE5D3
dword_456BF13C DCD ram1
dword_456BF140 DCD ram2
off_456BF144 DCD address9+1
dword_456BF148 DCD 0xEA60
off_456BF14C DCD address3+1
off_456BF150 DCD address2+1
dword_456BF154 DCD 0x4E20
loc_456BF158:
LSL R1, R0, 4
LSR R0, R0, 0xC
Ahora voy por el Confidentiality + Extended File Manager. para w610 =P
hola...bueno amigos lo que me ocurre a mi es similar a lo de migue8 solo que el archivo que me falta es "ritchtx32.ocx"...alguien me lo podria pasar o decirme donde lo consigo xfa...desde ya muchas gracias...
gracias amigo pero tengo u problema porque mi ordenador me tira un virus en el archivo...si melo puedes pasar nuevamente te lo agradeceria....
Eze chequea esta pagina Archivos requeridos .DLL y .OCX para los programas y utilidades Msn messenger hay varios dll y ocx disponibles para descargar
Al intentar compilar con el fasarm me marca que falta el archivo temp.bin alguna solucion ya probe varias versiones de farsar y pasa lo mismo
EDITO solucionado el error era el un archivo intercale alguno de una version que si me funciono.
saludos
disculpen amigos estoy empezando con esto de portar parches y tengo una duda...quizas esta sea una pregunta tonta pero en fin me gustaria que me expliquen...
lo que quiero saber es cual es el ULTIMO BYTE DE MI FIRM para completar los datos en el ida...
mi cel es un w580 r8be001 y lo que ocurre es que el ida no me rellena ese dato, ya que me aparece una combinacion bastante extraña...tambien quisiera saber como averiguarlo yo mismo en el caso de que luego utilize otro modelo...
desde ya muchisimas gracias al foro del que siempre aprendo y sepan disculpar mi ignorancia...
puedes abrir el .raw de tu firmware con UltraEdit o WinHex y vas hasta el ultimo offset, ese será lo que colocarás.
y le sumas 100000 para que se extienda del rango y puedas trabajar con parches que exceden el limite del firmware, como el elfpack, etc...
En db2020 solamente ponemos el ultimo offset :a12: (no extendemos length).
En db2010 hay que hacer lo que dijiste :a01::
Pd: Hay una manera mas facil de portar con parches que trabajan fuera del firmware y no es necesario extender el length en db2010 y tomar menos en db2020.:a31:
Una pregunta, estoy empezando a portar parches moderados, empeze con los sencillos sin assembling y fueron sobre ruedas. Al grano, quisiera saber que poner en Rom Start Adress, mi suposicion es 44140000 y en Rom size tengo otra pregunta como debo poner el numero en hexadecimal?, osea tengo el firmware R4EA031 W810, y veo que finaliza en 01576FD0 hexadecimal, que debo sumar 100000 osea 01586FD0 y ponerlo en Rom Size?
Te felicito y espero tengas el mismo exito con tus proximos ports. Bien, vamos con tu consulta:
Abris el raw con el IDA, en "processor type" ponés "AMR Processors: AMR710a" le das "Set" y luego "OK". En la proxima ventana solo tiene que estar tildado Create ROM section
Luego pones:
ROM start address: 0x44140000
ROM size: 0x01674985
Loading address: 0x44140000
File offset: 0x00000000
Loading size: 0x01674985
Fijate que los valores de ROM start address, Loading address y File offset antes de que los reemplases estan en 0x00000000.
En ROM size y Loading size ya te deberia aparecer el valor del ultimo byte que reconoce el IDA antes de que reemplaces.
Cuando abri tu firm me apareció: 0x01574985, o sea que solo le sumé 1 a la tercera cifra despues del 0x.
Espero que se haya aclarado tu duda. Un saludo.
Hola gracias por la anterior he avanzado un poco, estoy portando un parche de cuando te llaman prenda la luz, el tema es que las ultimas partes del parche mas bien cuando el codigo es 0000000000 o FFFFFFFF manda un error que dice Command MarkCode failed y no puedo avanzar.
PD: Editado, lo anterior ya lo solucione. El tema ahora es el ASM del paso 1, ya lo construi y saque las lineas con ; y demas pero donde lo veo con colores? osea tu dices rojo y azul, pero en block de notas? por que lo veo todo igual en negro.
PD2: Expongo mi progreso hasta ahora, desamble el parche:
Y HA QUEDADO ASI:
Cita:
include "x.inc"
loc_456B55B0:
LDR R0, [R4,0x30]
LDR R1, loc_456B5610
PUSH {R0-R7,LR}
LDR R7, loc_456B560C
LDRB R6, [R7,1]
CMP R6, 1
BEQ loc_456B55C6
MOV R1, 1
STRB R1, [R7,1]
BL sub_456B55C8
loc_456B55C6:
POP {R0-R7,PC}
sub_456B55C8:
PUSH {R0-R7,LR}
LDR R7, loc_456B560C
LDRB R6, [R7]
CMP R6, 1
BEQ loc_456B55E2
MOV R0, 0x1E
BL sub_455F2464
MOV R0, 0x32
LDR R1, off_456B5614
BL sub_4564C288
POP {R0-R7,PC}
loc_456B55E2:
MOV R6, 0
STRB R6, [R7]
STRB R6, [R7,1]
POP {R0-R7,PC}
loc_456B55EA:
PUSH {R0-R7,LR}
BL loc_455F247C
MOV R0, 0x32
LDR R1, off_456B5618
BL sub_4564C288
POP {R0-R7,PC}
loc_456B55FA:
ADD R4, 0x4C
LDRB R0, [R4,3]
PUSH {R0-R7,LR}
LDR R7, loc_456B560C
LDRB R6, [R7,1]
CMP R6, 1
BNE loc_456B560A
STRB R6, [R7]
loc_456B560A:
POP {R0-R7,PC}
loc_456B560C:
CMP R3, 0x40
LDR R4, off_456B5618
loc_456B5610:
LDR R1, [R0,0x28]
CMP R0, R4
Claro que vas a ver todo en negro en el block de notas, ¡Es texto sin formato!. Los colores son solo orientativos, para que veas como deben ser las zonas del vkp o asm a las que me refiero.
En ese parche tenes 4 DCDs (en 10c673a, 10c67fc, 10c7e20 y 10c7e4c), que vas a tener que poner "manualmente" en el ASM. Lee con detenimiento el Tutorial que esta explicado.
Tenes un pequeño cambio en el firm (en 10c7e14) y todo el codigo nuevo desde 15755b0 (que son las FFFF).
Notá que el parche esta escrito en offset+base. O sea que para buscar en el IDA tenes que sumarle 4414000 a los offsets.
Una vez listo el ASM reemsamblalo con el Fasarm para ver si, efectivamente, genera de nuevo el mismo parche vkp del que partiste. Si todo esta OK, entonces pasa a la Fase 2 para comensar a portarlo.
Perdon por hacer tantas preguntas salgo de una duda y me meto en otra, lo que dices antes creo que entendi algo, o para mi es mas facil, yo dijo los offset que modifican algo en el firm como lo son los 5 primeros, esos no seria mas facil portarlos despues? osea como si fueran un parche simple, que no requieran assembling? y otra duda, te segui hasta que tienes que poner patch, dir 1, dir 2, dir 3, dir 4, etc. En patch se que poner que es donde comienza el codigo nuevo, pero en dir 1, y los demas dir no se como obtenerlos? osea en tu tutorial veo que obtienes dir1 equ 0x454DE6C8 de la nada eso creo?
PD: Avanza hasta aca:
Código:include "x.inc"
patch equ 456B55B0
dir 1 equ
dir 2 equ
dir 3 equ
dir 4 equ
loc_456B55B0:
LDR R0, [R4,0x30]
LDR R1, loc_456B5610
PUSH {R0-R7,LR}
LDR R7, loc_456B560C
LDRB R6, [R7,1]
CMP R6, 1
BEQ loc_456B55C6
MOV R1, 1
STRB R1, [R7,1]
BL sub_456B55C8
loc_456B55C6:
POP {R0-R7,PC}
sub_456B55C8:
PUSH {R0-R7,LR}
LDR R7, loc_456B560C
LDRB R6, [R7]
CMP R6, 1
BEQ loc_456B55E2
MOV R0, 0x1E
BL sub_455F2464
MOV R0, 0x32
LDR R1, off_456B5614
BL sub_4564C288
POP {R0-R7,PC}
loc_456B55E2:
MOV R6, 0
STRB R6, [R7]
STRB R6, [R7,1]
POP {R0-R7,PC}
loc_456B55EA:
PUSH {R0-R7,LR}
BL loc_455F247C
MOV R0, 0x32
LDR R1, off_456B5618
BL sub_4564C288
POP {R0-R7,PC}
loc_456B55FA:
ADD R4, 0x4C
LDRB R0, [R4,3]
PUSH {R0-R7,LR}
LDR R7, loc_456B560C
LDRB R6, [R7,1]
CMP R6, 1
BNE loc_456B560A
STRB R6, [R7]
loc_456B560A:
POP {R0-R7,PC}
loc_456B560C:
CMP R3, 0x40
LDR R4, off_456B5618
loc_456B5610:
LDR R1, [R0,0x28]
CMP R0, R4
Bueno, los nombres patch y dir1, dir2, etc. tambien son orientativos, realmente le podes poner cualquier nombre que quieras. Respecto a lo anterior, lo explique en el tuto para el BL pero voy a tratar de explicarlo mejor para tu caso que son DCD:
Cada bloque que va escribir el fasarm tiene que tener esta forma:
org (Nombre de la direccion donde empieza a escribir)
"loc o sub" (Direccion de partida):
INSTRUCCION (Nombre de la direccion de destino)
Por ejemplo esta linea:
10c67fc: 816A2045 B1556B45
Donde empieza?: 10c67fc+44140000 = 452067FC y esta es tambien la direccion de partida para el salto.
Instruccion?: para realizar un salto es "DCD"
destino?: 456B55B0+1 (fijate que son los valores invertidos de a pares)
Entonces tiene que quedar asi:
org salto2
loc_452067FC:
DCD parche+1
¿Ves que queda parecido al org patch1 del tuto, pero con DCD? Tenes que definir los nombres salto2 y parche. Asi que al comienzo del ASM pones:
salto2 equ 0x452067FC
parche equ 0x456B55B0
Tambien nota que si bien le puedo poner cualquier nombre al destino lo llame "parche" ya que si te fijas es donde comienza el codigo nuevo. Esto es importante que lo notes para luego portarlo en la fase 2.
Para seguir agregando bloques de instrucciones consecutivas volves a usar el comando "org".
Si seguis teniendo dudas, pregunta, para eso esta esta seccion. Podria haber sido mas explicativo en el tuto, pero ya esta bastante largo, no?:a26:
He entendido hasta ahi, pero tengo la misma pregunta, no es mas facil los 5 primeros offset hacen cambios al main, mientras que los otros añaden nuevas funciones, lo que hacen cambios al main no los podria portar al final? osea porto mediante este tuto los que añaden nuevas funciones y mediante el tuto sin assembling con winhex los otros.
Ah!, eso si. Podes agregarlos como si fuese un parche sencillo si conoces el destino de los saltos mediante winhex. Yo a veces tampoco los pongo en el ASM (incluso ni siquiera uso winhex) solo los veo en el IDA y los meto al final editando directamente el vkp con el block de notas.
Pero quise ser mas extructurado y coherente al explicarlo, asi no creaba mas confusion.
Mirá que tenes que conocer los otros destinos en el nuevo firm, tal vez tengas que usar el smelter para buscar, el winhex no te permite buscar comodines (?).
Hola, bueno voy a empezar todo otra vez, ya que vi que algunas cosas no coincidian, y cierto ya que he empezado de 0 el tuto y algunas se me habian escapados.
Bueno una pregunta me quedo esto:
PD: Fijate si no es mucho pedir y si no te interrumpo, si los dir 1, dir 2 y dir 3 estan bien, entiendo que estos son las direcciones que sobresalen de los offset, que no se encuentran dentro del rango y que patch es donde empieza el parche. Otra duda que tenia que son los unk_xxxxx y si tambien debo ponerlos con : y otra duda donde debo poner los valores de dir 1, dir 2 y dir 3. Muchas Gracias.Código:include "x.inc"
Patch equ 0x456B55B0
dir 1 equ 0x456B5614
dir 2 equ 0x456B5618
dir 3 equ 0x4C022B40
org 0x456B55B0
:loc_456B55B0
LDR R0, [R4,0x30]
LDR R1, loc_456B5610
PUSH {R0-R7,LR}
LDR R7, dword_456B560C
LDRB R6, [R7,1]
CMP R6, 1
BEQ loc_456B55C6
MOV R1, 1
STRB R1, [R7,1]
BL sub_456B55C8
:loc_456B55C6
POP {R0-R7,PC}
:sub_456B55C8
PUSH {R0-R7,LR}
LDR R7, dword_456B560C
LDRB R6, [R7]
CMP R6, 1
BEQ loc_456B55E2
MOV R0, 0x1E
BL sub_455F2464
MOV R0, 0x32
LDR R1, off_456B5614
BL sub_4564C288
POP {R0-R7,PC}
:loc_456B55E2
MOV R6, 0
STRB R6, [R7]
STRB R6, [R7,1]
POP {R0-R7,PC}
DCB 0xFF
unk_456B55EB DCB 0xB5
DCB 0x3C
DCB 0xF7
DCB 0x46
DCB 0xFF
MOV R0, 0x32
LDR R1, off_456B5618
BL sub_4564C288
POP {R0-R7,PC}
:loc_456B55FA
ADD R4, 0x4C
LDRB R0, [R4,3]
PUSH {R0-R7,LR}
LDR R7, dword_456B560C
LDRB R6, [R7,1]
CMP R6, 1
BNE loc_456B560A
STRB R6, [R7]
:loc_456B560A
POP {R0-R7,PC}
dword_456B560C DCD 0x4C022B40
:loc_456B5610
LDR R1, [R0,0x28]
CMP R0, R4