elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 21:56  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++
| | |-+  EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Imprimir
Autor Tema: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)  (Leído 7212 veces)
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« en: 18 Agosto 2007, 21:45 »

bueno para empezar es bueno tener y ir conociendo la SDK del half life 1, sdk es la standart development kit, osea es el proyecto en c++ del juego supuestamente, lo digo porque no creo que sea un proyecto completo, pero alcanza para lo que se necesita.

SDK --> descargar

lo cheats pueden ser para steam, por lo tanto deben ser indetectables ante la protección vac2 y todos sus checkeos. si es para nonsteam es menos problema, aunque deberá ser indetectable ante nuevos anticheats como el sXe injected...

según tengo entendido los cheats pueden ser opengl hacks o client hooks, osea el primero usa hooks de las funciones opengl que se usan para imbot, wall, etc, y el segundo usa hooks a las funciones cliente, y requiere conocimiento del motor del juego..

escribir un cheat desde cero me imagino que debe ser tarea para un experto, o más bien tarea para alguien que domine un lenguaje como c++

entonces podemos empezar mirando las bases de otros cheats ya hechos, y que son detectados pero al comprender y revisar sus códigos nos da ideas para modificarlos, o crear uno nuevo.

lo básico a saber para empezar a hacer un cheats es saber sobre:

_ dll injection (inyección de dll)
_ hookear funciones (api, clientes, opengl, etc)
_ otros conocimientos que ayuden

para empezar mirando las bases, yo dejo algunas de las que hay:

OGC basesource:

descarga


Kyros basehook:

descarga


JAPS sources:

descarga


Sharkboy's chapman source:
descarga

podemos usar una dll con su loader para inyectar en el proceso, sino sólo un loader lo que sería usar otra técnica de inyección.

sobre crear dll es cuestión de leer tutoriales, lo mismo con la inyección. para crear el loader o inyector como sea, bueno estos son unos ejemplos de proyectos de loaders que deben servir de ejemplos, aunque sería mejor hacer uno.

loader del OGC (incluye la dll):

descarga



retarT loader: (usa forcelibrary)

descarga


espero ampliar más la información, y además siempre hay alguien que sabe del tema espero que colaboren tmb. traten de compilar los sources aver que errores da así los podemos discutir, y recuerden que todo es cuestión de mirar los códigos para aprender a modificarlos y crear cosas nuevas.

...........................................................................

saludos
« Última modificación: 15 Septiembre 2007, 09:06 por el printero » En línea

TIGRE CAPO
CHACA GATO
®®
Colaborador

Conectado Conectado

Mensajes: 5.269


Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #1 en: 19 Agosto 2007, 22:07 »

dejo aqui un tutorial de opengl ya que tb hay que conocer como funciona.

http://www.cs.uccs.edu/~semwal/indexGLTutorial.html

Citar
como gustes, yo los ayudo siempre que haya una pregunta concreta y/o un pedacito de code de por medio...

ya hay codigo de un wallhack simple que he escrito yo desde 0 para opengl, en unos temas un poco mas abajo, nadie quiere que le den nada ya hecho. estamos aqui para aprender y crear algo de documentacion enespañol.
En línea
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #2 en: 19 Agosto 2007, 23:18 »

si esa es nuestra intención, crear una base de todo esto en español, y que cada uno aprenda a hacer su propio hack ya sea en asm o en visual c..
y si alguno no sabe nada de programación que igual participe haciendo preguntas y eso, si algunos tienen conocimientos básicos (estoy dentro) o se manejan muy bien con un lenguaje mucho mejor pero la intención es que todos aprendan desde este thread.

------------------------

tutorial de crear tu hack con wrapper:

el hack va a incluir:

//-----
Menu
Cvars Description and struct
2 Wallhacks
No Sky
No Smoke
Lambert
//-----


para crear la struct cvar con el fin de tener accesibilidad a las vars fácil y rápido y no tener que bindear teclas..
Código:
typedef struct // comenzamos la estructura
{  // esta llave permite que pongamos código en la estructura

int test1;  // int es abreviación de entero, permite al compilador reconocer test1 luego de cvar.
int test2;  // para reconocer "test2" luego de cvar. prefijo
int test3;  // reconocer "test3"

  /* si no ponemos int a las cvars habrá errores de compilación.
    si hacen el lambert y ponen su cvar como cvar.lambert y no ponen en la struct de las cvars "int lambert;" les va a dar error */
}  // la llave de cierre que dice que termina el código en la estructura
cvars_s; // nombre definido struct


pueden poner esta estructura cvar en un archivo de cabecera llamado cvars.h y lo incluyen en el archivo principal (opengl32.cpp)

Código:
#include "cvars.h"

o pueden poner esto arriba de todo en opengl32.cpp.
ahora necesitan poner int a la estructura cvar, llamando a la misma en la parte de las globales:

Código:
cvars_s cvar; 


/*using cvar allows you to use cvar..  If you use cvars_s cvars; cuando hacemos esto vamos a llamarlo como cvars..  esto necesita ser llamado luego de escribir la struct. la seteamos a ==1 para un mejor control*/

ahora vamos a empezar el WH (wallhack),  primero vamos a hacer un wallhack estilo XQZ que usa engfuncs. sólo explicamos como agregarlo.

Código:
//vamos a usar la cvar wallhack.  esto lo hacemos en glBegin porque glBegin es la usada para dibujos de todos los tipos.

if(cvar.wallhack ==1 ) // estructura condicional if que comienza el code
{
cl_entity_s * ent = pEngStudio->GetCurrentEntity();  // lo que esto hace es usar engstudio para encontrar la entidad la cual sería el modelo de un player.
if(ent->player)  // si la entidad es un player.
 {
  glDepthFunc(GL_ALWAYS);
 }
else if (!ent->player) 

// si es lo opuesto a un player (básicamente todo excepto un player) luego hacemos esto

 {
  glDepthFunc(GL_LESS);
 }
} // cerramos con llave y terminamos el WH


todo lo que esto hace es dibujar sólo modelos de players através de las paredes perfectamente. esto no dibujará cajas u otras cosas. ese es el estilo XQZ.

