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