VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 7100|回复: 12

[求助] 怎样可以 Hook Opengl的截图?

[复制链接]
发表于 2016-9-9 16:32:35 | 显示全部楼层 |阅读模式
本帖最后由 admin6677 于 2016-9-9 16:40 编辑

[求助] 我想改变Opengl的截图, 怎样 Hook 才能修改呢?

我想着可以Hook住CreateFile,检查是不是图片类型,如果是的再Hook住WriteFile,在里边做自己的操作。

理论是这样,不知道行不行,重要的是代码不会写。 求助

C#如何使用Hook拦截文件读取操作并让被读文件转为我自定的文件


百度找到的资料:
令人纠结的是fopen打开的文件写操纵没有阻碍成功,天然freopen这些重定向的也不成功

本帖被以下淘专辑推荐:

 楼主| 发表于 2016-9-14 17:06:11 | 显示全部楼层
貌似网上有人说可以Hook bitblt这个。不知道行不行。
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2016-9-14 22:13:20 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2016-9-18 08:41:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 08:51:24 | 显示全部楼层
本帖最后由 admin6677 于 2016-9-19 08:58 编辑
JuncoJet 发表于 2016-9-18 08:41
复制像素 http://blog.sina.com.cn/s/blog_43bc29e70101c2ge.html


试过,这样单机可以,但是服务器那边的截图还是看得到原来的界面
  1. int cleaner = 0;
  2. GLvoid * IMGDATA;
  3. int length = 0;
  4. int SS = 0;
  5. int frame = 0;
  6. int cleanframes = 200;
  7. SCREENINFO screeninfo;
  8. void APIENTRY h_glReadPixels (GLint x,  GLint y,  GLsizei width,  GLsizei height,  GLenum format,  GLenum type,  GLvoid *pixels)
  9. {
  10.    if(cleaner)
  11.    {
  12.    DWORD OP;
  13.    SS = 1;
  14.    haxoff();

  15.    for(int i = 0;i < 4;i++)
  16.      glDrawPixels(screeninfo.iWidth, screeninfo.iHeight, 0x1907, 0x1401, IMGDATA);

  17.    SS = 2;
  18.    }
  19.     d_glReadPixels( x, y, width, height, format, type, pixels );

  20. }
  21. void CleanSS()
  22. {
  23.    frame++;
  24.    if(frame > cleanframes){haxoff();}
  25.    if((frame > cleanframes+1 && SS==0) || SS==2)
  26.    {
  27.       {
  28.          d_glReadPixels( 0, 0, screeninfo.iWidth, screeninfo.iHeight, 0x1907,0x1401, IMGDATA );
  29.       }
  30.       haxon();
  31.       frame = 0;
  32.       SS = 0;
  33.    }

  34. }
  35. void APIENTRY h_wglSwapBuffers(HDC hDC)
  36. {
  37.    viewport_c=0;
  38.    if(cleaner)CleanSS();
  39.    d_wglSwapBuffers (hDC);
  40. }
  41. void GetScreen(void)
  42. {
  43.    static bool done = false;
  44.    if(!done)
  45.    {
  46.       screeninfo.iSize=sizeof(SCREENINFO);
  47.       pEngfuncs->pfnGetScreenInfo(&screeninfo);
  48.       centerX = screeninfo.iWidth/2;
  49.       centerY = screeninfo.iHeight/2;
  50.       length = (screeninfo.iWidth*screeninfo.iHeight)*3;
  51.       IMGDATA = (GLvoid *)VirtualAlloc(NULL, length, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  52.       done = true;
  53.    }
  54. }
复制代码
效果图.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 08:52:59 | 显示全部楼层
@acme_pjz  @JuncoJet 其实我在玩cs1.5,就想开作弊器,又不让服务器截图。就那么简单

点评

还有种可能,他截图不是OpenGL的,而是对桌面DC来做的截图。这样可以同时截图到所有的窗口。  发表于 2016-9-19 15:10
这个是我用了上面那段代码实现的过截图。但是服务器的截图还是有透视框的。  发表于 2016-9-19 10:55
OpenGL渲染有先后的,你截图没有外挂显示可能前后顺序不对。  发表于 2016-9-19 10:13
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 15:06:08 | 显示全部楼层
我留一下作弊器的源码
  1. #include <windows.h>
  2. #include <math.h>
  3. #include <GL/gl.h>
  4. #include <GL/glu.h>
  5. #include <GL/glaux.h>
  6. #include <GL/glext.h>

  7. #pragma comment (lib, "opengl32.lib")

  8. //=====================================================================================

  9. typedef struct _ENTITIES{
  10.         FLOAT Origin[3];
  11.         BYTE Visible;
  12.         BYTE Valid;
  13.         POINT ESP;
  14.         POINT Head;
  15.         FLOAT BoxHeight;
  16. }ENTITIES,*PENTITIES;

  17. void (APIENTRY* oglBegin)( GLenum mode );
  18. void (APIENTRY* owglSwapBuffers)( HDC hDC );
  19. void (APIENTRY* oglPopMatrix)( void );
  20. void (APIENTRY* oglPushMatrix)( void );
  21. void (APIENTRY* oglVertex3f)( GLfloat x, GLfloat y, GLfloat z );
  22. void (APIENTRY* oglTranslatef)( GLfloat x, GLfloat y, GLfloat z );
  23. void (APIENTRY* oglViewport)( GLint x, GLint y, GLsizei width, GLsizei height );

  24. extern "C" GLint __stdcall ogluProject(GLdouble objX, GLdouble objY, GLdouble objZ,
  25.                     const GLdouble *model, const GLdouble *proj, const GLint *view,
  26.                          GLdouble* winX, GLdouble* winY, GLdouble* winZ);

  27. HMODULE GL32DLL = NULL;

  28. FLOAT fCamera[3];
  29. FLOAT fLastPosition[3];
  30. FLOAT fHighestVertex[3];
  31. FLOAT fLowestVertex[3];
  32. FLOAT fCenterVertex[3];

  33. INT Viewport[4];
  34. INT MatrixDepth = 0;
  35. INT VertexCount3f = 0;
  36. INT MaxEnts = 0;
  37. double The_Double =
  38.         0.5000000000000000;

  39. BOOL Found_An_Entity = FALSE;
  40. bool Aimthrough = false;

  41. ENTITIES Ents[33] = { NULL };

  42. //=====================================================================================
  43. // MoonBase Chaser343
  44. float WINAPI GetDistance( float * LocationA, float * LocationB )
  45. {
  46.         float DistanceX                = LocationA[0] - LocationB[0];
  47.         float DistanceY                = LocationA[1] - LocationB[1];
  48.         float DistanceZ                = LocationA[2] - LocationB[2];

  49.         return (float)sqrt( ( DistanceX * DistanceX ) + ( DistanceY * DistanceY ) + ( DistanceZ * DistanceZ ) );
  50. }

  51. //=====================================================================================

  52. void APIENTRY nglBegin( GLenum mode )
  53. {
  54.         if( ( mode == GL_TRIANGLE_STRIP || mode == GL_TRIANGLE_FAN )
  55.                 && Found_An_Entity == FALSE )
  56.         {
  57.                 glDepthRange( 0.0f, 0.5f );
  58.                 Found_An_Entity = TRUE;
  59.         }
  60.                        
  61.         if( ( mode == GL_POLYGON || mode == GL_TRIANGLES
  62.                 || mode == GL_QUADS || mode == GL_QUAD_STRIP )
  63.                 && Found_An_Entity == TRUE )
  64.         {
  65.                 glDepthRange( 0.0f, 1.0f );
  66.                 Found_An_Entity = FALSE;
  67.         }

  68.         oglBegin( mode );
  69. }

  70. //=====================================================================================

  71. void APIENTRY nwglSwapBuffers( HDC hDC )
  72. {
  73.         glMatrixMode (GL_PROJECTION);
  74.         glLoadIdentity ();

  75.         glOrtho( 0, Viewport[2], Viewport[3], 0, 0, 1 );
  76.         glDisable( GL_DEPTH_TEST );
  77.         glMatrixMode ( GL_MODELVIEW );

  78.         glPushMatrix( );
  79.         glLoadIdentity();
  80.         glDisable( GL_TEXTURE_2D );
  81.         glTranslatef( 0.375f, 0.375f, 0.0f );

  82.         glEnable( GL_BLEND );
  83.         glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

  84.         for( int i = 0; i < MaxEnts; i++ )
  85.         {
  86.                 float x = (float)Ents[i].ESP.x;
  87.                 float y = (float)Ents[i].ESP.y;
  88.                 float w = 1;
  89.                 float h = Ents[i].BoxHeight;
  90.                 UCHAR r,g,b,a;

  91.                 if( Ents[i].Visible == 0x1 )
  92.                 {
  93.                         r = 20;g = 255;b = 20;a = 200;
  94.                 }
  95.                 else
  96.                 {
  97.                         r = 255;g = 255;b = 20;a = 200;
  98.                 }

  99.                 glColor4ub( r, g, b, a );
  100.                 glBegin(  GL_QUADS );

  101.             glVertex2f( x - h - w, y - h - w );
  102.                 glVertex2f( x + h + w, y - h - w  );
  103.                 glVertex2f( x + h + w, y - h  );
  104.                 glVertex2f( x - h - w, y - h  );
  105.                
  106.                 glVertex2f( x - h - w, y + h - w );
  107.                 glVertex2f( x + h + w, y + h - w  );
  108.                 glVertex2f( x + h + w, y + h  );
  109.                 glVertex2f( x - h - w, y + h  );

  110.                 glVertex2f( x - h - w, y - h );
  111.                 glVertex2f( x - h, y - h );
  112.                 glVertex2f( x - h, y + h  );
  113.                 glVertex2f( x - h - w, y + h  );

  114.                 glVertex2f( x + h, y - h );
  115.                 glVertex2f( x + h + w, y - h );
  116.                 glVertex2f( x + h + w, y + h );
  117.                 glVertex2f( x + h, y + h  );

  118.                 glEnd( );
  119.         }

  120.         float fClosestPos = 999999.0f;
  121.         DWORD TargetX = 0;
  122.         DWORD TargetY = 0;

  123.         for( int i = 0; i < MaxEnts; i++ )
  124.         {
  125.                         float fTemp[3];
  126.                         float ScrCenter[3];

  127.                         ScrCenter[0] = float(Viewport[2] / 2);
  128.                         ScrCenter[1] = float(Viewport[3] / 2);
  129.                         ScrCenter[2] = 0.0f;

  130.                         fTemp[0] = (float)Ents[i].Head.x;
  131.                         fTemp[1] = (float)Ents[i].Head.y;
  132.                         fTemp[2] = 0.0f;

  133.                         float nDist = GetDistance( fTemp, ScrCenter );

  134.                         if( Aimthrough || ( !Aimthrough && Ents[i].Visible == 0x1 ) )
  135.                         if( nDist < fClosestPos )
  136.                         {
  137.                                 fClosestPos = nDist;
  138.                                 TargetX = Ents[i].Head.x;
  139.                                 TargetY = Ents[i].Head.y;
  140.                         }
  141.         }

  142.         if( GetAsyncKeyState( VK_XBUTTON2 ) < 0 )
  143.         {
  144.                 if( TargetX && TargetY )
  145.                 {
  146.                         POINT Target;
  147.                         DWORD ScrX = Viewport[2] / 2;
  148.                         DWORD ScrY = Viewport[3] / 2;

  149.                         if(TargetX > (ScrX)){
  150.                                 Target.x = TargetX - (ScrX);
  151.                                 Target.x /= 4;
  152.                                 Target.x = +Target.x;
  153.                         }

  154.                         if(TargetX < (ScrX)){
  155.                                 Target.x = (ScrX) - TargetX;
  156.                                 Target.x /= 4;
  157.                                 Target.x = -Target.x;
  158.                         }

  159.                         if(TargetX == (ScrX)){
  160.                                 Target.x = 0;
  161.                         }

  162.                         if(TargetY > (ScrY)){
  163.                                 Target.y = TargetY - (ScrY);
  164.                                 Target.y /= 4;
  165.                                 Target.y = +Target.y;
  166.                         }

  167.                         if(TargetY < (ScrY)){
  168.                                 Target.y = (ScrY) - TargetY;
  169.                                 Target.y /= 4;
  170.                                 Target.y = -Target.y;
  171.                         }

  172.                         if(TargetY == (ScrY)){
  173.                                 Target.y = 0;
  174.                         }

  175.                         mouse_event( MOUSEEVENTF_MOVE,
  176.                                 Target.x, Target.y, NULL, NULL );
  177.                 }
  178.         }

  179.         glDisable( GL_BLEND );
  180.                
  181.         glPopMatrix( );
  182.         glEnable( GL_TEXTURE_2D );

  183.         MaxEnts = 0;

  184.         owglSwapBuffers( hDC );
  185. }

  186. //=====================================================================================

  187. void APIENTRY nglPopMatrix( void )
  188. {
  189.         oglPopMatrix( );
  190.         MatrixDepth--;
  191.        
  192.         if( VertexCount3f > 550 && GetDistance( fHighestVertex, fCamera )  > 50.0f
  193.                 && ( fHighestVertex[2] - fLowestVertex[2] ) > 30.0f )
  194.         {
  195.                 double ModelView[16];
  196.                 double ProjView[16];
  197.                 double View2D[3];
  198.                 double Depthcheck[3];
  199.                 GLfloat x = 0.0f, y = 0.0f, pix;
  200.                 FLOAT fVertexH[3];
  201.                 FLOAT fVertexL[3];
  202.                 FLOAT BoxH[2];
  203.                 FLOAT BoxL[2];
  204.                 FLOAT Head[2];

  205.                 fCenterVertex[0] /= VertexCount3f;
  206.                 fCenterVertex[1] /= VertexCount3f;
  207.                 fCenterVertex[2] /= VertexCount3f;

  208.                 fVertexH[0] = fHighestVertex[0];
  209.                 fVertexH[1] = fHighestVertex[1];
  210.                 fVertexH[2] = fHighestVertex[2];
  211.                 fVertexH[2] += 10.0f;

  212.                 fVertexL[0] = fHighestVertex[0];
  213.                 fVertexL[1] = fHighestVertex[1];
  214.                 fVertexL[2] = fHighestVertex[2];
  215.                 fVertexL[2] -= 10.0f;

  216.                 Ents[MaxEnts].Visible = 0x0;

  217.                 glGetDoublev( GL_MODELVIEW_MATRIX, ModelView );
  218.                 glGetDoublev( GL_PROJECTION_MATRIX, ProjView ) ;

  219.                 if( ogluProject( fHighestVertex[0], fHighestVertex[1], fHighestVertex[2] - 4, ModelView, ProjView,
  220.                         Viewport, &View2D[0], &View2D[1], &View2D[2] ) == GL_TRUE )
  221.                 {
  222.                         Head[0] = (float)View2D[0];
  223.                         Head[1] = (int)Viewport[3]-(float)View2D[1];

  224.                         if( ogluProject( fVertexH[0], fVertexH[1], fVertexH[2], ModelView, ProjView,
  225.                                 Viewport, &View2D[0], &View2D[1], &View2D[2] ) == GL_TRUE )
  226.                         {
  227.                                 BoxH[0] = (float)View2D[0];
  228.                                 BoxH[1] = (int)Viewport[3]-(float)View2D[1];

  229.                                 if( ogluProject( fVertexL[0], fVertexL[1], fVertexL[2], ModelView, ProjView,
  230.                                         Viewport, &View2D[0], &View2D[1], &View2D[2] ) == GL_TRUE )
  231.                                 {
  232.                                         BoxL[0] = (float)View2D[0];
  233.                                         BoxL[1] = (int)Viewport[3]-(float)View2D[1];

  234.                                         if( ogluProject( fCenterVertex[0], fCenterVertex[1], fCenterVertex[2], ModelView, ProjView,
  235.                                                 Viewport, &View2D[0], &View2D[1], &View2D[2] ) == GL_TRUE )
  236.                                         {
  237.                                                 x = (float)View2D[0];
  238.                                                 y = (int)Viewport[3]-(float)View2D[1];

  239.                                                 if( ogluProject( fHighestVertex[0], fHighestVertex[1], fHighestVertex[2] + 1, ModelView, ProjView,
  240.                                                         Viewport, &Depthcheck[0], &Depthcheck[1], &Depthcheck[2] ) == GL_TRUE )
  241.                                                 {
  242.                                                         glReadPixels( (int)Depthcheck[0], (int)Depthcheck[1], 1, 1,
  243.                                                                 GL_DEPTH_COMPONENT, GL_FLOAT, &pix );

  244.                                                         if( pix >= Depthcheck[2] )
  245.                                                                 Ents[MaxEnts].Visible = 0x1;

  246.                                                         Ents[MaxEnts].Origin[0] = fCenterVertex[0];
  247.                                                         Ents[MaxEnts].Origin[1] = fCenterVertex[1];
  248.                                                         Ents[MaxEnts].Origin[2] = fCenterVertex[2];
  249.                                                                
  250.                                                         Ents[MaxEnts].ESP.x = (LONG)x;
  251.                                                         Ents[MaxEnts].ESP.y = (LONG)y;

  252.                                                         Ents[MaxEnts].Head.x = (LONG)Head[0];
  253.                                                         Ents[MaxEnts].Head.y = (LONG)Head[1];

  254.                                                         float BoxHeight = BoxL[1] - BoxH[1];

  255.                                                         BoxHeight = BoxHeight / 2;

  256.                                                         if( BoxHeight < 7 )
  257.                                                                 Ents[MaxEnts].BoxHeight = 6;
  258.                                                         else
  259.                                                                 Ents[MaxEnts].BoxHeight = BoxHeight;

  260.                                                         MaxEnts++;
  261.                                                 }
  262.                                         }
  263.                                 }
  264.                         }
  265.                 }
  266.         }
  267.         fCenterVertex[0] = 0.0f;
  268.         fCenterVertex[1] = 0.0f;
  269.         fCenterVertex[2] = 0.0f;
  270. }

  271. //=====================================================================================

  272. void APIENTRY nglVertex3f( GLfloat x, GLfloat y, GLfloat z )
  273. {
  274.         oglVertex3f( x, y, z );

  275.         VertexCount3f++;

  276.         fLastPosition[0] = x;
  277.         fLastPosition[1] = y;
  278.         fLastPosition[2] = z;

  279.         fCenterVertex[0] += x;
  280.         fCenterVertex[1] += y;
  281.         fCenterVertex[2] += z;

  282.         if( z > fHighestVertex[2] || VertexCount3f == 1 )
  283.         {
  284.                 fHighestVertex[0] = fLastPosition[0];
  285.                 fHighestVertex[1] = fLastPosition[1];
  286.                 fHighestVertex[2] = fLastPosition[2];
  287.         }
  288.        
  289.         if(z < fLowestVertex[2] || VertexCount3f == 1)
  290.         {
  291.                 fLowestVertex[0] = fLastPosition[0];
  292.                 fLowestVertex[1] = fLastPosition[1];
  293.                 fLowestVertex[2] = fLastPosition[2];
  294.         }
  295. }

  296. //=====================================================================================

  297. void APIENTRY nglPushMatrix( void )
  298. {
  299.         oglPushMatrix( );
  300.         MatrixDepth++;
  301.         VertexCount3f = 0;
  302. }

  303. //=====================================================================================

  304. void APIENTRY nglTranslatef( GLfloat x, GLfloat y, GLfloat z )
  305. {
  306.         if( x != 0.0f && y != 0.0f && z != 0.0f )
  307.         {
  308.                 fCamera[0] = -x;
  309.                 fCamera[1] = -y;
  310.                 fCamera[2] = -z;
  311.         }
  312.         oglTranslatef( x, y, z );
  313. }

  314. //=====================================================================================

  315. void APIENTRY nglViewport( GLint x, GLint y, GLsizei width, GLsizei height )
  316. {
  317.         Viewport[0] = x;
  318.         Viewport[1] = y;
  319.         Viewport[2] = width;
  320.         Viewport[3] = height;

  321.         if( GetAsyncKeyState( VK_NUMPAD1 ) &1 )
  322.                 Aimthrough = !Aimthrough;

  323.         oglViewport( x, y, width, height );
  324. }

  325. //=====================================================================================

  326. extern "C" __declspec( naked )
  327. GLint __stdcall ogluProject(GLdouble objX, GLdouble objY, GLdouble objZ,
  328.                     const GLdouble *model, const GLdouble *proj, const GLint *view,
  329.                          GLdouble* winX, GLdouble* winY, GLdouble* winZ)
  330. {
  331.     __asm
  332.     {
  333.         MOV EDI,EDI
  334.         PUSH EBP
  335.         MOV EBP,ESP
  336.         PUSH ECX
  337.         SUB ESP,0x40
  338.         FLD QWORD PTR SS:[EBP+0x8]
  339.         LEA EAX,DWORD PTR SS:[EBP-0x40]
  340.         FSTP QWORD PTR SS:[EBP-0x20]
  341.         PUSH EAX                                // /Arg3
  342.         FLD QWORD PTR SS:[EBP+0x10]                // |
  343.         LEA EAX,DWORD PTR SS:[EBP-0x20]            // |
  344.         FSTP QWORD PTR SS:[EBP-0x18]            // |
  345.         PUSH EAX                                // |Arg2
  346.         FLD QWORD PTR SS:[EBP+0x18]                // |
  347.         PUSH DWORD PTR SS:[EBP+0x20]            // |Arg1
  348.         FSTP QWORD PTR SS:[EBP-0x10]            // |
  349.         FLD1                                    // |
  350.         FSTP QWORD PTR SS:[EBP-0x8]                // |
  351.         CALL PartB                                // \glu32.
  352.         LEA EAX,DWORD PTR SS:[EBP-0x20]
  353.         PUSH EAX                                // /Arg3
  354.         LEA EAX,DWORD PTR SS:[EBP-0x40]            // |
  355.         PUSH EAX                                // |Arg2
  356.         PUSH DWORD PTR SS:[EBP+0x24]            // |Arg1
  357.         CALL PartB                                // \glu32.
  358.         FLDZ
  359.         FLD QWORD PTR SS:[EBP-0x8]
  360.         FUCOM ST(0x1)
  361.         FSTSW AX
  362.         FSTP ST(0x1)
  363.         TEST AH,0x44
  364.         JPE jmp1
  365.         FSTP ST
  366.         XOR EAX,EAX
  367.         JMP jmp2
  368.         jmp1: FLD QWORD PTR SS:[EBP-0x20]
  369.         MOV EAX,DWORD PTR SS:[EBP+0x28]
  370.         FDIV ST,ST(0x1)
  371.         FLD QWORD PTR SS:[EBP-0x18]
  372.         FDIV ST,ST(0x2)
  373.         FLD QWORD PTR SS:[EBP-0x10]
  374.         FDIVRP ST(0x3),ST
  375.         FLD QWORD PTR DS:[The_Double]
  376.         FMUL ST(0x2),ST
  377.         FADD ST(0x2),ST
  378.         FMUL ST(0x1),ST
  379.         FADD ST(0x1),ST
  380.         FMUL ST(0x3),ST
  381.         FADDP ST(0x3),ST
  382.         FILD DWORD PTR DS:[EAX+0x8]
  383.         FMULP ST(0x2),ST
  384.         FILD DWORD PTR DS:[EAX]
  385.         FADDP ST(0x2),ST
  386.         FIMUL DWORD PTR DS:[EAX+0xC]
  387.         FIADD DWORD PTR DS:[EAX+0x4]
  388.         MOV EAX,DWORD PTR SS:[EBP+0x2C]
  389.         FXCH ST(0x1)
  390.         FSTP QWORD PTR DS:[EAX]
  391.         MOV EAX,DWORD PTR SS:[EBP+0x30]
  392.         FSTP QWORD PTR DS:[EAX]
  393.         MOV EAX,DWORD PTR SS:[EBP+0x34]
  394.         FSTP QWORD PTR DS:[EAX]
  395.         XOR EAX,EAX
  396.         INC EAX
  397.         jmp2: LEAVE
  398.         RETN 0x30

  399. PartB:
  400.         MOV EDI,EDI
  401.         PUSH EBP
  402.         MOV EBP,ESP
  403.         MOV EAX,DWORD PTR SS:[EBP+0x8]
  404.         MOV ECX,DWORD PTR SS:[EBP+0xC]
  405.         XOR EDX,EDX
  406.         ADD EAX,0x40
  407.         PUSH ESI
  408.         jmpa: FLD QWORD PTR DS:[EAX-0x40]
  409.         MOV ESI,DWORD PTR SS:[EBP+0x10]
  410.         FMUL QWORD PTR DS:[ECX]
  411.         FLD QWORD PTR DS:[EAX-0x20]
  412.         FMUL QWORD PTR DS:[ECX+0x8]
  413.         FADDP ST(0x1),ST
  414.         FLD QWORD PTR DS:[EAX]
  415.         ADD EAX,0x8
  416.         FMUL QWORD PTR DS:[ECX+0x10]
  417.         FADDP ST(0x1),ST
  418.         FLD QWORD PTR DS:[EAX+0x18]
  419.         FMUL QWORD PTR DS:[ECX+0x18]
  420.         FADDP ST(0x1),ST
  421.         FSTP QWORD PTR DS:[ESI+EDX*0x8]
  422.         INC EDX
  423.         CMP EDX,0x4
  424.         JL jmpa
  425.         POP ESI
  426.         POP EBP
  427.         RETN 0x0C
  428.     }
  429. }

  430. //=====================================================================================

  431. void * __stdcall DetourFunc( BYTE *src, const BYTE *dst, const int len )
  432. {
  433.         BYTE *jmp = (BYTE*)malloc(len+5);
  434.         DWORD dwback;

  435.         VirtualProtect(src, len, PAGE_READWRITE, &dwback);

  436.         memcpy(jmp, src, len);        jmp += len;
  437.        
  438.         jmp[0] = 0xE9;
  439.         *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

  440.         src[0] = 0xE9;
  441.         *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;

  442.         VirtualProtect(src, len, dwback, &dwback);

  443.         return (jmp-len);
  444. }

  445. VOID __stdcall THREAD( VOID )
  446. {
  447.                 while( GL32DLL == NULL )
  448.                 {
  449.                         GL32DLL = GetModuleHandleA( "opengl32.dll" );
  450.                         Sleep( 100 );
  451.                 }

  452.                 *(PDWORD)&oglBegin =(DWORD)
  453.                         DetourFunc( (PBYTE)GetProcAddress
  454.                                 ( GL32DLL, "glBegin" ), (PBYTE)nglBegin, 6 );

  455.                 *(PDWORD)&owglSwapBuffers =(DWORD)
  456.                         DetourFunc( (PBYTE)GetProcAddress
  457.                                 ( GL32DLL, "wglSwapBuffers" ), (PBYTE)nwglSwapBuffers, 5 );

  458.                 *(PDWORD)&oglPopMatrix =(DWORD)
  459.                         DetourFunc( (PBYTE)GetProcAddress
  460.                                 ( GL32DLL, "glPopMatrix" ), (PBYTE)nglPopMatrix, 6 );

  461.                 *(PDWORD)&oglPushMatrix =(DWORD)
  462.                         DetourFunc( (PBYTE)GetProcAddress
  463.                                 ( GL32DLL, "glPushMatrix" ), (PBYTE)nglPushMatrix, 6 );

  464.                 *(PDWORD)&oglVertex3f =(DWORD)
  465.                         DetourFunc( (PBYTE)GetProcAddress
  466.                                 ( GL32DLL, "glVertex3f" ), (PBYTE)nglVertex3f, 6 );

  467.                 *(PDWORD)&oglTranslatef =(DWORD)
  468.                         DetourFunc( (PBYTE)GetProcAddress
  469.                                 ( GL32DLL, "glTranslatef" ), (PBYTE)nglTranslatef, 6 );

  470.                 *(PDWORD)&oglViewport =(DWORD)
  471.                         DetourFunc( (PBYTE)GetProcAddress
  472.                                 ( GL32DLL, "glViewport" ), (PBYTE)nglViewport, 7 );
  473. }

  474. //=====================================================================================

  475. BOOL WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpvReserved )
  476. {
  477.         if( dwReason == DLL_PROCESS_ATTACH )
  478.         {
  479.                 DisableThreadLibraryCalls( hModule );
  480.                 CreateThread( NULL, NULL, (LPTHREAD_START_ROUTINE)
  481.                         THREAD, NULL, NULL, NULL );
  482.         }

  483.         return TRUE;
  484. }

  485. //=====================================================================================
复制代码

点评

可以for 1.6吗  发表于 2016-9-20 08:36
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-20 10:09:38 | 显示全部楼层
本帖最后由 admin6677 于 2016-9-20 10:15 编辑

@JuncoJet
这个是1.5和1.6通用的。

点评

但好像这个代码 有多功能键的鼠标 VK_XBUTTON2 可以自动瞄准?  发表于 2016-9-21 11:55
有你这个代码 可以改成自动瞄准  发表于 2016-9-21 11:52
回复 支持 反对

使用道具 举报

发表于 2016-9-20 23:21:37 | 显示全部楼层
挺不错的呢,只是谁的人并不好区分。以前写过另外两种外挂,最简单的切成线条模式,另外种是取消深度贴图。
调整大小 awp_map0000.jpg
调整大小 awp_map0002.jpg
调整大小 awp_map0003.jpg

点评

呵呵,我有可以分警和匪的代码。  发表于 2016-9-21 14:02
回复 支持 反对

使用道具 举报

发表于 2016-9-21 19:53:46 | 显示全部楼层
要能识别敌友就完美了,还有自动瞄准功能好像闭起作用啊。
调整大小 fy_iceworld0000.jpg
调整大小 fy_iceworld0001.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-3-22 05:46

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表