ahora vamos a hacer un WH diferente.. este wallhack usa 3 o 4 funciones ogl distintas, y pueden servir para un coder iniciado.


Código:
// de nuevo hacemos la primer parte del code en glbegin porque esta es en donde son dibujados los wallhacks.

// desde aquí hasta el FIN de la float GetDistance ponelo con tus globales

bool bWalls = false;
int iDrawn = 0;
float origin[] = {0.0f, 0.0f, 0.0f};

float GetDistance(const float *src, const float *dst)
{
   float ang[3] =
   {
       dst[0] - src[0],
       dst[1] - src[1],
       dst[2] - src[2]
   };

   return (float)sqrt(ang[0]*ang[0] + ang[1]*ang[1] + ang[2]*ang[2]);
}

//------------ fin de las globales -------------


// En glBegin
{
   if(mode != GL_TRIANGLES && mode != GL_TRIANGLE_STRIP && mode != GL_TRIANGLE_FAN && mode != GL_QUADS)
   {
       bWalls = true;
       glDisable(GL_DEPTH_TEST); // deshabilita las pruebas de profundidad
       glEnable(GL_BLEND);    // comienza a mezclarse
       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // tipo de mezcla
   }
   else
   {
       bWalls = false;
   }

   glBegin(mode);
}

// En glViewport
{
   iDrawn++;

   glViewport(x, y, width, height);
}

// En glTranslatef
{
   if(iDrawn == 2 && (x != 0 || y != 0 || z != 0))
   { //nos da el nuestro origen en el mundo (gráfico)
       origin[0] = x*-1;
       origin[1] = y*-1;
       origin[2] = z*-1;
   }

   glTranslatef(x, y, z);
}

// En glVertex3fv
{
   if(bWalls)
   {
       float dist = GetDistance(v, origin);
   
       dist /= 3000;
   
       if(dist > 1.0f)            dist = 1.0f;
       else if(dist < 0.1f)    dist = 0.1f;

       dist = 1.0f - dist; //esto es si quieres cambiar como se mezcla (más lejos o más cerca)
   
       glColor4f(1.0f, 1.0f, 1.0f, dist);
   }

   glVertex3fv(v);
}

// En Swapbuffers
{
   iDrawn = 0; // Resetea el contador idrawn  a 0

   wglSwapBuffers(hDC);
}




Ya terminado el wallhack, vamos  a hacer el nosky:
Lo primero es hacer una global de bSky y setearla a true:

Código:
bool bSky = true;

luego:

Código:
//de  nuevo hacemos esto en glBegin.  no hay que explicar mucho de nosky

if (cvar.nosky && (mode==GL_QUADS)) //Quads son usados para dibujar el cielo.
{
 bSky = true;
}
else
 bSky = false;

ahora bajamos en la parte de glVertex3fv y retornamos bsky hasí:

Código:
if(bSky == true;
{
return;
}


ahora hagamos el nosmoke para que no muestre el humo de la granada de humo.

Código:
// una vez más en glBegin

if(cvar.nosmoke)
{
GLfloat smokecol[4]; // esto también es visto en cualquier parte como curcolor (current color)
(glGetFloatv)(GL_CURRENT_COLOR, smokecol);
if((smokecol[0]==smokecol[1]) && (smokecol[0]==smokecol[2]) && (smokecol[0]!=0.0) && (smokecol[0]!=1.0));

// este code lo que hace es obtener el color corriente del humo dibujado (una especie de grisáseo) y luego lo quita.
}

y queda un paso más para el código de nosmoke/nosky. queda limpiar el búffer:

Código:
if ((mask==GL_DEPTH_BUFFER_BIT))
{         
 (glClearColor)(0.0f, 0.0f, 0.0f, 1.0f);
 mask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT;
 (glClear)(mask);
} // explicación abajo de todo

la limpieza de búffer es hecha en glclear. lo que hace al limpiar el búffer es cuando hacés el mezclado como en otros wallhacks..

si no limpiás el búffer, ocurre la mezcla, pasa que se puede mezclar las cosas entre ellas.

con nosky/nosmoke sólo no vas a ver el code andar pero una vez que limpiás el búffer, lo vas a ver andar.

ahora vamos al lambert. este es el lambert que no da color a tus bulletsprites mientras disparás, o si le da color.
It only colors other players a brighter white.

Código:
if(cvar.lambert == 1)
{
if(mode == GL_TRIANGLE_STRIP)  // GL_TRANGLE_STRIP es lo que HL/CS usa para dibujar los players.
 glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);   // dibuja una brillosidad blanca en los players.
}

todo el crédito de este tutorial para:
RedGhost
Azorbix
XanTrax


----------------------------------------------------------

traducido por mi.. disculpen la traducción si es media dificultosa.
« Última modificación: 19 Agosto 2007, 23:39 por el printero » En línea

TIGRE CAPO
CHACA GATO
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #3 en: 20 Agosto 2007, 00:18 »

C++ - Simple OpenGL Wallhack Wrapper Tutorial - By: 187


herramientas: Visual C++ (5.0, 6.0 and 7.0/.Net recomendados)

Descripción: para aprender a hacer un simple hack con opengl via una envoltura (wrapper)

comencemos:
1. abre visual c++
2. Start -> new project/solution y buscamos para hacer una "empty DLL"
   llamaremos al proyecto opengl32

3. agregamos un nuevo archivo .cppand y lo llamamos main.cpp
4. agregamos un nuevo archivo DEF (.def) y lo llamamos opengl32.def.
5. abrimos las propiedades del proyecto y linkeamos las siguientes librerías:
   opengl32.lib glaux.lib glu32.lib

opengl32.def:

este archivo contendrá todas las exportaciones que vas a necesitar de OpenGL.

