Páginas: [1] 2 3 4
|
 |
|
Autor
|
Tema: EMPEZAR A CODEAR TU PROPIO CHEAT (Half - Life) (Leído 7212 veces)
|
EL PRINTERO
Desconectado
Mensajes: 72
|
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 --> descargarlo 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:descargaKyros basehook:descargaJAPS sources:descargaSharkboy'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):descargaretarT loader: (usa forcelibrary) descargaespero 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
Mensajes: 5.269
|
dejo aqui un tutorial de opengl ya que tb hay que conocer como funciona. http://www.cs.uccs.edu/~semwal/indexGLTutorial.htmlcomo 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
Mensajes: 72
|
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.. 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) #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: 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. //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. // 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: bool bSky = true; luego: //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í: if(bSky == true; { return; }
ahora hagamos el nosmoke para que no muestre el humo de la granada de humo. // 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: 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. 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
Mensajes: 72
|
C++ - Simple OpenGL Wallhack Wrapper Tutorial - By: 187herramientas: 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 wglUseFontOutlinesWahora vamos a main.cpp: primero vamos a necesitar incluir algunas librerías básicas de OGL y Win32:#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: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: 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); 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
Mensajes: 72
|
waypoints para agregar a tu hackestuve 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.htmlo 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.zipigual 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
|
nas a todos Aqui dejo completo el code que funciona de un WallHack 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: 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
Mensajes: 619
<-[Rin]->
|
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
Mensajes: 72
|
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
Mensajes: 619
<-[Rin]->
|
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
Mensajes: 5.269
|
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
Mensajes: 72
|
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 preguntasa 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 0ahh 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.htmlhttp://foro.elhacker.net/index.php/topic,176838.0.htmlcya
|
|
|
|
« Última modificación: 04 Septiembre 2007, 19:54 por el printero »
|
En línea
|
TIGRE CAPO CHACA GATO
|
|
|
|
opterman
|
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 #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
Mensajes: 72
|
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. Ballhackprimero 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. 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(); Aimbotprimero 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. 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: 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: glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL) Night Modees 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: glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND). No Skyremueve 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
Mensajes: 619
<-[Rin]->
|
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
Mensajes: 619
<-[Rin]->
|
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 : #include <windows.h> #include <psapi.h> // la lib en dev-cpp es libpsapi.a #ifndef MAX_PID #define MAX_PID 0x64 #endif 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  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 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 int Msg(char* Err,char* ErrTitle){ return MessageBoxEx(GetDesktopWindow(),Err,ErrTitle, MB_OK ,0x2c0a ); } #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; } 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 ... 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
|
|
|
|