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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con pointer string
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con pointer string  (Leído 3,230 veces)
usualp

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Problema con pointer string
« en: 20 Diciembre 2022, 19:18 pm »

Hola como estan
el nombre del juego es ao argentum, esta echo en vb6
utiliza paquetes de texto string como protocolo y estoy desarrollando un hack donde intercepto los datos que entran y salen
lo hice con una guia que encontre de otro juego pero se me esta complicando obtener los send y recv los pointer


Código
  1. typedef VOID(WINAPI *PRecvData)(BSTR data);    //Pointer Definition - Takes BSTR and returns VOID
  2. PRecvData PFunctionRecv = (PRecvData)0x; //Pointer to where the original HandleData() starts -<<<<<< esto
  3.  
  4.  
  5. typedef VOID(WINAPI *PSendData)(BSTR* data);   //Pointer Definition - Takes BSTR* and returns VOID
  6. PSendData PFunctionSend = (PSendData)0x; //Pointer to where the original SendData() starts -<<<<<< esto
  7.  
  8.  
  9. typedef int(WINAPI *PLoop)();
  10. HMODULE dllModule = LoadLibraryA("MSVBVM60.DLL");
  11. PLoop PFunctionLoop = (PLoop)GetProcAddress(dllModule, "rtcDoEvents");
  12.  
  13.  
  14. void Hooks(AORConfig _initialConfiguration)
  15. {
  16.    initialConfiguration = _initialConfiguration;
  17.    OutputDebugStringW(ConvertStringToBSTR(_initialConfiguration.playerName));
  18.    DetourTransactionBegin();
  19.    DetourUpdateThread(GetCurrentThread());
  20.    DetourAttach(&(PVOID&)PFunctionRecv, &MyRecvData);      // Hook DataHandler() to MyRecvData()
  21.    DetourAttach(&(PVOID&)PFunctionSend, &MySendData);      // Hook SendData() to MySendData()
  22.    DetourAttach(&(PVOID&)PFunctionLoop, &MyLoop);          // Hook DoEvents AKA Loop() to MyLoop()
  23.    DetourTransactionCommit();
  24. }
  25.  
  26.  
  27. VOID WINAPI MyRecvData(BSTR dataRecv)
  28. {
  29.    __asm PUSHAD;
  30.    __asm PUSHFD;
  31.  
  32.    try
  33.    {
  34.        OutputDebugStringW(ConvertStringToBSTR("Recv: " + ConvertBSTRToString(dataRecv)));
  35.  
  36.        if (StartsWith(dataRecv, L"PAIN"))
  37.        {
  38.  
  39.        }
  40.  
  41.        //
  42.        //// Returns control to the Original Function
  43.        //
  44.        PFunctionRecv(dataRecv);
  45.    }
  46.    catch (int e)
  47.    {
  48.        OutputDebugStringW(ConvertStringToBSTR("ERROR-> Place: HandleData()  Id: " + to_string(e)));
  49.    }
  50.  
  51.    __asm POPFD;
  52.    __asm POPAD;
  53.  
  54. }


para obtener el send estoy abriendo la app con ollydbg y al loguearme el breakpoint me lo marca perfecto



luego me marca el data buffer ahi debajo y hasta aqui llego no logro obtener ese pointer estatico que seria el dato que necesito para hacerlo funcionar y empezar a modificar los paquetes que envia



lo mismo para el recibir los datos llego hasta esa parte y no se como proseguir no obtengo nada que me sirva alguien puede ayudarme?




En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Problema con pointer string
« Respuesta #1 en: 20 Diciembre 2022, 20:57 pm »

lo hice con una guia que encontre de otro juego pero se me esta complicando obtener los send y recv los pointer

Por lo que ví estás definiendo mal los punteros y las funciones hookeadas, cuando deberían ser algo como lo siguiente según Microsoft:
Código
  1. int WSAAPI send(
  2. SOCKET     s,
  3. const char *buf,
  4. int        len,
  5. int        flags
  6. );
  7.  
  8. int recv(
  9. SOCKET s,
  10. char   *buf,
  11. int    len,
  12. int    flags
  13. );

Código
  1. typedef VOID(WINAPI *PRecvData)(BSTR data);    //Pointer Definition - Takes BSTR and returns VOID
  2. PRecvData PFunctionRecv = (PRecvData)0x; //Pointer to where the original HandleData() starts -<<<<<< esto
  3.  
  4.  
  5. typedef VOID(WINAPI *PSendData)(BSTR* data);   //Pointer Definition - Takes BSTR* and returns VOID
  6. PSendData PFunctionSend = (PSendData)0x; //Pointer to where the original SendData() starts -<<<<<< esto
  7.  
  8.  
  9. typedef int(WINAPI *PLoop)();
  10. HMODULE dllModule = LoadLibraryA("MSVBVM60.DLL");
  11. PLoop PFunctionLoop = (PLoop)GetProcAddress(dllModule, "rtcDoEvents");

