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


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

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Problema con trainer DLL
« en: 13 Enero 2017, 18:24 pm »

Buenas gente, aprendiendo un poco lo que es c++ pero aun asi tengo pocos conocimientos, trate de comentarles todo el funcionamiento del cheat por si alguien en un futuro quiere crear algo parecido y le sirve.
mi problema es que el valor del juego tiene que estar frezeado cuando se modifica osea tiene que estar cambiandose todo el tiempo ejemplo:

Balas: 30 <--- valor real de las balas
Balas: 250 <---- valor modificado de las balas esto tiene que estar modificandose a cada rato que para eso esta el while.

Mi problema mas que nada consiste en que si el address que busca el programa no existe osea su valor es null o ???? como seria en cheat engine porque no estas en partida que no modifique su valor o por ejemplo si estoy en partida y active el cheat y por x motivo lo deje activado y quiero salir de la partida que no lo siga modificando.

no entiendo por que mi codigo hace que crashee el juego a veces y me gustaria saber si
hay alguna forma de ver el valor de los address+pointers con mi codigo o quizas ustedes tengan un metodo mas sofisticado para hacerlo.

Muchas gracias y saludos!

Código
  1. #include <Windows.h>
  2. #include <iostream>
  3.  
  4. bool killshot = false;
  5. bool comprobador = false;
  6.  
  7.  
  8.  
  9. void hack()
  10. {
  11. DWORD comienzo = (DWORD)GetModuleHandle(NULL); //me devuelve el valor de "xxxx.exe"
  12.  
  13.  
  14.  
  15. while (true)
  16. {
  17.  
  18. try
  19. {
  20.  
  21. /* Addres: "xxxx.exe"+02394B24
  22.   offset1: 0x414
  23.   offset2: 0x78C
  24.   esto es igual a la suma de cada uno:
  25.   "xxxx.exe"+02394B24+0x414+0x78C = ("aqui se encuentra el valor a modificar");
  26. */
  27. DWORD puntero = *(DWORD*)(comienzo + 0x02394B24); //trata de acceder al addres ej: "xxxx.exe"+02394B24
  28.  
  29. if ((puntero != 0) && (killshot == true)) //me dice si el contenido de puntero es distinto a 0 y killshot es verdadero entonces...
  30. {
  31. DWORD puntero = *(DWORD*)(comienzo + 0x02394B24); //trata de acceder al addres ej: "xxxx.exe"+02394B24
  32. DWORD puntero1 = *(DWORD*)(puntero + 0x414); //suma el valor obtenido en puntero y le suma otro offset
  33. *(DWORD*)(puntero1 + 0x78C) = 30; //obtiene los address + offsets y le asigna el valor de [30]
  34. comprobador = true; //una vez que modificamos el valor hacemos que comprobador sea verdadero para saber que el cheat esta activado.
  35.  
  36. }
  37.  
  38. if ((comprobador == true) && (killshot == false)) //me dice si el contenido de puntero es distinto a 0 y killshot es falso entonces...
  39. {
  40. DWORD puntero = *(DWORD*)(comienzo + 0x02394B24); //trata de acceder al addres ej: "xxxx.exe"+02394B24
  41. DWORD puntero1 = *(DWORD*)(puntero + 0x414); //suma el valor obtenido en puntero y le suma otro offset
  42. *(DWORD*)(puntero1 + 0x78C) = 1; //obtiene los address + offsets y le asigna el valor de [1]
  43. comprobador = false; //una vez que modificamos el valor hacemos que comprobador sea verdadero para saber que el cheat esta desactivado.
  44.  
  45. }
  46. }
  47.  
  48. catch (const std::exception&)
  49. {
  50.        //no me parecio necesario colocar algo en caso de que genere un error
  51. }
  52.  
  53. }
  54. Sleep(5); //Espera 5 milisegundos
  55. }
  56.  
  57. void comprobar()
  58. {
  59. while (true)
  60. {
  61. if (GetAsyncKeyState(VK_NUMPAD1) & 0x80000) //si se aprieta numpad_1...
  62. {
  63. killshot = !killshot; //me devuelve el valor contrario de killshot, si es true lo da en false (desactiva y activa el cheat)
  64.  
  65. }
  66. }
  67. Sleep(5); //Espera 5 milisegundos
  68. }
  69.  
  70. BOOL WINAPI DllMain(HINSTANCE modulo, DWORD razón, LPVOID reserva)
  71. {
  72. if (razón == DLL_PROCESS_ATTACH)
  73. {
  74. //Estamos dentro del juego
  75. //Thread
  76. //hack();
  77. //comprobar();
  78. CreateThread(0, 0, (LPTHREAD_START_ROUTINE)comprobar, 0, 0, 0);
  79. CreateThread(0, 0, (LPTHREAD_START_ROUTINE)hack, 0, 0, 0);
  80.  
  81. }
  82. else if (razón == DLL_PROCESS_DETACH)
  83. {
  84. //Salimos del juego
  85. }
  86.  
  87. //Devolvemos al juego
  88. return TRUE;
  89.  
  90. }
  91.  


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con trainer DLL
« Respuesta #1 en: 14 Enero 2017, 23:03 pm »

