tft每日頭條

 > 遊戲

 > c語言遊戲輔助教學

c語言遊戲輔助教學

遊戲 更新时间:2024-08-18 07:12:14

在上一篇教程中,我們已經找到雷的基址0x1005361 這次,我們編程實現秒殺的功能

文章末尾有源碼下載

我們先創建一個MFC對話框工程,界面如下所示 edit控件綁定了一個cstring的變量m_strData 還有兩個按鈕 用來獲取數據和秒殺的,獲取數據是為了測試基址

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)1

我們雙擊獲取數據按鈕 來編寫獲取數據的函數

我們獲取數據之前,得用OpenProcess打開掃雷這個進程(并不是雙擊運行掃雷,在這之前應該已經雙擊運行了)這樣才能得到進程句柄,然後通過ReadProcessMemory函數來讀取0x1005361 的數據 但OpenProcess函數需要進程的ID,所以我們得FindWindow得到句柄,然後GetWindowThreadProcessId得到進程ID,

FindWindow函數接受2個參數 窗口類名 和 窗口标題 随便傳哪個都行,不傳的填0或者null ,返回值就是窗口的句柄 ;

比如 我們要找掃雷 HWND hWnd = ::FindWindow(NULL, L”掃雷”);

GetWindowThreadProcessId接受2個參數 第一個是窗口句柄,第二個是DWORD類型的指針,用來保存該窗口對應的進程ID,返回值是線程ID

比如,我們獲取掃雷的PIDDWORD dwPid;

GetWindowThreadProcessId(hWnd, &dwPid);

OpenProcess函數接受3個參數第一個參數是打開的權限,我們傳PROCESS_ALL_ACCESS表示所有權限,第二個參數表示是否繼承,第三個參數是進程ID,返回值是進程句柄,具體的參數含義和宏請查閱MSDN

比如,我們獲取掃雷的進程句柄 HANDLE hWinMine = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);

ReadProcessMemory有5個參數,第一個參數是進程句柄,第二個參數是要讀的内存地址,也就是我們的基址,第三個參數是讀出來存哪裡,也就是緩沖區,第四個參數是讀多少個字節,第五個參數是實際讀到多少個字節

前面幾個函數都沒問題,最後一個函數,我們不知道讀多少個字節,我們先把掃雷調成高級,看看有多少格子

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)2

我們發現是16*30個格子,那麼我們就讀byte data[16][32] = { 0 };個字節吧

byte data[16][32] = { 0 };

ReadProcessMemory(hWinMine, (LPVOID)0x1005361, data, sizeof(data), NULL);

我們再把讀出來的顯示到edit上面去

按鈕獲取數據的完整代碼如下

void CslDlg::OnBnClickedBtngetdata()

{

HWND hWnd = ::FindWindow(NULL, L"掃雷");

if (!hWnd)

{

MessageBox(L"遊戲沒有運行");

return;

}

DWORD dwPid;

GetWindowThreadProcessId(hWnd, &dwPid);

HANDLE hWinMine = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);

if (!hWinMine)

{

MessageBox(L"打開進程失敗");

return;

}

byte data[16][30] = { 0 };

if (!ReadProcessMemory(hWinMine, (LPVOID)0x1005361, data, sizeof(data), NULL))

{

MessageBox(L"讀内存失敗");

return;

}

for (int i = 0; i < 16; i )

{

for (int j = 0; j < 30; j )

{

char szTmp[10] = { 0 };

sprintf_s(szTmp, 10, "x", data[i][j]);

m_strData = szTmp;

m_strData = " ";

}

m_strData = "\r\n";

}

UpdateData(FALSE);

}

我們打開掃雷,然後設置成初級,并打開我們的軟件,點獲取數據看看效果,如下圖,

可以看到根據數據顯示,(若想了解更多,請關注我的博客http://www點dbgpro點com/)第二排的第4個是雷,我們點開卻發現 不是雷,我們在附近找找看有沒有雷

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)3

我們發現,雷在第二個位置 而不是第四個,這是怎麼回事

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)4

看看完整的數據,我們發現最後一列的後面 和最後一行的後面都是10 也就是說遊戲數組裡面存了邊框,那也就是說 遊戲數據應該是[16][32]的數組,

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)5

我們把代碼裡面30改32

…………

byte data[16][32] = { 0 };

if (!ReadProcessMemory(hWinMine, (LPVOID)0x1005361, data, sizeof(data), NULL))

{

MessageBox(L”讀内存失敗”);

return;

}

for (int i = 0; i < 16; i )

{

for (int j = 0; j < 32; j )

…………

然後再編譯看看,我們再獲取數據,由于遊戲沒關,獲取到的是上次的數據,我們看到 紅色背景的雷(我們點爆的)是cc ,其他的雷都變8a了,但是位置都對了

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)6

重新開始了一盤發現也是對的;

那麼我們就可以開始寫秒殺的功能了,思路比較簡單,我們通過判斷數組裡面的值是不是0x8f 不是的話就用 PostMessage發送鼠标左鍵消息

找到所有的雷的行列坐标以後怎麼實現一鍵掃雷呢??

有一個思路是把所有不是雷的地方都點擊一下,這樣遊戲就勝利了。

SendMessage(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(x, y)); x y如何轉化為窗口的x,y。

我的做法是找來了QQ截圖軟件,觀察出像素點信息為,二維數組的棋盤起始偏移為(5,50) 方塊之間的空格為4,方塊為12*12.則 (row, col)對應的窗體偏移為

int x = (col 1) * 16 5;

int y = (row 1) * 16 50;

(由于都是從0開始 所以 1)

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)7

那麼 秒殺那個按鈕的實現代碼如下

void CslDlg::OnBnClickedBtnkill()

{

//先要獲取數據

HWND hWnd = ::FindWindow(NULL, L"掃雷");

if (!hWnd)

{

MessageBox(L"遊戲沒有運行");

return;

}

DWORD dwPid;

GetWindowThreadProcessId(hWnd, &amp;dwPid);

HANDLE hWinMine = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);

if (!hWinMine)

{

MessageBox(L"打開進程失敗");

return;

}

byte data[16][32] = { 0 };

if (!ReadProcessMemory(hWinMine, (LPVOID)0x1005361, data, sizeof(data), NULL))

{

MessageBox(L"讀内存失敗");

return;

}

//秒殺邏輯

for (int i = 0; i &lt; 17; i )

{

for (int j = 0; j &lt; 32; j )

{

if (data[i][j] != 0x8f)

{

int x = (j 1) * 16 5;

int y = (i 1) * 16 50;

::PostMessage(hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(x, y));

::PostMessage(hWnd, WM_LBUTTONUP, 0, MAKELPARAM(x, y));

}

}

}

}

我們編譯 運行,然後打開掃雷 高級的,點秒殺試試

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)8

是不是很酷~

PS:由于我們逆的是老版本的掃雷,下圖的新版本掃雷不能用我們的挂,有興趣的朋友可以自己逆,壓縮包裡面包含了我從xp複制出來的掃雷

c語言遊戲輔助教學(CC遊戲輔助基礎02之掃雷遊戲秒殺功能的實現)9

用鼠标模拟也可實現QQ連連看的外挂,大家可以自己先試試,下一篇我們将實現QQ連連看

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved