elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Temas
Páginas: [1]
1  Programación / Ingeniería Inversa / Ayuda con un codecave en: 12 Mayo 2014, 11:49 am
Hola, estoy recien empezando en esto del assembly (manejo c, pero assembly 0,1%) y quiero hacer un codecave simple, porque quiero parchar algo, quiero hacerlo a mano con un editor hexadecimal.

tengo varias preguntas:
¿en que parte del ejecutable es mejor ubicar el código del codecave? ¿una sección que tenga harto espacio en blanco?
¿como calculo la cantidad de desplazamiento desde el offset del archivo hasta el offset dónde está el codecave? creo que no es la misma al momento de cargarse el programa en memoria.

Tengo un programa que es el cual quiero parchar que hace esto:

Código:
offset 10 push parametro3
offset 14 push parametro2
offset 18 push parametro1
offset 22 call function

quiero llamar al code cave antes de "call function", y dentro del codecave duplico el codigo anterior de los push parametro

hacer algo asi:

Código:
mov eax, direccion donde volver del codecave
jmp codecave
call function

y el codigo del codecave seria:
Código:
push parametro3
push parametro2
push parametro1
push eax ; guardamos la direccion donde volver
;hacer otra cosa
ret ;

¿Porque lo estoy haciendo así? Porque tengo al menos 5 funciones que deben llamar al mismo codecave y usan la misma carga de parametros, entonces la dirección de retorno no siempre será igual. Por eso la idea es guardar la direccion de retorno dentro de eax.

Esta es más o menos la idea en un código de fasm:
si no se ejecutara jmp cave el programa imprimiría hello.

Código:
format PE console
entry start
 
include 'win32a.inc'
 
;======================================
section '.data' data readable
;======================================
 
hello_newline  db "Hello!",10,0
bye_newline    db "Bye!",10,0
 
;=======================================
section '.code' code readable executable
;=======================================
 
start:
        mov eax, cave_end
        jmp cave

        print:
        push  hello_newline

        cave_end:
        call [printf]
        call [getch]
        stdcall [exit],0
cave:
        push  bye_newline
        push eax
        ret


;====================================
section '.idata' import data readable
;====================================
 
library msvcrt,'msvcrt.dll'

import  msvcrt,\
        printf,'printf',\
        getch,'_getch',\
        exit,'exit'



Mi principal duda, es en que lugar del ejecutable puedo escribir el codecave, y ¿cómo calculo el valor que debe tener eax y el valor del jump? esto es como si fuera viendo el archivo con un editor hexadecimal.

Por favor, si pudieran ayudarme, estoy muy entusiasmado con esto.




Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines