porque te falta el archivo comdlg32.ocx en la carpeta del smelter o en windows/system32. Aca lo dejo.
Versión para imprimir
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.