LIBRARY opengl32
EXPORTS
glAccum
glAlphaFunc
glAreTexturesResident
glArrayElement
glBegin
glBindTexture
glBitmap
glBlendFunc
glCallList
glCallLists
glClear
glClearAccum
glClearColor
glClearDepth
glClearIndex
glClearStencil
glClipPlane
glColor3b
glColor3bv
glColor3d
glColor3dv
glColor3f
glColor3fv
glColor3i
glColor3iv
glColor3s
glColor3sv
glColor3ub
glColor3ubv
glColor3ui
glColor3uiv
glColor3us
glColor3usv
glColor4b
glColor4bv
glColor4d
glColor4dv
glColor4f
glColor4fv
glColor4i
glColor4iv
glColor4s
glColor4sv
glColor4ub
glColor4ubv
glColor4ui
glColor4uiv
glColor4us
glColor4usv
glColorMask
glColorMaterial
glColorPointer
glCopyPixels
glCopyTexImage1D
glCopyTexImage2D
glCopyTexSubImage1D
glCopyTexSubImage2D
glCullFace
glDeleteLists
glDeleteTextures
glDepthFunc
glDepthMask
glDepthRange
glDisable
glDisableClientState
glDrawArrays
glDrawBuffer
glDrawElements
glDrawPixels
glEdgeFlag
glEdgeFlagPointer
glEdgeFlagv
glEnable
glEnableClientState
glEnd
glEndList
glEvalCoord1d
glEvalCoord1dv
glEvalCoord1f
glEvalCoord1fv
glEvalCoord2d
glEvalCoord2dv
glEvalCoord2f
glEvalCoord2fv
glEvalMesh1
glEvalMesh2
glEvalPoint1
glEvalPoint2
glFeedbackBuffer
glFinish
glFlush
glFogf
glFogfv
glFogi
glFogiv
glFrontFace
glFrustum
glGenLists
glGenTextures
glGetBooleanv
glGetClipPlane
glGetDoublev
glGetError
glGetFloatv
glGetIntegerv
glGetLightfv
glGetLightiv
glGetMapdv
glGetMapfv
glGetMapiv
glGetMaterialfv
glGetMaterialiv
glGetPixelMapfv
glGetPixelMapuiv
glGetPixelMapusv
glGetPointerv
glGetPolygonStipple
glGetString
glGetTexEnvfv
glGetTexEnviv
glGetTexGendv
glGetTexGenfv
glGetTexGeniv
glGetTexImage
glGetTexLevelParameterfv
glGetTexLevelParameteriv
glGetTexParameterfv
glGetTexParameteriv
glHint
glIndexMask
glIndexPointer
glIndexd
glIndexdv
glIndexf
glIndexfv
glIndexi
glIndexiv
glIndexs
glIndexsv
glIndexub
glIndexubv
glInitNames
glInterleavedArrays
glIsEnabled
glIsList
glIsTexture
glLightModelf
glLightModelfv
glLightModeli
glLightModeliv
glLightf
glLightfv
glLighti
glLightiv
glLineStipple
glLineWidth
glListBase
glLoadIdentity
glLoadMatrixd
glLoadMatrixf
glLoadName
glLogicOp
glMap1d
glMap1f
glMap2d
glMap2f
glMapGrid1d
glMapGrid1f
glMapGrid2d
glMapGrid2f
glMaterialf
glMaterialfv
glMateriali
glMaterialiv
glMatrixMode
glMultMatrixd
glMultMatrixf
glNewList
glNormal3b
glNormal3bv
glNormal3d
glNormal3dv
glNormal3f
glNormal3fv
glNormal3i
glNormal3iv
glNormal3s
glNormal3sv
glNormalPointer
glOrtho
glPassThrough
glPixelMapfv
glPixelMapuiv
glPixelMapusv
glPixelStoref
glPixelStorei
glPixelTransferf
glPixelTransferi
glPixelZoom
glPointSize
glPolygonMode
glPolygonOffset
glPolygonStipple
glPopAttrib
glPopClientAttrib
glPopMatrix
glPopName
glPrioritizeTextures
glPushAttrib
glPushClientAttrib
glPushMatrix
glPushName
glRasterPos2d
glRasterPos2dv
glRasterPos2f
glRasterPos2fv
glRasterPos2i
glRasterPos2iv
glRasterPos2s
glRasterPos2sv
glRasterPos3d
glRasterPos3dv
glRasterPos3f
glRasterPos3fv
glRasterPos3i
glRasterPos3iv
glRasterPos3s
glRasterPos3sv
glRasterPos4d
glRasterPos4dv
glRasterPos4f
glRasterPos4fv
glRasterPos4i
glRasterPos4iv
glRasterPos4s
glRasterPos4sv
glReadBuffer
glReadPixels
glRectd
glRectdv
glRectf
glRectfv
glRecti
glRectiv
glRects
glRectsv
glRenderMode
glRotated
glRotatef
glScaled
glScalef
glScissor
glSelectBuffer
glShadeModel
glStencilFunc
glStencilMask
glStencilOp
glTexCoord1d
glTexCoord1dv
glTexCoord1f
glTexCoord1fv
glTexCoord1i
glTexCoord1iv
glTexCoord1s
glTexCoord1sv
glTexCoord2d
glTexCoord2dv
glTexCoord2f
glTexCoord2fv
glTexCoord2i
glTexCoord2iv
glTexCoord2s
glTexCoord2sv
glTexCoord3d
glTexCoord3dv
glTexCoord3f
glTexCoord3fv
glTexCoord3i
glTexCoord3iv
glTexCoord3s
glTexCoord3sv
glTexCoord4d
glTexCoord4dv
glTexCoord4f
glTexCoord4fv
glTexCoord4i
glTexCoord4iv
glTexCoord4s
glTexCoord4sv
glTexCoordPointer
glTexEnvf
glTexEnvfv
glTexEnvi
glTexEnviv
glTexGend
glTexGendv
glTexGenf
glTexGenfv
glTexGeni
glTexGeniv
glTexImage1D
glTexImage2D
glTexParameterf
glTexParameterfv
glTexParameteri
glTexParameteriv
glTexSubImage1D
glTexSubImage2D
glTranslated
glTranslatef
glVertex2d
glVertex2dv
glVertex2f
glVertex2fv
glVertex2i
glVertex2iv
glVertex2s
glVertex2sv
glVertex3d
glVertex3dv
glVertex3f
glVertex3fv
glVertex3i
glVertex3iv
glVertex3s
glVertex3sv
glVertex4d
glVertex4dv
glVertex4f
glVertex4fv
glVertex4i
glVertex4iv
glVertex4s
glVertex4sv
glVertexPointer
glViewport
wglChoosePixelFormat
wglCopyContext
wglCreateContext
wglCreateLayerContext
wglDeleteContext
wglDescribeLayerPlane
wglDescribePixelFormat
wglGetCurrentContext
wglGetCurrentDC
wglGetDefaultProcAddress
wglGetLayerPaletteEntries
wglGetPixelFormat
wglGetProcAddress
wglMakeCurrent
wglRealizeLayerPalette
wglSetLayerPaletteEntries
wglSetPixelFormat
wglShareLists
wglSwapBuffers
wglSwapLayerBuffers
wglUseFontBitmapsA
wglUseFontBitmapsW
wglUseFontOutlinesA
wglUseFontOutlinesW



ahora vamos a main.cpp:

primero vamos a necesitar incluir algunas librerías básicas de OGL y Win32:

Código:
#include <windows.h>

#include <gl/gl.h>

#include <gl/glu.h>

#include <gl/glaux.h>



ahora necesitamos setear el entry point de la dll, esto se hace con DllMain:

Código:
BOOL __stdcall DllMain(HANDLE hInst, DWORD dwReason, LPVOID lpReserved)

{

if (dwReason == DLL_PROCESS_ATTACH)

{

//

}

return TRUE;

}

hasta aquí podrías compilar con 0 errores y 0 warnings.
puedes probar la dll, haciendo esto:

Vas a la carpeta del half-life, abres gldrv y luego agregás tu dll en drvmap.txt.
Esto lo hacés escribiendo una línea en el texto que diga "gldrv/opengl32.dll Mi Hack".

si están en win98, podés seleccionar la dll de la lista en video options en el modo opengl y jugar.

ahora si estás en sistemas basados en NT (nt, 2k, xp) vas a necesitar primero ir a la consola bajo modo default luego cerrar la consola e ir a video options y seleccionar tu dll y jugar.

esto lo vas a tener que hacer cada ves que quieras jugar con cheat.
hasta ahora con lo que tenemos el hack no hace nada pero se carga !!!

para agregar nuestro wallhack lo primero que debés hacer es hookear glbegin, esto se hace por medio del siguiente código:

Código:
void __stdcall NEWglBegin( GLenum mode )

{

glBegin(mode);

}

ahora necesitás abrir tu opengl32.def, y en esa lista larga buscar glbegin y hacer que diga glBegin=NEWglBegin en cambio.

ahora debés ser capáz de compilar y esto debería andar, pero esto no hace nada todavía hehe.

para tener un wallhack estilo XQZ2 vas a necesitar agregar el siguiente code antes de glbegin(mode);

Código:
if(mode == GL_TRIANGLE_STRIP)

{

glDisable(GL_DEPTH_TEST);

}
ahora compila el cheat y deberías tener tu WH andando. no vas a poder "togglearlo" pero cuando inicies el WH sólo estará ahí.

ahora ya puedes trabajar en tu propio hack y hacerlo mejor!!
este es el método por envoltura (wrapper) de opengl.

© 187 Tutorials 2002-2003

----------------------------------------

traducido por mi, disculpen si no es muy buena la traducción.
En línea

TIGRE CAPO
CHACA GATO
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #4 en: 24 Agosto 2007, 06:12 »

waypoints para agregar a tu hack

estuve mirando el hack q usaban en ETK q tenía waypoints para moverse, y me acordaba que mi amigo BOY de ese team me contó algo de esto.. lo que se es que para crear waypoints normalmente se puede hacer para los bots, es decir  hablando de counter strike..  hay que contar con podbot, o sino otro similar como E[pod]bot estos son para counter strike, después para DOD por ejemplo está el shrikebot.. etc, etc.. lo que pasa que si nosotros creamos los waypoints por ejemplo con podbot, aquí hay un manual para eso:

http://www.halfrules.net/extras/wayphowto/HowToDoWaypoints_spanish.htm

lo que pasa es que se guarda en la carpeta con la extensión .pwf con podbot..
ahora mi punto es que los hacks chinos que son los únicos que usan esta tecnología de waypoints, por ejemplo en la foto este hack chino se llama hurricane.




vemos la waypoint punteada del hurricane, que fue creada de la misma forma que con podbot seguramente.. pero a lo que yo apunto es que podbot deja su código fuente libre, entonces cualquiera puede crear un programa similar pero adaptado a sus necesidades para crear sus waypoints.. y en base a esto hacer posible vincular este código fuente con el de tu hack para crear un hack como el hurricane..

http://rapidshare.com/files/50922390/podbot_mm_src_v3B18c.zip

igual supongo que con las detecciones de los anticheats de hoy debe ser muy complicado agregar esto a los  hacks, pero es algo posible..

en cuanto a lo de crear waypoints con podbot u otro programa, este sitio es el lugar en donde además están los creadores de estos bots.

http://forums.bots-united.com

« Última modificación: 24 Agosto 2007, 07:04 por el printero » En línea

TIGRE CAPO
CHACA GATO
opterman

Desconectado Desconectado

Mensajes: 84



Ver Perfil WWW
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #5 en: 25 Agosto 2007, 13:37 »

nas a todos

Aqui dejo completo el code que funciona de un WallHack

Código:
engine_studio_api_s *pEngStudio = (engine_studio_api_s*)0x1ed3520;
bool bDrawingScope = false;

void DisableDepthTest(unsigned int mode)
{

if(mode == GL_TRIANGLE_STRIP ||mode == GL_TRIANGLE_FAN)
{
cl_entity_s * curent= pEngStudio->GetCurrentEntity();

if(curent)
{
if(curent->player)
{
glDisable(GL_DEPTH_TEST);
}
else
{
glEnable(GL_DEPTH_TEST);
}
}
else
{
glEnable(GL_DEPTH_TEST);
}
}
else
if( mode != GL_QUADS && mode != GL_QUAD_STRIP && mode != GL_POLYGON )
{
glEnable(GL_DEPTH_TEST);
}

}