No sé acerca de ni conozco ni sé para que sirve rtcDoEvents. ¿Pero el resto de las funciones hacia donde apuntan?


B#


« Última modificación: 20 Diciembre 2022, 20:59 pm por BloodSharp » En línea



usualp

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Problema con pointer string
« Respuesta #2 en: 20 Diciembre 2022, 21:17 pm »

el codigo utiliza libreria vieja

https://github.com/Raagh/AOR.furius

este es el codigo, no logro obtener los pointer de send y recv, intente con ollydbg pero no he podido alguna sugerencia?
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Problema con pointer string
« Respuesta #3 en: 20 Diciembre 2022, 21:48 pm »

no logro obtener los pointer de send y recv, intente con ollydbg pero no he podido alguna sugerencia?

Revisando un cliente del Argentum open source acabé de encontrar la supuesta función que querés hookear:

https://github.com/ao-libre/ao-cliente/blob/24e39b034c282ae66b935bbdb2982898007f8c0c/CODIGO/Red/clsSocket.cls#L1139

El tema es que revisando ese código la función parece que copia de un buffer los datos a lo que supongo que es una función llamada arrData, que de nuevo supongo este devuelve el puntero a la dirección de memoria del buffer a enviar...

Viendo como termina dicha función llama a SendBufferedData que verifica si el socket es TCP o UDP y llama a su respectiva función para enviar datos:

https://github.com/ao-libre/ao-cliente/blob/24e39b034c282ae66b935bbdb2982898007f8c0c/CODIGO/Red/clsSocket.cls#L1260-L1276

Para finalizar llama si es UDP a api_sendto o si es TCP llama a api_send las cuales son alias de sendto y send respectivamente:

https://github.com/ao-libre/ao-cliente/blob/24e39b034c282ae66b935bbdb2982898007f8c0c/CODIGO/Red/clsSocket.cls#L32-L33

Resumiendo, no creo que puedas hookear directamente las APIs SendData con excepción a que encuentres de alguna manera mediante alguna firma la función en tiempo de ejecución, esto asumiendo a que el juego esté compilado en Native-Code.

Podrías intentar hookeando como mencioné anteriormente send y sendto y ver si el puntero del buffer se puede modificar desde ahí.

Y como mencioné anteriormente, podés buscar las referencias de las definiciones en la página learn.microsoft.com

EDIT: para recibir los datos hay referencias a la función recv y recvfrom:

https://github.com/ao-libre/ao-cliente/blob/24e39b034c282ae66b935bbdb2982898007f8c0c/CODIGO/Red/clsSocket.cls#L36-L37


B#
« Última modificación: 20 Diciembre 2022, 21:54 pm por BloodSharp » En línea



usualp

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Problema con pointer string
« Respuesta #4 en: 20 Diciembre 2022, 21:53 pm »

usa tcp
en verdad ese codigo que pusiste de argentum utiliza protocolo binario
este utiliza formato de texto recibe paquetes tipo "pain" como el que publique
teoricamente ese codigo estaba funcionando en un servidor llamado furiusao
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Problema con pointer string
« Respuesta #5 en: 20 Diciembre 2022, 22:07 pm »

usa tcp
Sea como fuese, sería conveniente hookear las 4 funciones de conexión que mencioné anteriormente por si las dudas...

en verdad ese codigo que pusiste de argentum utiliza protocolo binario
este utiliza formato de texto recibe paquetes tipo "pain" como el que publique
teoricamente ese codigo estaba funcionando en un servidor llamado furiusao
Teoricamente, ¿Pero pudiste al menos interceptar los paquetes al menos para verificarlo? Digo, porque si hablamos en teoricamente eso pudo haber cambiado en los últimos 4 años.


B#
En línea



usualp

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Problema con pointer string
« Respuesta #6 en: 20 Diciembre 2022, 22:26 pm »

me refiero a que funciona el metodo porque lo estan usando, probablemente los packets hayan cambiado
solo me interesa la lectura, pero no entiendo como se obtienen esos pointer de send y recv que marca en el codigo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pointer a función (C y VB6)
Ingeniería Inversa
calk9 3 2,814 Último mensaje 14 Noviembre 2013, 02:43 am
por calk9
C# Pointer variables Safe
.NET (C#, VB.NET, ASP)
Miseryk 1 1,761 Último mensaje 13 Noviembre 2016, 14:06 pm
por fran800m
Problema al copiar string a un arreglo string dinamico VS2013 ultimate
Programación C/C++
raver1983 1 2,244 Último mensaje 7 Febrero 2017, 01:11 am
por raver1983
Problema con un string
.NET (C#, VB.NET, ASP)
TickTack 7 3,307 Último mensaje 23 Mayo 2017, 18:13 pm
por Serapis
cast Void pointer en c « 1 2 »
Programación C/C++
prosebas 15 7,678 Último mensaje 26 Abril 2021, 22:57 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines