Los datos que entregan son:
offset RAW y la sección que corresponde el address buscado
para buscar se debe insertar el address en VA (Como lo muestra Ollydbg)
Código
/* -=================================================================- Script realizado por :UND3R Script para : Encontrar Offset RAW Fecha : 26/09/2011 -=[ Comentario del Script ]=- Fórmula: RVA: Valor relativo en memoria (Relative Value Address) VA: Valor absoluto en memoria (Value Absolute) RAW: Dirección en el disco -OllyDBG Nos muestra por defecto direciones de tipo VA VA(Value Absolute)=ImageBase+RVA Ejemplo: 40101D=400000(ImageBase)+101D(RVA) -Si queremos saber el raw de un address ubicado en la cabezera PE (PE header) se debe restar address-ImageBase=RVA=RAW Ejemplo: 400056(VA)-400000(ImageBase)=56h(RAW) -Si queremos saber el raw de un address ubicado en una sección se debe hacer lo siguiente: Obtener el RVA del addres: Address-ImageBase=RVA luego a RVA restarle los siguientes valores: RVA-(VirtualAddress-PointerToRawData)=RAW *VirtualAddress y PointerToRawData varían en cada sección -=================================================================- */ VAR NOM_SECCION VAR VALOR VAR HEADER VAR CONTADOR_SEC VAR VIRTUAL_ADDRESS VAR VIRTUAL_SIZE VAR N_SECCIONES VAR MODULE_BASE VAR PUNTERO_PE INC CONTADOR_SEC //Incrementa CONTADOR_SEC en 1 PREGUNTAR: ASK "Introduzca el address a calcular el Offset RAW" MOV RESULTADO,$RESULT //Mueve el resultado a la variable RESULTADO MOV VALOR,RESULTADO //Mueve RESULTADO a la variable VALOR GMI eip,MODULEBASE //Obtiene la Base del módulo MOV MODULE_BASE,$RESULT //Mueve el resultado a MODULE_BASE MOV PUNTERO_PE,MODULE_BASE //Mueve la Base del módulo a la variable PUNTERO_PE ADD PUNTERO_PE,3C //Suma 3C con PUNTERO_PE MOV PUNTERO_PE,[PUNTERO_PE] //Mueve el contenido dentro de PUNTERO_PE a PUNTERO_PE ADD PUNTERO_PE,MODULE_BASE //Suma PUNTERO_PE con MODULE_BASE MOV N_SECCIONES,PUNTERO_PE //Mueve PUNTERO_PE a N_SECCIONES ADD N_SECCIONES,6 //Suma N_SECCIONES con 6 para obtener el número de secciones MOV N_SECCIONES,[N_SECCIONES],1 //Mueve el primer byte del contenido dentro de N_SECCIONES a N_SECCIONES ADD PUNTERO_PE,F8 //Suma PUNTERO_PE con F8 MOV HEADER,PUNTERO_PE //Mueve PUNTERO_PE a la variable HEADER ADD HEADER,C //Suma C a la variable HEADER MOV HEADER,[HEADER] //Mueve lo que está dentro de HEADER a la variable HEADER ADD HEADER,MODULE_BASE CMP RESULTADO,MODULE_BASE //Compara si el valor introducido con el valor de la ImageBase JB ERROR_ADDRESS //Si el valor introducido es menor salta a ERROR_ADDRESS CMP RESULTADO,HEADER //Compara el valor introducido con el inicio de la primera sección JB CALCULAR_1 //Si el valor introducido es menor hará el cálculo correspondiente de un address ubicado en la sección PE header BUCLE: //Bucle encargado de buscar la sección que corresponde el valor introducido ADD PUNTERO_PE,8 MOV VIRTUAL_SIZE,[PUNTERO_PE] ADD PUNTERO_PE,4 MOV VIRTUAL_ADDRESS,[PUNTERO_PE] ADD VIRTUAL_SIZE,VIRTUAL_ADDRESS ADD VIRTUAL_SIZE,MODULE_BASE SUB VIRTUAL_SIZE,1 CMP RESULTADO,VIRTUAL_SIZE JB CALCULAR_2 CMP CONTADOR_SEC,N_SECCIONES JA ERROR_ADDRESS INC CONTADOR_SEC ADD PUNTERO_PE,1C JMP BUCLE CALCULAR_1: //Fórmula de address ubicada en PE header SUB VALOR,MODULE_BASE MOV NOM_SECCION,"PE header" JMP SALIR CALCULAR_2: //Fórmula de address ubicada en una sección ADD PUNTERO_PE,8 MOV NOM_SECCION,PUNTERO_PE SUB NOM_SECCION,14 MOV NOM_SECCION,[NOM_SECCION],8 BUF NOM_SECCION STR NOM_SECCION LOG NOM_SECCION MOV PUNTERO_PE,[PUNTERO_PE] SUB VALOR,MODULE_BASE SUB VIRTUAL_ADDRESS,PUNTERO_PE SUB VALOR,VIRTUAL_ADDRESS JMP SALIR ERROR_ADDRESS: MSG "ERROR:Address introducida incorrecta" JMP PREGUNTAR SALIR: EVAL "VA:[{RESULTADO}]=Offset RAW:[{VALOR}h] sección:{NOM_SECCION}" MSG $RESULT ret
Saludos a Tinkipinki que nunca me hizo un reto, tomaré este script como reto ya que de forma indirecta lo hizo.





Autor





En línea

Todavia estoy digiriendo toda la informacion surgida de preguntas al foro en posts anteriores.
, sirve mucho si no quieres usar programas anexos a ollydbg