en el hook de glBegin:


Código:
float curcol[4];
glGetFloatv(GL_CURRENT_COLOR, curcol);
DisableDepthTest(mode);
if(mode == GL_TRIANGLE_STRIP)glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); 
if ((curcol[0]==curcol[1] && curcol[0]==curcol[2]) && (curcol[0]==0.0 || curcol[0]==1.0)&& curcol[3]==1.0)
bDrawingScope = true;
else
bDrawingScope = false;

if (bDrawingScope) glColor4f(curcol[0],curcol[1],curcol[2],0.0f);
OrigglBegin( mode );




Espero que el code sea de ayuda

Saludos Opterman
En línea
De@th (L1zb3th)
TROLL

Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #6 en: 26 Agosto 2007, 07:55 »

yap, tengo el Loader hecho, no es muy dificil ;)
la cosa es que, falta la dll ........
tampoco es dificil , yo creo que con API HOOK se deberia ...
ahh, no es necesario en si hookear a OpenGL, todo juego tiene un Game Engine, veo mas facil meterselas con el game engine que con OpenGL ..
vamos, que dudo que hagan las llamadas directas a OpenGL...
para eso esta El Motor grafico en el game engine ..
chusmeemos esto por ej :
donde se instala el counter ..

Counter-Strike 1.6\cstrike\dlls\mp.dll

ambient_generic,ammo_338magnum,ammo_357sig,ammo_45acp,ammo_50ae,ammo_556nato,ammo_556natobox,ammo_57mm,ammo762nato ..
cycler,armoury_entity,[...],game_end,game_score,GetEntityAPI..
info_bomb_target,world_spawn,weapon_[***] (ej : weapon_knife) ...

cosas asi ...
ya eso esta, ahora, la cosa es la dll , vere si la hago, el loader esta ...



eso seria como un splash, sin frame border, centrado en pantalla ...
despues, cuando se detecta el game, quedaria asi :



asi que, es simple, uso CERO THREADS, se revisa si esta corriendo el game cada 5 segundos ...
una vez detectado, queda "dormida" la app ....
y cuando se sale, se vuelve a la primera pantalla, para esperar que se abra de nuevo o apriete escape ....

el loader esta hecho en C++
aunque parece mas C, por que solo use clases para la parte grafica ...

eso, que se io ...
comentaba, me da vagancia escribir xD

Au Revoir !
En línea
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #7 en: 26 Agosto 2007, 18:57 »

yukin si ya tens el inyector pone el code asi lo vemos todos sabes porque ni una presentación, ni gráficos ni nada le va a ayudar a nadie,  y este post es para enseñar a hacer hacks, asi que te recomiendo y lo mismo a los demás que lo que hagan lo posteen, si el post es para aprender no para poner cosas personales....

y en general les comento a todos que la parte gráfica no es necesaria, ni se fijen es eso lo importante es la inyección de la dll, osea el inyector..

y sobre crear una dll, lo que se puede hacer es tratar de compilar la base de sharkboy que tiene errores pero se puede quitar algunas cosas.....
« Última modificación: 26 Agosto 2007, 18:58 por el printero » En línea

TIGRE CAPO
CHACA GATO
De@th (L1zb3th)
TROLL

Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #8 en: 26 Agosto 2007, 19:01 »

emm, el unico desesperado por el loader sos vos, tan caliente estas ?
espera a que lo termine, si bien esta hecho, seguramente le pondre una funcion para que lea las instrucciones de que hay que inyectar en un txt...
al menos que lo hagan a la brava con la dll xD

dspues lo posteare, ando ocupado xP

EDIT : Y no andes tirando ***** a mis espaldas, me tenes en el msn, nunca dije que no te daria el source, solo que quiero optimizarlo , eso ...

Au Revoir !
« Última modificación: 26 Agosto 2007, 19:03 por Yuk1 Eiri » En línea
®®
Colaborador

Conectado Conectado

Mensajes: 5.269


Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #9 en: 26 Agosto 2007, 19:14 »

hombre si es por tener un injector propio lo escribo yo en un rato si hace falta no problem.
En línea
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #10 en: 03 Septiembre 2007, 05:13 »

uhh bueno supongo que no tiene caso..

ya esto lo dije mil veces creé este tema para que TODOS aprendan hacer sus
propios hacks para el juego que sea, comenzando por half-life y hasta ahora
un colaborador, yo y alguno que otro aportó y / o le importó este tema..

yuki eiri, pensé en un momento que con vos ibamos a poder hacer algo pero
no sos de las personas que sirven para esto.

acordate de ese día que hablamos te dije vamos a hacer un loader básico desde cero
y explicamos en el foro como se hace uno.. y me demostraste que no tenés ni idea de
hacer tal cosa, empezaste a hacer un motor gráfico, presentaciones y demás boludeces
que no tienen la menor importancia y encima cualquier cosa..

tengo ya loaders básicos que conseguí y en serio no necesito a nadie para nada, pero este
tema si necesita gente que ayude y vos no sos una de ellas, yo fijate siendo un novato de
la programación puse tutoriales y por lo menos demostré actitud comenzando el post, poniendo
cosas, y vos ni siquiera sos capás de explicar en el foro como crear un loader y postear code
ya que supuestamente sabes C
.

ya te lo dije el tema es para explicar como se hacen los hacks, poner código, hacer preguntas
a nadie le sirve que pongamos binarios, para eso vayan y entren a darkcheats.org y bajate el
que mas te guste... si por lo menos captaras la esencia del tema seguramente vas a ser un buen
colaborador..

y ya deja de hablar de mi que el tema es sobre codear hacks no sobre el printero, asike lo digo
ante todos deja de hablar de mi.. si ya ni hablamos por msn...

ahh y por cierto estuve trabajando y no estoy logueado las 24hs a este lindo foro..
pero cuando puedo miro que hay de nuevo y nada más..

demostrá que sos bueno y mandate un buen tut para todos con code y explicaciones y entonces
vas a tener derecho de abrir la boca.. porque por ahora lo digo ante todo el foro el aporte
de yuki eiri a la causa es igual a 0


