[推荐]如何使用 Visual C++ 5.0 产生自己的 trainer 程式       ★★★★★ 【字体:
如何使用 Visual C++ 5.0 产生自己的 trainer 程式
如何使用 Visual C++ 5.0 产生自己的 trainer 程式
(以修改 StarCraft v1.02 单机版地图作弊为范例 )

1.在 VC++ 5.0 的主选单中选择 File/New

2.选择开启新的 MFC AppWizard(exe) 专案

3.在 Project name: 栏位中输入专案名称 (在此我用 xxx 当范例)

4.接下来会问你应用程式的型态,选择 " Dialog based " !!

5.接下来会问你应用程式是否要连结其他的元件,选择内定值即可

6.接下来会问你是否要在原始程式码中加上注解,选择内定值即可

7.最後选择完成即可产生 "xxx" 这个应用程式专案

8.开启 xxx.cpp 这个原始档案,并找到下列程式段落...

> m_pMainWnd = &dlg;
> int nResponse = dlg.DoModal();
> if (nResponse == IDOK)
> {
>
> // TODO: Place code here to handle when the dialog is
>

9.将以下程式码加在 " // TODO: " 这行後面...( "//" 之後为程式注解)

// ------- 程式由此开始 ------------------------------

HWND hWnd; // hWnd : 该视窗的 handle
DWORD dwx; // dwx : 为存放内 ProcessID 的变数位址
HANDLE hProc; // hProc : 为该程式的行程代码

hWnd = ::FindWindow(NULL,"Starcraft");

// 呼叫 FindWindow 这个 Win32 API 来取得 Starcraft 的 hWnd

::GetWindowThreadProcessId(hWnd,&dwx);

// 呼叫 GetWindowThreadProcessID 这个 Win32 API 来取得 ProcessID
// 正常执行无误後,会将 Process ID 存入 dwx 这个位址中

hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwx);

// 呼叫 OpenProcess 这个 Win32 API 来取得 Process handle
// 正常执行无误後,会将 Process handle 存入 hProc
// PS:
// 接下来呼叫 WriteProcessMemory 来写入记忆体时需要必须要
// 有该 process 的 hProc 才能写入...
//

char buf; // buf: 存放要写入资料的暂存区(1 Byte)

#define CodeAddress1 0x00463dab // 要修改的第一个记忆体位址
#define CodeAddress2 0x00463dac // 要修改的第二个记忆体位址
#define CodeAddress3 0x00463dad // 要修改的第三个记忆体位址

#define NewCode1 (char)0x66 // 第一个位址所要填入的机械码
#define NewCode2 (char)0x33 // 第二个位址所要填入的机械码
#define NewCode3 (char)0xd2 // 第三个位址所要填入的机械码

buf = NewCode1; // 将要写入记忆体的程式码放入暂存区

WriteProcessMemory(hProc, (void *)CodeAddress1, (void *)&buf, 1, NULL);

// 呼叫 WriteProcessMemory 这个 win32 API 来作写入记忆体的动作
// hProc 为 StarCraft 的 Process handle
// CodeAddress1 为要写入的记忆体位址
// buf 为存放要写入机械码的存区
// "1" 代表写入一个 byte

buf = NewCode2;
WriteProcessMemory(hProc, (void *)CodeAddress2, (void *)&buf, 1, NULL);
// 重覆执行上一个写入记忆体的程序(这次是写第二个位址)


buf = NewCode3;
WriteProcessMemory(hProc, (void *)CodeAddress3, (void *)&buf, 1, NULL);
// 重覆执行上一个写入记忆体的程序(这次是写第三个位址)

return TRUE;
// 写完这三个 Bytes 後,离开程式...

// ------- 程式到此停止 ------------------------------

10.储存档案,并选择选单上的 Build/Rebuild All 来编译程式
若没出现错误讯息的话,会在 xxx 专案目录下产生 xxx.exe

注: 由於本范例为教学用,所以程式内容则尽可能省略;重点放在
修改记忆体的 Win32 API 上面,希望能让有兴趣撰写修改程
式而却不得其门而入的使用者能省去不少时间...

文章录入:jack    责任编辑:jack 
  • 上一篇文章:

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    没有相关文章