Menú

Mostrar Mensajes

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ú

Mensajes - .:UND3R:.

#1731
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
#1732
Me surgió la duda de como obtener el OffsetRaw de manera manual, buscando en google todos recomendaban programas y siempre que se tocaba la palabra "fórmula o cálculo" venía con la palabra "no es necesaria por existen programas...", por eso se me ocurrió crear un script encargado de mostrar el offset raw, en la cabecera del script se puede apreciar detalladamente de forma explicativa y con ejemplos el cálculo para obtener offset raw

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 (asm) [Seleccionar]
/*
    -=================================================================-
                                                 
        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.
#1733
como paso de decimal a hexa?

los dos números que necesito restar están en decimal, tendría que pasar ambos a hexadecimal luego restarlos y pasarlo a decimal

Saludos
#1734
Me aparece lo siguiente en el help:

CitarFor decimal values, use the point (i.e. 100. 128.)

pero no logro realizarlo
#1735
Como puedo realizar una resta decimal con ollydbg, ya que el comando SUB lo hace de manera hexadecimal

Saludos
#1736
Solucionado
#1737
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

he entendido casi todo pero,no logro entender lo que está con rojo, como lo calculo o de donde lo obtengo

Si alguien me ayudara, Gracias
#1738
Ingeniería Inversa / Re: Duda sobre ejecutables
25 Septiembre 2011, 17:34 PM
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


Excelente aporte. Saludos
#1739
Parte con eso aunque sea antiguo es la base con eso luego vas estudiando las nuevas teorías, Saludos
#1740
Sube el ejecutable para ver que tal :D

Saludos