Era para OllyDbg pero calculaba de otra forma, dándome el resultado con cálculos decimales, ahora logré encontrar el mismo resultado pero en hexadecimal
Saludos
Saludos
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú/*
-=================================================================-
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
CitarFor decimal values, use the point (i.e. 100. 128.)
Citarcasi caulquier editor PE tiene una calculadora para esos
fines, el que ya te han comentado o por ejemplo el LordPe que es otro
de los más usados.
A mano sería
- Offset RAW: Dirección en disco
- Offset RVA : dirección relativa en memoria
- VA: Dirección absoluta en memoria
VA = RVA + ImagenBase (lo que suele mostrar el Olly)
El offset RAW se calcula así:
Lo primero es identificar en que sección se encuentra el VA. Para
ello lo mejor es transformar el VA en RVA, ya que los editores
muestran la información de las secciones en RVA
RVA = VA (dirección de Olly) - Imagen Base
Con esto te quedas con las direcciones
RVA inicio de sección
Offset RAW inicio de sección
Y las cuentas son:
Offset RAW = (RVA - RVA inicio de sección) + offset RAW comienzo de sección
Todo esto está explicado en la introducción de Ricardo que te recomiendo leas.
Saludos,
GUAN
Cita de: Tinkipinki en 25 Septiembre 2011, 11:55 AM
Hola a todos
Para quien le interese leer un poco os dejo los links de descarga del tutorial de
Sick Troen que hacia referencia .:UND3R:.
Para los que sigan este hilo y se inicien en el tema creo que vale la pena darles un vistazo.
http://dc399.4shared.com/download/lvmh7dC-/044-ESTUDIO_DE_LOS_ENCABEZADOS.zip?tsid=20110925-093526-632c6108
http://dc129.4shared.com/download/LEzqnx-Y/048-ESTUDIO_DE_LOS_ENCABEZADOS.zip?tsid=20110925-093607-f855d31
Saludos