掃雷外掛

  • 涉及相關(guān)API函數(shù)

SendMessage
PostMessage
FindWindow
GetWindowThreadProcessId
OpenProcess
ReadProcessMemory

  • 涉及相關(guān)工具

CE
Spy++
VC++ 6.0

  • 步驟

1.用CE分析棋盤基址及其寬、高铸本;

①基址: 通過CE以字節(jié)數(shù)值類型反復(fù)“未知初始化數(shù)值”骡显、“更改過的數(shù)值”和“未更改過的數(shù)值”掃描內(nèi)存,對掃描結(jié)果逐一進(jìn)行過濾矗蕊,查看濾后結(jié)果的內(nèi)存與實(shí)際游戲界面顯示情況是否對應(yīng)疙驾,由此進(jìn)行判定基址阀趴;
②寬昏翰、高:通過CE直接搜索對應(yīng)寬度苍匆、高度,然后調(diào)整掃雷級別(即雷面的大信锞铡)锉桑,再次用CE,通過“大于...”窍株、“小于...”對寬高進(jìn)行掃描民轴,從而判定寬、高在內(nèi)存中的地址球订;

2.用CE查看棋盤對應(yīng)內(nèi)存中數(shù)據(jù)的意義后裸;
  • 狀態(tài):查看非雷、未翻開的雷(標(biāo)記冒滩、未標(biāo)記的雷)微驶、翻開的雷(失敗后游戲自動(dòng)翻開)等幾種狀態(tài)對應(yīng)內(nèi)存中的十六進(jìn)制數(shù)值;
狀態(tài) 十六進(jìn)制數(shù)值
未翻開的雷 0x8F
翻開的雷 0x8A
結(jié)束標(biāo)識(shí) 0x10
  • 棋盤坐標(biāo):通過Spy++ 監(jiān)控winmine.exe的鼠標(biāo)左鍵按下开睡、松開消息因苹,查看對應(yīng)棋盤左上角坐標(biāo)及每格的長、寬篇恒;
棋盤坐標(biāo) 十進(jìn)制數(shù)值
橫坐標(biāo)X 10
縱坐標(biāo)Y 53

PS:對于棋盤的左上角坐標(biāo)大致即可扶檐,使用時(shí),需要在此基礎(chǔ)上加上一個(gè)偏移胁艰,以使鼠標(biāo)模擬時(shí)能點(diǎn)擊到小格內(nèi)區(qū)域款筑;

每小格 十進(jìn)制數(shù)值
16
16
3.編制掃雷游戲輔助;

1.輔助源碼
2.主要部分SweeperDlg.cpp

unsigned char gameData[24][32]; //ReadProcessMemory

#define gamex 10 + 8
#define gamey 53 + 8
程序界面及對應(yīng)成員
void CSweeperDlg::OnButtonReaddata() 
{
    // TODO: Add your control notification handler code here
    // TODO: Add your control notification handler code here
    HWND hwnd = ::FindWindow(NULL,"掃雷");
    if (hwnd == 0)
    {
        ::MessageBox(0,"游戲未打開",0,MB_OK);
        return;
    }
    //1005194
    DWORD pid;
    GetWindowThreadProcessId(hwnd,&pid);
    //GetWindowThreadProcessId
    //OpenProcss
    HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    //
    if (hp==NULL)
    {
        ::MessageBox(0,"打開進(jìn)程出錯(cuò)",0,MB_OK);
        return;
    }
    ReadProcessMemory(hp,(LPCVOID)0x1005361,gameData,32*24,&pid);
    int high = 0;
    ReadProcessMemory(hp,(LPCVOID)0x1005338,&high,4,&pid);//字節(jié)大小可為1腾么,2等奈梳,若不為int大小,應(yīng)對high進(jìn)行初始化置0解虱;
    m_gameData.Empty();
    CString strGameData;
    WORD yx[2] = {0,0};
    for (int y = 0 ; y < high ; y++)
    {
        for (int x = 0 ; x <32 ; x++)
        {
            //對于后續(xù)無意義的字節(jié)直接略掉攘须;
            if (gameData[y][x] == 0x10)
                break;
            //格式化
            strGameData.Format("%x,",gameData[y][x]);
            //統(tǒng)一占兩位顯示
            if (strlen(strGameData) == 2)
                strGameData = "0" + strGameData;
            m_gameData += strGameData;
        }
        //一排結(jié)束換行
        m_gameData += "\r\n";
    }
    UpdateData(false);
}
void CSweeperDlg::OnButtonSweeper() 
{
    // TODO: Add your control notification handler code here
    HWND hwnd = ::FindWindow(NULL,"掃雷");
    if (hwnd == 0)
    {
        ::MessageBox(0,"游戲未打開",0,MB_OK);
        return;
    }
    //1005194
    DWORD pid;
    GetWindowThreadProcessId(hwnd,&pid);
    //GetWindowThreadProcessId
    //OpenProcss
    HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    //
    if (hp==NULL)
    {
        ::MessageBox(0,"打開進(jìn)程出錯(cuò)",0,MB_OK);
        return;
    }
    ReadProcessMemory(hp,(LPCVOID)0x1005361,gameData,32*24,&pid);
    int high = 0;
    ReadProcessMemory(hp,(LPCVOID)0x1005338,&high,4,&pid);//字節(jié)大小可為1,2等殴泰,若不為int大小于宙,應(yīng)對high進(jìn)行初始化置0;
    CString strGameData;
    for (int y = 0 ; y < high ; y++)
    {
        for (int x = 0 ; x <32 ; x++)
        {
            //對于后續(xù)無意義的字節(jié)直接略掉艰匙;
            if (gameData[y][x] == 0x10)
                break;
            //不是雷就挖開
            /*
            point[0] = 14+6;
            point[1] = 56+6;
            */
            if (gameData[y][x] != 0x8f)
            {
                WORD yx[2];
                yx[0] = gamex + x*16;
                yx[1] = gamey + y*16;
                ::PostMessage(hwnd,WM_LBUTTONDOWN,1,*(int*)yx);
                ::PostMessage(hwnd,WM_LBUTTONUP,0,*(int*)yx);
            }
        }
    }
}
void CSweeperDlg::OnButtonClick() 
{
    // TODO: Add your control notification handler code here
    WORD point[2];
    HWND hwnd = ::FindWindowA("掃雷",NULL);
    if (hwnd == 0)
    {
        return ;
    }
    point[0] = 14+6;
    point[1] = 56+6;
    
    ::SendMessage(hwnd,WM_LBUTTONDOWN,1,*(int*)point);
    ::SendMessage(hwnd,WM_LBUTTONUP  ,0,*(int*)point);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末限煞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子员凝,更是在濱河造成了極大的恐慌侠畔,老刑警劉巖油狂,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件店枣,死亡現(xiàn)場離奇詭異辟狈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)糖埋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門宣吱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞳别,你說我怎么就攤上這事征候。” “怎么了祟敛?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵疤坝,是天一觀的道長。 經(jīng)常有香客問我馆铁,道長跑揉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任埠巨,我火速辦了婚禮历谍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辣垒。我一直安慰自己望侈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布勋桶。 她就那樣靜靜地躺著甜无,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哥遮。 梳的紋絲不亂的頭發(fā)上岂丘,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音眠饮,去河邊找鬼奥帘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仪召,可吹牛的內(nèi)容都是我干的寨蹋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼扔茅,長吁一口氣:“原來是場噩夢啊……” “哼已旧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起召娜,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤运褪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秸讹,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檀咙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了璃诀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧可。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖劣欢,靈堂內(nèi)的尸體忽然破棺而出棕诵,到底是詐尸還是另有隱情,我是刑警寧澤凿将,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布校套,位于F島的核電站,受9級特大地震影響丸相,放射性物質(zhì)發(fā)生泄漏搔确。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一灭忠、第九天 我趴在偏房一處隱蔽的房頂上張望膳算。 院中可真熱鬧,春花似錦弛作、人聲如沸涕蜂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽机隙。三九已至,卻和暖如春萨西,著一層夾襖步出監(jiān)牢的瞬間有鹿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工谎脯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葱跋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓源梭,卻偏偏與公主長得像娱俺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子废麻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容