C语言游戏外挂:简单DLL注入游戏

通过C语言编写一个DLL文件和一个EXE文件,其中DLL包含作弊功能,运行EXE后将DLL注入游戏,使得游戏仅靠自身进程便可以实现作弊功能。

对象分析

要用的API函数简单介绍

编写测试效果

总体评价

对象分析

注:本次游戏对象为Super Mario XP

没有更新所以可用任意版本 ,

试玩发现人物血量最大为10,心最大为99,命最大为99。

要用的API函数简单介绍

HANDLE CreateThread(LPSECURITYATTRIBUTES, SIZET, LPTHREADSTARTROUTINE, LPVOID, DWORD ,LPDWORD

CreateThread 将在主线程的基础上创建一个新线程

LPVOID VirtualAllocEx(HANDLE, LPVOID, SIZE_T, DWORD, DWORD);

VirtualAllocEx 向指定进程申请内存,其中flAllocationType取值MEM_COMMIT表示写入物理存储而非磁盘交换内存

FARPROC GetProcAddress(HMODULE hModule, LPCSTR);

GetProcAddress 检索指定的动态链接库(DLL)中的输出库函数地址

HANDLE CreateRemoteThread(HANDLE, LPSECURITYATTRIBUTES, SIZET, LPTHREADSTARTROUTINE, LPVOID, DWORD, LPDWORD);

CreateRemoteThread 创建一个在其它进程地址空间中运行的线程

编写测试效果

打开游戏

运行外挂

打开注入器Injecter,注入器注入DLL后自动退出,仅剩下游戏,此时游戏已具备作弊效果(锁定血量)

检测有效

//

// 04简单DLL注入游戏(作弊模块DLL部分)

// C/C++

//

#include

#defineDllfuncitonextern"C" __declspec(dllexport)//以C方式导出

Dllfuncitonvoid lockdata();

Dllfunciton DWORD WINAPI inject(LPVOID);

void lockdata(){

while(true){

DWORD hp =10;

DWORD heart =99;

DWORD life =99;

DWORD addr3 =0x004282a2;

DWORD res =WriteProcessMemory(INVALID_HANDLE_VALUE,(LPVOID)addr,&hp,4,0);//写入自身修改游戏数据

DWORD res2 =WriteProcessMemory(INVALID_HANDLE_VALUE,(LPVOID)addr2,&heart,4,0);

DWORD res3 =WriteProcessMemory(INVALID_HANDLE_VALUE,(LPVOID)addr3,&life,4,0);

Sleep(1000);

}

}

DWORD WINAPI inject(LPVOID){

lockdata();

returntrue;

}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){

switch(ul_reason_for_call){

case DLL_PROCESS_ATTACH:{

::DisableThreadLibraryCalls(hModule);//创建线程包含死循环,为防卡死必须设置

CreateThread(NULL,0, inject, NULL,0, NULL);

}

break;

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

default:;

}

returntrue;

}

//

// 04简单DLL注入游戏(注入器EXE部分)

// C/C++

//

#include

#include

#include

#include

usingnamespace std;

HWND hwnd = NULL;

DWORD processid = NULL;

HANDLE hprocess = NULL;

PVOID procdlladdr = NULL;

char dllname[25]="cheatDLL";

char loadfunc[25]="LoadLibraryA";

FARPROC loadfuncaddr = NULL;

HANDLE hfile;

void getwindow(){

hwnd =::FindWindow(NULL,"Super Mario XP");

if(hwnd == NULL)

MessageBox(NULL,"找不到游戏","错误", MB_OK);

GetWindowThreadProcessId(hwnd,&processid);

hprocess =OpenProcess(PROCESS_ALL_ACCESS,FALSE,processid);

if(hprocess == NULL)

MessageBox(NULL,"打开游戏失败","错误", MB_OK);

}

void inject(){

int size = strlen(dllname)+5;

procdlladdr =::VirtualAllocEx(hprocess, NULL, size, MEM_COMMIT, PAGE_READWRITE);//向目标申请空间,得到新空间地址

if(procdlladdr == NULL)

MessageBox(NULL,"申请空间失败","错误", MB_OK);

DWORD writenum;

::WriteProcessMemory(hprocess, procdlladdr, dllname, size,&writenum);//向新空间写入要注入的DLL名称

loadfuncaddr =::GetProcAddress(::GetModuleHandle("kernel32.dll"), loadfunc);//获得LoadLibraryA的地址,在任何进程空间都一样

HANDLE hthread =::CreateRemoteThread(hprocess, NULL,0,(LPTHREAD_START_ROUTINE)loadfuncaddr,(LPVOID)procdlladdr,0, NULL);

//新建线程执行LoadLibrary参数是已在目标进程新空间写入的DLL名称,注意这个函数在64位下无法成功

::WaitForSingleObject(hthread, INFINITE);

::CloseHandle(hthread);

::CloseHandle(hprocess);

}

int main(){

getwindow();

inject();

return0;

}

DLL注入可使作弊模块在程序自身“名义”下进行作弊,提高作弊成功率,然而载入的DLL容易被DLL检测发现。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容