Publicidad

Resultados 1 al 2 de 2
  1. #1
    [IG] Avanzad@ Avatar de Comunity
    Ingreso
    25 ago, 13
    Mensajes
    77
    País
    Gracias
    24
    44 gracias en 18 Posts

    Post Tutorial Hookeando una DLL

    Como hookear una dll en un .exe
    (Aunque lo usaremos para un GameServer.exe)

    Bueno, en la web existen muchos tutoriales de como hookear una dll y como buscar offsets, asi que este tutorial en primer lugar, dejo en claro que no es de mi auditoria, pero nuevamente me encargue de traducirlo al español.

    En este tutorial se explicara de forma basica como hookear una DLL.

    Primeramente dejare los pasos del modo simple de hook (El cual tambien se puede visualizar en las guias de desarrollo de GXSoft, pero en el cual hay solo 1 cambio) que veran a continuación:

    Código:
    PUSH "Nombre de DLL" = Push al offset del nombre de la dll
    CALL "LoadLibraryA"
    OR EAX,EAX = Sirve para que en caso de que no exista la dll (nombre dll) en la carpeta, pase a la siguiente línea 
    JE 0 = ExitProcess > Salir del proceso si no esta la dll solicitada
    PUSH "Llamada de Funcion" = Push al offset de la función de la dll
    PUSH EAX = seria como indicar que de aquí parte la dll
    CALL "GetProcessAdress" = Es como una función para poner orden en el inicio de carga de los dll
    CALL EAX= Al llamar al EAX, se carga la dll inicial, y de aquí parte la carga de dll
    JMP "EntryPoint" - Hace un salto al EntryPoint Original
    Como se puede en el codigo anterior el cambio que se realizo a diferencia del tutorial de GXSoft, es que despues del OR EAX, EAX en vez de devolverse al EntryPoint, cierra el proceso, ya que seria lo mas lógico.

    A continuación veremos un hook al cual le añadiremos un MessageBoxA, con el fin de que en caso de que no cargue la DLL, arroje un mensaje de error. Agradecimientos por el tutorial a João Neto


    IMPORTANTE

    Existe una forma mas rapida de poder hookear una dll sin necesidad de hacer todos estos pasos mediante el programa Stud_PE, pero si queremos aprender bien es recomendable hacerlo nosotros mismos.
    Hookeando una DLL a un GameServer.exe + Mensaje de Error

    Hola chicos, Sé que muchos cuando se inician en el desarrollo de su DLL encuentran una barrera que impide que el mismo pueda proseguir, el Hook de una DLL en un GameServer.exe limpio, así que preparé un tutorial explicando los pasos de cómo hacerlo correctamente.

    INFORMACION



    1ª Parte - Método de Hookear una DLL:

    Código:
    
    PUSH NOMBREDADLL // Dentro de OllyDbg busque un espacio vacio para ingresar su codigo (DB 00) Vaya a follow in dump y escriba en ASCII el nombre de su DLL.
    CALL LoadLibrary // Busque el offset LoadLibrary de su exe.
    OR EAX,EAX
    JE ERROR // Busque un espacio DB 00 y monte la funcion de Error de nuestra DLL.
    PUSH FUNCIONDELADLL // Busque un espacio DB 00 Haga follow in dump y escriba en ASCII el nombre de la funcion de su DLL.
    PUSH EAX
    CALL GetProcAddress // Busque el offset GetProcAddress de su exe.
    CALL EAX
    JMP EntryPoint // EntryPoint Original de su GameServer.

    Función de Error:

    Código:
    PUSH 0
    PUSH MSGDEERROR // Busque un espacio DB 00 Haga follow in dump y escriba en ASCII el titulo del mensaje de error  Ejemplo: Error!
    PUSH MSGDEERROR2 // Busque un espacio DB 00 Haga follow in dump y escriba en ASCII el mensaje de error completo Ejemplo: JNTeam.dll esta ausente!
    PUSH 0
    CALL MessageBoxA // Busque el offset MessageBoxA de su exe.
    PUSH 0
    CALL ExitProcess // Busque el offset ExitProcess de su exe.

    INFORMACION

    Para buscar los offsets utilizados ExitProcess, MessageBoxA, EntryPoint, GetProcAddress y LoadLibrary.

    1° - Vamos a encontrar nuestro EntryPoint:
    • Encontrar el EntryPoint en su GameServer es la parte mas simple del proceso, basta con abrir el GameServer con Ollydbg y esperar, este va a parar en el OFFSET de su EntryPoint. Ahora en un bloc de notas solo queda anotar el OFFSET que se utilizara en su Hook.

    2° - Vamos a encontrar el OFFSET de LoadLibrary de su GS:
    • Primero vamos a hacer clic derecho en cualquier lugar de nuestro GameServer y luego ir a Search For y despues a Names.
    •Ahora basta con apretar la tecla “L” de su teclado y lo llevara a la sección de nombres iniciados con “L”, en esta navegue con la barra lateral hasta encontrar LoadLibraryA, una vez lo encuentre haga doble clic en ella para ir al OFFSET. Ahora en el bloc de notas solo queda anotarlo.

    3° - Vamos a encontrar el OFFSET de GetProcAdress de su GS:
    • Primero vamos a hacer clic derecho en cualquier lugar de nuestro GameServer y luego ir a Search For y despues a Names.
    • Ahora basta con apretar la tecla “G” de su teclado y lo llevara a la sección de nombres iniciados con “G”, en esta navegue con la barra lateral hasta encontrar GetProcAdress, una vez lo encuentre haga doble clic en ella para ir al OFFSET. Ahora en el bloc de notas solo queda anotarlo.

    4° - Vamos a encontrar el OFFSET de MessageBoxA de su GS:
    • Primero vamos a hacer clic derecho en cualquier lugar de nuestro GameServer y luego ir a Search For y despues a Names.
    • Ahora basta con apretar la tecla “M” de su teclado y lo llevara a la sección de nombres iniciados con “M”, en esta navegue con la barra lateral hasta encontrar MessageBoxA, una vez lo encuentre haga doble clic en ella para ir al OFFSET. Ahora en el bloc de notas solo queda anotarlo.

    5° -
    Vamos a encontrar el OFFSET de ExitProcess de su GS:
    • Primero vamos a hacer clic derecho en cualquier lugar de nuestro GameServer y luego ir a Search For y despues a Names.
    • Ahora basta con apretar la tecla “E” de su teclado y lo llevara a la sección de nombres iniciados con “E”, en esta navegue con la barra lateral hasta encontrar ExitProcess, una vez lo encuentre haga doble clic en ella para ir al OFFSET. Ahora en el bloc de notas solo queda anotarlo.


    Nota: Después de terminar el proceso de implementar el método de hookear, guarde el GameServer.exe más antes de cerrar el Ollydbg tenga en cuenta anotar el OFFSET inicial de donde comenzó su HOOK - PUSH NOMBREDEDLL.

    INFORMACION

    2ª Parte – Usando LordPE para Finalizar el Hook:

    1° - Abra el LordPE;
    2° - Abra el GameServer en la opción del Editor PE;
    3° - En la primera linea podrás ver el EntryPoint, esta va a ser igual que el EntryPoint que vió en Ollydbg pero a diferencia del anterior, el primer numero sera un 2 en vez de 6.
    4° - Pegue el OFFSET inicial de donde comenzó su HOOK en el Ollydbg en el lugar del EntryPoint Original de Ollydbg y cambie el primer numero 6 por un 2:

    Ejemplo si hizo un hook en el offset: 00652721 en el LordPE va a ser 00252721.

    5° - Ahora solo queda apretar en Guardar y luego cerrar el LordPE, su hook estará 100% terminado.
    Como dije anteriormente en los tutoriales de GXSoft que postie hace poco, se puede apreciar de una forma mas clara como realizar un hook, como buscar un offset, etc... Recuerden que no todo se les puede dar de forma facil, de modo que haya esfuerzo y ganas de aprender.
    Saludos!
    Última edición por Comunity; 05/01/2015 a las 23:05

  2.    Publicidad


  3. Los siguientes 2 usuarios te han agradecido Comunity , por tu grandioso post:


  4. #2
    [IG] Aprendiz Avatar de Gustavo Ochoa Medina
    Ingreso
    08 abr, 12
    Ubicación
    Carabobo,Valencia, Venezuela
    Mensajes
    42
    País
    Gracias
    37
    0 gracias en 0 Posts

    Re: Tutorial Hookeando una DLL

    //Excelente Tema, Has intentado hacerlo en el Gameserver 1.01.10B_2 Que posee la DLL KGExDLL.DLL y no logro hacerla funcionar. Es decir, logre Hookear, la DLL pero el Gameserver No abre. Saludos. Si tienes 5 minutos libres, una ayuda sería genial.

    Última edición por Gustavo Ochoa Medina; 18/09/2015 a las 10:33 Razón: Agregado SS


 

Etiquetas para este tema

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •