2009-02-13 15 views
5

Tengo una aplicación exe de Windows que solía enviar paquetes a un servidor en el claro. Esta aplicación (vamos a llamarlo la aplicación del cliente) es definitivamente de origen cercano, pero algún hábil pirata informático editó el código hexadecimal y lo envió a enviar paquetes codificados.¿Cómo puedo aplicar ingeniería inversa a los paquetes codificados en una aplicación de Windows?

Ahora, obviamente, esos paquetes están codificados de una manera que es descifrable (de lo contrario, el servidor no podría entenderlo), pero lo que quería hacer es escribir un emulador que emule esta aplicación binaria, enviando el mismos paquetes al servidor, y poder descifrar la respuesta (si está codificada).

El cliente hex-ed requirió una dll adicional para ejecutar, lo que el antiguo cliente no hizo. Supongo que de alguna manera el cliente de hex-ed logró cargar ese dll (vamos a llamarlo client.dll) y la función de ese dll es implementar la codificación/descifrado, enganchando en algunas ventanas api que reenrutaron todos los paquetes enviados desde el proceso client.exe.

Si hay alguien que pueda orientarme sobre cómo empezar a trabajar en cómo funciona todo esto, y cómo puedo realizar una ingeniería inversa de la codificación, eso sería muy apreciado.

No tengo idea qué tipo de información proporcionar, pero si hay alguna falta, simplemente responda, y publicaré más detalles, y si alguien quiere los archivos binarios, me complace proporcionarlo.


descarga binario para todos los interesados:

http://dl.getdropbox.com/u/46623/client.dll

http://dl.getdropbox.com/u/46623/newClient.exe

http://dl.getdropbox.com/u/46623/originalClient.exe

Estos no funcionarán porque se requieren los archivos de recursos - que son unos 3 gigas, por lo demasiado grande para cargar en cualquier lugar. Los nombres han sido cambiados para proteger a los culpables =), pero eso probablemente no proteja el nombre de la dll ...

Respuesta

3

Estoy asumiendo que la persona que codificaba esta gancho que añade el cifrado para el paquete de I/O para el programa antes mencionado o bien ha enganchado APIs de socket de las ventanas relevante (WSASend, send, etc) o enganchado las funciones internas del programa utilizadas para enviar/recibir datos.

Dicho esto, le sugiero que utilice un programa de detección de gancho (por ejemplo, RkUnhooker) para averiguar qué es lo que realmente está enganchado. Una vez que sepa qué API está enganchada, también debe saber a dónde van estos enlaces y, a partir de allí, tendrá que realizar una ingeniería inversa manual de las funciones de enlace.

En cuanto al tema de aprender a hacer esto, no podría dirigirlo a un solo tutorial para que le enseñe todo, pero le sugiero que consulte el sitio Tuts4You, tiene una gran cantidad de tutoriales que cumplirían con todos de tus necesidades

Si es posible, cargue una copia del cliente editado & el archivo DLL del gancho, si tengo el tiempo codificaré el cifrado de la réplica & funciones de descifrado.

+0

gracias por la oferta de ayuda - ciertamente puedo cargar el binario y el dll si lo desea, pero no podrá ejecutarlo sin los archivos de recursos de apoyo, que viene en 3gigs pesados ​​(es un cliente de juegos después de todo) Y no, no estoy tratando de engañar, simplemente tratando de emular al cliente. – Chii

+1

Solo cargue una copia del módulo de gancho, debería ser capaz de extraer los algoritmos de cifrado y descifrado de la misma. – Irwin

+0

cargado y editado la publicación original en la parte inferior. ¡aclamaciones! – Chii

2

Necesita enlazar las funciones exportadas por la DLL adicional y observar las funciones que se están llamando y los parámetros pasó a ellos. Esto no será fácil ya que no tiene información de tipo (por ejemplo, las firmas de función para las exportaciones de DLL).

Mire here para obtener información sobre el enganche de API. También necesitarás un buen depurador, prueba Windbg desde microsoft.

Por lo que puedo ver, la única opción que tiene aquí es la prueba de caja negra, es decir, dar información conocida a ambos sistemas y comparar las respuestas entre sí para encontrar las diferencias y similitudes.

 
       +--------------+ 
Input--------->| Original App |--------->Response1 
       +--------------+ 

       +------------+ 
Input--------->| Modded App |--------->Response2 
       +------------+ 

Ahora una vez que averiguar cómo utilizar las funciones de la DLL adicional, puede usar por sí mismo de la misma forma en que la aplicación original hace.

Cuestiones relacionadas