Tienes varias opciones. La primera, comprobar si está en partida. Buscando con CE algún valor relevante o lo que quieras (avisándole tú con una tecla, quizás).

Sobre la forma de ver los valores pues, sofisticado según quien lo vea, pero puedes crear un archivo con ofstream por ejemplo en cualquier ruta.


En línea

Axtrax

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con trainer DLL
« Respuesta #2 en: 15 Enero 2017, 00:14 am »

Claro esa idea se me habia ocurrido el problema es que el valor de la partida necesito cambiarlo para que cuando este en partida figure como que no estoy en ella, asi no me pueden reportar, lo correcto seria hacer:

Código
  1. DWORD puntero = *(DWORD*)(comienzo + 0x02394B24); //trata de acceder al addres ej: "xxxx.exe"+02394B24
  2. DWORD puntero1 = *(DWORD*)(puntero + 0x414); //suma el valor obtenido en puntero y le suma otro offset
  3. DWORD verificar = *(DWORD*)(puntero1 + 0x78C) = 30; //obtiene los address + offsets y le asigna el valor de [30]
  4. comprobador = true; //una vez que modificamos el valor hacemos que comprobador sea verdadero para saber que el cheat esta activado.
  5.  
  6. /*
  7.  
  8. if (verificar != 0) <--- o null
  9. {
  10. active
  11. }
  12. osea que me diga si logra encontrar todo el contenido y si le devuelve un valor distinto a 0... el problema es que no me funciona de esa manera y no entiendo el porque
  13. el programa tendria que verificar todo el tiempo si es o no nulo osea ??? si llega a ser nulo entonces que no haga nada, eso tendria que hacer, quiero enocntrar un metodo que me devuelva el valor que aparece ahi dentro en pantalla asi veo que me devuelve y veo como lo hago, alguna idea en particular de que tipo de codigo tendria que estudiar?
  14.  */
  15.  
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con trainer DLL
« Respuesta #3 en: 15 Enero 2017, 01:41 am »

¿Pero seguro que ese valor es 0 cuando no está en pertida? Cuando CE pone los "???" no significa que sea "nulo". Significa que a esa memoria no puede acceder, sin más.

Si cuando no estás en partida eso aparece con los "???", tendrás que buscar otra forma de verificarlo.

Podrías probar con ReadProcessMemory para tratar de leer de la dirección de memoria y GetCurrentProcess para obtener el HANDLE para pasarlea la otra función.
Si ReadProcessMemory falla, retornará 0.

De todos modos, si encuentras otra forma de verificar si está en partida, mejor.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Un trainer es un Troyano?¿?¿?¿ « 1 2 3 »
Análisis y Diseño de Malware
beholdthe 27 17,700 Último mensaje 11 Septiembre 2011, 05:46 am
por Milo_EscorpioNN
soccer trainer 3.0
Ingeniería Inversa
quinipilar 6 8,632 Último mensaje 18 Agosto 2011, 05:45 am
por .:UND3R:.
Me ayudas con mi trainer? « 1 2 »
Dudas Generales
ElNoob2014 11 6,100 Último mensaje 22 Junio 2014, 17:00 pm
por engel lex
Cheat Enginie en Counter Condition Zero, Problema al crear el trainer
Juegos y Consolas
AsukaHamster 1 3,748 Último mensaje 6 Septiembre 2014, 14:47 pm
por ivancea96
Creacion de un trainer en c++ « 1 2 »
Programación C/C++
patilanz 14 6,220 Último mensaje 25 Octubre 2014, 14:33 pm
por patilanz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines