日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游戏外挂:劫持技术

發布時間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏外挂:劫持技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.? 安裝DetoursExpress30.msi,點擊安裝,安裝后的目錄結構如下:


在sample里面有例子,可供查看使用

2.第一步,打開VS2013開發人員命令提示(E:\Installed\MicrosoftVisual Studio 12.0\Common7\Tools\Shortcuts\VS2013 開發人員命令提示),進入Detours安裝目錄下的src目錄,效果圖如下:


2.新建項目,暫定項目名稱是“劫持”

3.lib知識點

選中解決翻案à添加à新建項目à常規,輸入lib名稱


創建一個1.c文件


同理,添加一個1.h,內容如下

void msg();

添加一個1.c,內容如下:

#include<Windows.h>

?

void msg()

{

??? MessageBoxA(0, "11111", "2222", 0);

}

右擊項目à屬性à常規à配置類型à靜態庫.lib

?

然后,生成à生成lib,執行完成后發現資源目錄里面的Debug目錄下就有lib.lib文件了。

?

如果想在劫持項目中使用自己寫的靜態鏈接庫。右擊劫持項目à屬性à鏈接器à常規à輸入à附加依賴庫,在最前面添加?? lib.lib;??截圖如下:

?

將lib.lib文件放到源文件同級目錄下,截圖如下:

?

在劫持項目里的hello.c文件中添加函數聲明

#include <stdio.h>

#include <stdlib.h>

voidmsg();

?

void main()

{

??? printf("hello world");

??? getchar();

}

這時候運行的時候就可以調用了lib.lib了。

?

動態庫隨時加載,隨時注入。

靜態庫只有在編譯的時候才可以調用。

?

4.使用detours做劫持(將項目改成release模式),其中項目結構如下(下面是劫持自己的過程):

A放文件有:

detours.h?? (src下)

detours.lib? (lib.X86下)

detver.h??? (src下)

將上面的文件放在源文件目錄下即可

B.添加

#include"detours.h"??//載入頭文件

#pragma comment(lib, "detours.lib")//表明要使用靜態庫

?

C:定義一個新的函數取代舊的函數。

int? newsystem(const char *_Command) //新的函數

{

??? return 0;

}

?

D:添加Hook()方法和UnHook();

?

E:設置上detours.lib,方法是:右擊項目à屬性à鏈接器à輸入à附加依賴項。截圖:

?

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#include "detours.h" //載入頭文件

#pragma comment(lib,"detours.lib")//表明要使用的靜態庫

//detour在realse模式生效

//創建函數指針等于地址,加上靜態防止影響其它的源文件

static int(*oldsystem)(constchar* _Command) =system;

?

int?newsystem(constchar * _Command) //新的函數

{

??? return 0;

}

?

//開始攔截

void Hook()

{

??? DetourRestoreAfterWith();//恢復原來狀態,

??? DetourTransactionBegin();//攔截開始

??? DetourUpdateThread(GetCurrentThread());//刷新當前線程

??? //這里可以連續多次調用DetourAttach,表明HOOK多個函數

?

??? DetourAttach((void **)&oldsystem,newsystem);//實現函數攔截

??? DetourTransactionCommit();//攔截生效

}

?

//取消攔截

void UnHook()

{

??? DetourTransactionBegin();//攔截開始

??? DetourUpdateThread(GetCurrentThread());//刷新當前線程

??? //這里可以連續多次調用DetourDetach,表明撤銷多個函數HOOK

??? DetourDetach((void **)&oldsystem,newsystem); //撤銷攔截函數

??? DetourTransactionCommit();//攔截生效

}

?

?

void main()

{

??? system("calc");

??? printf("%p,%p,%p",system, newsystem, oldsystem);

??? Hook();

??? printf("\n%p,%p,%p",system, newsystem, oldsystem);

??? system("calc");

??? getchar();

}

?

現象是加了Hook()之后只彈出了一次計算機窗口,如果去掉了Hook()方法,則出現兩個計算器窗口。

?

5、劫持應用

A:創建一個基于窗口的MFC的應用程序->然后拖一個button->雙擊buttonà添加代碼,事件代碼如下:

void C劫持測試2Dlg::OnBnClickedButton1()

{

??? ?// TODO:? 在此添加控件通知處理程序代碼

???? #include<stdlib.h>

??? ?system("calc");

}

窗口截圖如下:


B:選中解決方案,新建一個常規空項目(項目名稱:劫持其他程序),這時候要寫一個庫劫持MFC程序

將detours中的各種相關文件放到源文件下面。截圖如下:


C:修改項目的依賴項:右擊項目-->屬性-->鏈接器-->輸入-->附加依賴項-


D:將項目改成dll項目,也就是,修改配置屬性里面的常規的目標文件名和配置類型,截圖如下:


1、編寫dll內容:

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#include<string.h>

?

#include"detours.h"

#pragma comment(lib, "detours.lib")

?

static int(*poldsystem)(constchar * _Command) =system;//存儲函數指針地址

?

int? newsystem(const char *_Command)

{

??? //tasklist

??? printf("%s",_Command); //禁止你干活

??? return 0;

}

//開始攔截

void Hook()

{

??? DetourRestoreAfterWith();//恢復原來狀態

??? DetourTransactionBegin();//攔截開始

??? DetourUpdateThread(GetCurrentThread());//刷新當前線程

??? //這里可以連續多次調用DetourAttach,表明HOOK多個函數

??? DetourAttach((void **)&poldsystem,newsystem);//實現函數攔截

??? DetourTransactionCommit();//攔截生效

}

?

//導出函數,可以加載的時候調用

_declspec(dllexport)void? go()

{

??? MessageBoxA(0, "1", "2", 0);

??? Hook();

}

E:生成dll文件,然后使用dllInject工具將它注入到應用里面。

?

6:劫持系統的原理是劫持CreateProcess()函數。同樣也是編寫dll文件。

?

?

?

總結

以上是生活随笔為你收集整理的游戏外挂:劫持技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。