轉(zhuǎn)載請(qǐng)標(biāo)明出處:
https://dujinyang.blog.csdn.net/article/category/9267855
本文出自:【奧特曼超人的博客】
本篇邀請(qǐng)了 “阿七” 做個(gè) 外掛輔助入門篇 分享,之前公眾號(hào)也分享過了。
最近女朋友都在玩游戲,晚上還不理人,剛好近期對(duì)游戲輔助制作很感興趣,打算搞個(gè)輔助讓她失去玩游戲的信心,所以在接下來的幾天里逛了一些論壇、教程 ( 在此膜拜下輔助大神 )。 大致了解到輔助的種類,作為入門新兵,先從動(dòng)作式 ( 所謂動(dòng)作式,就是指用API發(fā)命令給窗口或API控制鼠標(biāo)、鍵盤等 ) 輔助學(xué)起吧,那么就需要找一款合適的簡單網(wǎng)絡(luò)小游戲 ( 很多網(wǎng)絡(luò)游戲有各種保護(hù)什么的 ) 作為入門學(xué)習(xí)了。
先來看下最終的效果圖:
有人可能會(huì)說入門為什么不擼單機(jī)的?
呃... 單機(jī)的擼出來怎么在玩家面前裝X !!! 用輔助不就是為了在對(duì)局中輕松獲勝的那種舒爽嘛!!! 不就是為了 “你確實(shí)很厲害,但我永遠(yuǎn)不會(huì)輸” 的暢快嘛!!! (靈魂三連)
好吧,其實(shí)只是我女朋友不玩單機(jī)游戲……
都說輔助毀游戲,那么目標(biāo) :女友的Xx連連看
Let’s Go!!!
前期準(zhǔn)備:
游戲:xx連連看
工具:VS2019,CE,spy++
環(huán)境:win10
本文只是把xx連連看拿來練手學(xué)習(xí)下如何從內(nèi)存中dump些東西, 所以我們要明白步驟是怎么玩的,下面我們就來拆解下:
玩法機(jī)制,只要將相同的兩張牌用三根以內(nèi)的直線連在一起消除即可。
游戲可能是一個(gè)11*19的二維字節(jié)數(shù)組。
每個(gè)數(shù)組下標(biāo)對(duì)應(yīng)一個(gè)值,值相同,那么牌型就相同。
空著的位置值可能是0。
每個(gè)棋子的寬高一致 ,如果能確定A,B下標(biāo)可消除,那么鼠標(biāo)怎么定位到A,B下標(biāo)的位置,然后點(diǎn)擊呢?
有人很好奇,為什么是1119的二維字節(jié)數(shù)組,因?yàn)橹皇遣孪耄阋部梢?020,只是要明白是個(gè)二維字節(jié)數(shù)組就好。
其它的一頓想當(dāng)然的腦補(bǔ)... (還好已經(jīng)驗(yàn)證,不然絕對(duì)翻車..)
那么核心就是能找到第一個(gè)下標(biāo)的內(nèi)存基址,推出整個(gè)棋盤的數(shù)據(jù),然后通過算法找到相同的數(shù)據(jù),模擬點(diǎn)擊消除即可。
首先,創(chuàng)建房間進(jìn)入練習(xí)模式,前期可能會(huì)翻車,大家先打開CE工具,附加到游戲進(jìn)程,這一步慢慢來,通過不停的搜變化的值、為0的值、大于0的值 (CE搜索教程請(qǐng)自行百度,這里就不敘述了),最終找到第一個(gè)下標(biāo)的內(nèi)存地址。
怎么查看內(nèi)存區(qū)域呢,大家看下面的圖:
Push、Mov、sub這些不懂的下一篇會(huì)出個(gè)簡單的知識(shí)圖譜。
可以看出,前面的分析是正確的,相同的牌型,對(duì)應(yīng)的值是一樣的,空著的地方對(duì)應(yīng)的值為0。棋牌確實(shí)是11*19的字節(jié)數(shù)組。
內(nèi)存地址找到了,那么開始編寫輔助,代碼方面就不詳細(xì)貼了,畢竟寫的也不好。
首先我們需要一個(gè)11*19二維數(shù)組棋盤,還有每個(gè)棋子的屬性,那么,我們就需要定義一個(gè)棋子類,棋子類屬性包含 x坐標(biāo),y坐標(biāo),指針,行,列。
通過spy++定位出第一個(gè)下標(biāo)的x值, y值, 和之前已經(jīng)拿到第一個(gè)棋子的內(nèi)存地址去比較,棋子大小不變,是固定的,那么我們通過第一個(gè)棋子的數(shù)據(jù),可以推斷出整個(gè)二維數(shù)組棋盤數(shù)據(jù),當(dāng)然前提是得匹配得上啦。
話不多說,看代碼:
通過遍歷整個(gè)棋盤,找到相同的兩個(gè)值,通過尋路算法查看是否可以消除,如果可以消除
模擬點(diǎn)擊兩個(gè)棋子的x,y坐標(biāo),實(shí)現(xiàn)消除
這里的鼠標(biāo)點(diǎn)擊是模擬發(fā)送,其實(shí)和輔助性能類的差不多,大致做了個(gè)界面出來,效果圖如下:
Tips: 這幾個(gè)小按鈕,都是控制的消除速度index,這里我們需要用Sleep(index) 函數(shù)去控速,不然會(huì)有點(diǎn)危險(xiǎn),如果是0的話大概就能秒消了。
小插曲: 本著不想太奔放的緣故,之前默認(rèn)是一秒消除一對(duì),測試一段時(shí)間后發(fā)現(xiàn),大概率拿不到第一,連連看大神們是能干過每秒消除一對(duì)的輔助的 (大神的手眼速度讓萌新瑟瑟發(fā)抖~~), 這樣就造成刷分的緩慢,最后只能修改成只要對(duì)手中有人剩余棋子數(shù)小于10,那么這邊index設(shè)置0,實(shí)現(xiàn)秒消,拿第一。
當(dāng)然,這里不是為了刷分啊,我們只是為了學(xué)習(xí)如何dump內(nèi)存而已…
自動(dòng)測試掛了幾天后,勝率從25%刷到了81%,積分從幾千到幾十萬,默默的卸載了此游戲,基本穩(wěn)定,自此連連看輔助就告一段落了。
值得一提的是, 后來女友再也沒玩過這個(gè)游戲了(呵呵噠)。
然鵝...也再也沒有理我了 …
本文申明:本文僅供學(xué)習(xí)與參考之用,請(qǐng)勿用作商業(yè)用途,轉(zhuǎn)載請(qǐng)聯(lián)系作者。
作者:奧特曼超人Dujinyang
來源:CSDN
原文:dujinyang.blog.csdn.net/
版權(quán)聲明:本文為博主杜錦陽原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!