ahh y advierto para no seguir el puterio, si estás enojado y me querés contestar, hacelo pero
date cuenta de que vas  a quedar mal, primero porque se denota tu enojo, segundo porque no me
importa y tercero desvirtuás el post y sos el ínico desubicado desvirtuador de este tema, nos
harías un favor absteniéndote de teclear en este tema..
 
cualquier cosa msn, porque yo no te borré, así evitamos desvirtuar el tema..

POSTS RELACIONADOS (crear loaders, hooking, etc)

http://foro.elhacker.net/index.php/topic,177791.0.html
http://foro.elhacker.net/index.php/topic,176838.0.html

cya
« Última modificación: 04 Septiembre 2007, 19:54 por el printero » En línea

TIGRE CAPO
CHACA GATO
opterman

Desconectado Desconectado

Mensajes: 84



Ver Perfil WWW
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #11 en: 04 Septiembre 2007, 16:39 »

Lol sinceramente yo no tengo palabra pienso que estas juzgando malamente a yuki, printero pero da = . El caso es que para que no hay mas disputas aqui dejo el code de un loader

Código:
#include <windows.h>
#include <iostream>


int WINAPI InjectLib(DWORD pid, char *laDll){
HANDLE proc;
char buf[MAX_PATH]="";
LPVOID RemoteString;
LPVOID nLoadLibrary;
proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid); //Abrimos el proceso a injectar.

nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");//Se obtiene la Address de LoadLibrary

RemoteString = (LPVOID)VirtualAllocEx(proc,NULL,strlen(laDll),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);//Se reserva memoria para la sting de la ruta de la dll

WriteProcessMemory(proc,(LPVOID)RemoteString,laDll,strlen(laDll),NULL);//se escribe la ruta de la dll en la memoria

CreateRemoteThread(proc,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL); //Se crea un hilo en el proceso que carga la librería

CloseHandle(proc);//Cerramos el proceso
}


int main(int argc, char *argv[]){
DWORD pid;
HWND hCS;
printf("Esperando a iniciar Half Life...\n");
while(1){
hCS = FindWindow("Valve001",NULL);//Buscamos la ventana de Half Life  && Mods
Sleep(100); 
if(hCS!=NULL)break; // Si ha encontrado la ventana del juego sale del bucle
}
printf("Injectando...\n");
GetWindowThreadProcessId(hCS,&pid);//Obtiene el PID desde el handle de la ventana
InjectLib(pid,"MiApi.dll");//Injectamos la dll en el proceso
}

PD:Si no injecta probad a cambiar el valor del sleep

Saludos,Opterman
En línea
EL PRINTERO

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #12 en: 04 Septiembre 2007, 19:47 »

opter ni yo ni los colaboradores juzgamos, sólo vemos que no hay aporte sólo discusión y spam.. si este man supiera tanto como dice porque no nos enseña a todos lo que sabe posteando algo por lo menos, porque hasta ahora no ha hecho nada, cuando cambie de actitud va a ser bien recibido.

bueno ahora que se termina la discusión sin sentido, vamos a continuar con el tema..

volviendo al tema de los hacks opengl voy a poner algunos comentarios traducidos sobre las aplicaciones en los hacks, pero para poder usar esto es necesario tener alguna base como la de crusader o la de panzer que usa engfuncs. esto es sólo un conocimiento de lo que se puede hacer pero es necesario descubrirlo en las bases en donde esto ya está hecho y probado.

Colored Models (AK-hack style)

lo primero que se debe hacer es hookear glBindTextureEXT.

para hacer esto debes hookear wglGetProcAddress.

(para ver esto bajate la wrapper de crusader aquí)

ahora definimos una global de tipo bool, se llama "bMdl".

el dibujo de modelos no empieza en glPushMatrix, pero si en glShadeModel con GL_SMOOTH como parámetro.

luego en glBindTextureEXT si bMdl es true desactivamos GL_TEXTURE_2D de otra forma lo activamos.

entonces en glShadeModel checkeamos por GL_SMOOTH y seteamos bMdla true si eso es cierto.

en glPopMatrix seteamos bMdl a false.

luego en glBindTextureEXT si bMdl es true entonces desactivamos GL_TEXTURE_2D, de otra forma lo activamos.

notar que tienes que dar colores en glVertex3f, justo como en un lambert común.

Ballhack

primero necesitamos un bool, lo llamaremos bBallDrawn.

En glPushMatrix lo seteamos a true y si esto es true en glPopMatrix, dibujaremos el ballhack y seteamos de vuelta a falso.

Código:
glPushMatrix();
glDisable(GL_TEXTURE_2D); // Ballhack has no textures
glDisable(GL_DEPTH_TEST); // Makes the Balls visible through walls
GLUquadricObj *ball;
if(bT)
glColor3f(1.0f,0.0f,0.0f); // Set Ballhack Color
else if(bCt)
glColor3f(0.0f,0.0f,1.0f); // Set Ballhack Color
glTranslatef(x,y,z); // insertar coordenadas aquí
ball=gluNewQuadric();
gluQuadricNormals(ball, GLU_SMOOTH);
gluSphere(ball,5.0f,32,32);
gluDeleteQuadric(ball);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glPopMatrix();

Aimbot

primero necesitás las coordenadas del punto para pocisionar la mira.

la mejor forma de obtener las es probablemente con glVertex3f.

puedes tener el vértice más alto (mayor coordenada en z), de acuerdo al número del vértice dependiendo del modelo, ejemplo el vértice 72 de un modelo leet es el frente de la naríz.

sin embargo tu tienes estas coordenadas, necesitamos transladarlas a coordenadas en pantalla entonces podemos usarlas con SetCursorPos para apuntar.

Código:
glDisable(GL_DEPTH_TEST);
glRasterPos3f(x,y,z); // insert coordinates here
GLfloat curc[4];
glGetFloatv(GL_CURRENT_RASTER_POSITION, curc);
// here we do already have the coordinates but curc[1] is counted from the bottom of the screen, so we need the
// height of the screen to get the numbers SetCursorPos wants
GLfloat coords[4];
glGetFloatv(GL_VIEWPORT, coords);
SetCursorPos(curc[0],coords[3]-curc[1]);
glEnable(GL_DEPTH_TEST);


Whitewalls

remueve todas las texturas de la pantalla, y las convierte texturas blancas.

esto se usa si jugás en un mapa oscuro, entonces se tornará todo blanco.

Sólo requiere glBegin.

Primero checkeamos si el modo no es GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, y GL_QUADS - ( mode != GL_TRIANGLES && mode != GL_TRIANGLE_STRIP && mode != GL_TRIANGLE_FAN && mode != GL_QUADS ).

si eso es cierto, podemos llamar la siguiente declaración:

Código:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)


listo. pero hay otro estilo de whitewalls, que destaca la textura con colores aleatorios.

En vez de checkear por GL_TRIANGLS, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, y GL_QUADS, sólo llamamos a la declaración:

Código:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)

Night Mode

es muy similar al whitewalls. esto remueve todas las texturas, y en cambio te da texturas obscuras.

esto se usa mucho si juegas en un mapa iluminado, esto lo tornará todo obscuro.

requiere sólo glBegin

primero checkeamos si el modo no es GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, y GL_QUADS - ( mode != GL_TRIANGLES && mode != GL_TRIANGLE_STRIP && mode != GL_TRIANGLE_FAN && mode != GL_QUADS ).

si (if) eso es cierto (true), llamamos el siguiente declaración:

Código:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND).


No Sky

remueve el cielo, y deja esa parte negra.

se usa porque si estás usando wireframe o algún otro cheats, el cielo estropea la visión, asike hay que removerlo.

requiere glbegin y glVertex3fv.

primero debemos hacer un booleano, vamos a llamarlo bSky, ahora en gl begin debemos checkear por GL_QUADS como el modo. luego seteamos bSky que sea true. de otra forma (else), lo seteamos a bSky que sea false.

ahora, en glVertex3fv, checkeamos si bSky es cierto (true), luego retorna el que llama sin llamar a la función original.

Wireframe

esto hace todas las texturas (paredes) alambradas. sólo se usa por diversión.

Sólo requiere glBegin.

primero checkeamos si el modo es GL_POLYGON, luego debemos llamar a glPolygonMode como GL_FRONT_AND_BACK, y GL_LINE
(para hacer las texturas lineadas).

ahora debemos setear un color a las lineas. usaremos verde para el caso.

 (glColor3f(0.0f, 0.7f, 0.0f)).

luego de eso debemos cerrar esa declaración if y empezar una nueva.

checkeamos si el modo no es GL_POLYGON

(if(mode != GL_POLYGON)).

ahora necesitamos rellenar las texturas. en cambio de llamar a glPolygonMode como GL_LINE, lo llamamos como GL_FILL.

Wireframe Models

similar al anterior, pero en vex de las paredes afecta a los modelos de jugador.

sólo necesitamos a glBegin.

primero tenemos que limpiar todo el color a negro (0.0).

luego checkear si el modo es GL_TRIANGLE_STRIP, o GL_TRIANGLE_FAN.

debemos llamar a glPolygonMode para ser GL_FRONT_AND_BACK, y GL_LINE.

segundo, checkear el ancho del alambre, para el caso usamos glLineWidth(1.0).

ahora debemos setear el color  (glColor3f) a negro. finalmente, si quieres apagar esta característica, haces 'else'; luego llamas a glPolygonMode para ser GL_FRONT_AND_BACK, y rellenar las texturas.



ejemplo de un modelo alambrado (wired)

después vamos a agregar más explicaciones, pero por el momento sólo recomiendo examinar esas dos bases que puse para darse cuenta como aplicar lo explicado..
« Última modificación: 04 Septiembre 2007, 19:57 por el printero » En línea

TIGRE CAPO
CHACA GATO
De@th (L1zb3th)
TROLL

Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #13 en: 05 Septiembre 2007, 00:40 »

nadie leyo lo de las dlls esas del engine ?
Dll Export Viewer, chusmeen, eso si bien no es guau la informacion, sirve ;)

Au Revoir ^^
En línea
De@th (L1zb3th)
TROLL

Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life)
« Respuesta #14 en: 05 Septiembre 2007, 02:01 »

Bien, voy a ir escribiendo esto con paciencia  :¬¬

Como detectar un Proceso PARA inyectar una DLL...

que conste que hay que poner esto antes del struct :

Código
#include <windows.h>
#include <psapi.h>
 
// la lib en dev-cpp es libpsapi.a
 
#ifndef MAX_PID
#define MAX_PID 0x64
#endif
 

Código
typedef struct iDetect{
DWORD PIDs[MAX_PID];
DWORD BytesReturned;
DWORD BytesRequired;
HANDLE hProcess;
HMODULE hMod;
char* FileName;
int TotalPIDs;
int aux;
} iDetect;
 

esa será nuestra estructura de la que partimos ...
PIDs guardará todos los PIDS de los procesos ejecutandose como maximo van a haber la cantidad de PIDs indicada en MAX_PID...
BytesReturned contiene la cantidad de Bytes regresados por la funcion que devuelve los pids, en general, el tamaño es el de DWORD multiplicado por la cantidad de PIDs ....
con esto vamos a saber la cantidad de PIDs ..
el HANDLE, va a ser algo asi como un handle transitorio, digamos que vamos a hacer OpenProcess()
con HMODULE vamos a listar los modulos cargados, como no nos interesa saber que DLLs (por ahora xP) estan cargadas, solo pedimos el primer modulo, que es el nombre del exe  :rolleyes:
en FileName vamos a tener un pequeño buffer para guardar el nombre del exe que se retorne, va a tener el tamaño de MAX_PATH ...
en TotalPIDs ponemos todos los pids, podria poner la division en el mismisimo bucle, pero no es optimo, es mejor tener 4 bytes mas que se pueden liberar que un procesador mas cargado ...
y aux es para el bucle, o sea, uso vario xD

pasemos a la funcion

Código
HANDLE Detect(char* proc){ // proc es el proceso ....
   iDetect* Data = (iDetect*) malloc(sizeof(iDetect)); // el struct, pedimos memoria
   HANDLE ret = NULL; // lo que vamos a devolver
Data->FileName = (char*) malloc(MAX_PATH); // el nombre del file regresado por el query de modulo, el tamaño es de MAX_PATH (conste que supongo que sabes de punteros y tipos de variables y sus tamaños y blahblah blah, por eso no use sizeof, al pedo ...
char* pProc = (char*) malloc(lstrlen(proc)); // buffer alterno, es para no trabajar sobre proc, seria catastrofico =/ su tamaño es identico a proc
// pProc y filename  se pasan a minusculas para que haya insensibilidad respecto a esto
//sino, strstr recibe Winamp.exe y tiene winamp.exe no va a dar el resultado esperado
lstrcpy(pProc,proc); //  copiamos la string suponiendo que tenes aunque sea un par de bytes libres y por eso no hago un chequeo de error, vagancia xD
 
     if (!EnumProcesses(Data->PIDs,sizeof(DWORD)*MAX_PID,&Data->BytesReturned)){
// si no se puede enumerar procesos .....
// liberemos todo
           free(Data->FileName);
           free(Data->PIDs);
           free(Data);
            return NULL;
           }
// si llegamos aca, si se pudo =)
     Data->TotalPIDs = (Data->BytesReturned) / (sizeof(DWORD)); // calculemos los PIDs retornados
// haciendo esto :
// Bytes Retornados / (Tamaño de dword) = cantidad de pids =)
     for(Data->aux=Data->TotalPIDs;Data->aux>0;Data->aux--){ // recorremos la lista
// seh, a la inversa, ya sabran algun dia de estas locuras mias xD
                 Data->hProcess = OpenProcess(
                 PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                 FALSE, Data->PIDs[Data->aux]); // hacemos un OpenProcess()
 
    if (Data->hProcess!=NULL){ // si pudimos obtener handle, pidamos la info, no ocn todos los pids podemos obtener handle
// por que algunas cosas estan protegidas por el sis xD
              if (EnumProcessModules(Data->hProcess, &Data->hMod,
                    sizeof(Data->hMod), &Data->BytesRequired)) { // pedimos la info del primer modulo
                  if (GetModuleBaseName(Data->hProcess,Data-> hMod,
                       Data->FileName,MAX_PATH) == 0x0) Data->FileName[0] = 0x0; // pedimos el nombre del modulo, y vemos si no es exitoso, caso que sea asi, ponemos EOF en el primer caracter, asi seria algo asi como una string vacia
                       }
                       CharLower(Data->FileName); // pasamos a minusculas
                       CharLower(pProc); // idem ....
 
                       if (strstr(Data->FileName,pProc)){ // revisamos el nombre retornado con el proceso que queremos, si es asi entonces ...
                           ret = OpenProcess(PROCESS_ALL_ACCESS,false,Data->PIDs[Data->aux]); // otro openprocess ._. retornamos un HANDLE aparte de ese struct a  liberar ....
                           break; // no sigamos revisando
                           }
          CloseHandle(Data->hProcess); // caso que siga el bucle, cerramos el handle para obtener otro y pedir nombre y caer en el if againnn xD
            }
              }
     CloseHandle(Data->hProcess); // cerremos el handle pendiente si caimos en el break xD
     // a esto lo llamo limpieza profunda =O
     free(Data->FileName);
     FreeLibrary(Data->hMod);
     free(Data->hProcess);
     free(Data->PIDs);
     free(pProc);
     free(Data);
     return ret; // regresemos el NULL asignado arriba si no se encontro nada, o sino el HANDLE ...
}
 

bien, esa funcion esta GORDA por los comments, estaba cero comentado eso, pero lo comente para uds xD

aca pongo las funciones usadas :

puse links a las funciones y como que se borro TToTT
costo muchio xD
pongan en google el nombre asi :
ej :
OpenProcess()
y el primero es ;), asi con cada funcion
ahora, PROBEMOS CON UNA APP DE PRUEBA !!

este es msg, para que no se confundan xD
Código
int Msg(char* Err,char* ErrTitle){
return MessageBoxEx(GetDesktopWindow(),Err,ErrTitle, MB_OK ,0x2c0a );
}
 
 

Código
#include "Process.h" // aca tengo esa func, y Msg es un msgbox, primer arg es el contenido y el segundo el titulo, creacion rapida xD
 
 
int main(int argc,char* argv[]){
if (Detect("Winamp")!=NULL) Msg("App detectada !","Detectado !"); // winamp es parte del nombre completo, por el strstr, es winamp.exe
   Sleep(0x7d0);
   return 1;
}
 
 
 

Código
int Inyect(HANDLE Hand,char dll[]){
   if (Hand==NULL || dll == NULL) return 0;
   HANDLE cap;
   HANDLE hThread;
   DWORD pid ;
   int i;
   HMODULE hKernel;
   LPVOID loadl;
   PVOID amem;
   int dll2 = strlen(dll) + 1;
   if((hKernel=GetModuleHandle("kernel32.dll"))== NULL) return 0;
   if((loadl = (LPVOID)GetProcAddress(hKernel, "LoadLibraryA"))== NULL)    return 0;
   if((amem = (LPVOID)VirtualAllocEx(Hand,NULL, dll2, MEM_COMMIT,PAGE_READWRITE))== NULL)  return 0;
   WriteProcessMemory(Hand,(LPVOID)amem,dll,dll2,NULL);
   hThread = CreateRemoteThread(Hand,NULL,0,(LPTHREAD_START_ROUTINE)loadl,(LPVOID) amem,0,NULL);
   CloseHandle(Hand);
   return 1;
}
 

despues explico y comento el code, esto se puede usar asi ...

Código
if (Inyect(Detect("Winamp.exe"),"HelloWorld.dll")==0) Msg("No se encontro winamp.exe o no se pudo inyectar !","Error !");
[code]
 
Au Revoir !
[/code]
« Última modificación: 05 Septiembre 2007, 02:34 por Yuk1 Eiri » En línea
Páginas: [1] 2 3 4 Ir Arriba Imprimir 
Ir a: