揭密微信跳一跳小遊戲那些外挂 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

揭密微信跳一跳小遊戲那些外挂

發表時間:2021-3-31

發布人:葵宇科技

浏覽次數:34

作者:Hahn, 騰訊高級UI工程師(shī)
商(shāng)業(yè)轉載請聯系騰訊WeTest獲得授權,非商(shāng)業(yè)轉載請注明出處。 
原文(wén)鍊接:http://wetest.qq.com/lab/view/364.html


WeTest 導讀

張小龍:這個(gè)遊戲發布以後,其實它的效果有點超出我們的預期,我們自己開玩笑說,這個(gè)遊戲突然變成了有史以來可(kě)能用戶規模最大的一個(gè)遊戲,因為它的DAU大概到了1點幾億,但同時出現了很多外挂,我沒有想到這麼小的一款遊戲也會有那麼多外挂,我朋友圈的朋友也打出了特别高的分,但是我相信不是他自己打出來的。


1 月(yuè) 15 日微信在廣州召開 2018 年的微信公開課 Pro,張小龍不僅當場玩了一把跳一跳遊戲并取得了900多的高分,還特别提到了跳一跳小遊戲的外挂:

在跳一跳這樣一個(gè)小的遊戲裡面,如(rú)果一個(gè)用戶看到裡面有一堆外挂得了很高的分,對其他一些每天在練習,試圖把自己的水平提高,而打一個(gè)高分的人就很不公平,他可(kě)能就沒有動(dòng)力繼續去練習,繼續超越自己個(gè)人的最高分數。所以這樣一個(gè)行為,外挂行為其實會破壞整個(gè)系統的規則,并且讓規則立即變得失效。

所以,我們這個(gè)小遊戲發布以後,我們就開始花(huā)了很多很多時間來打擊外挂。

本着鑽研技術(shù)的學習态度,我對目前幾款比較火的外挂進行了源碼分析,總結出了它們的一些破解思路(lù),其實這些作者都并非惡意,作為一個(gè)程序員,還有什麼比用技術(shù)挑戰規則,突破極限要有成就感呢(ne)?

一、梳理

跳一跳的遊戲可(kě)以細分為兩步驟:距離(lí)判斷 + 按壓模拟,這兩步都有下(xià)面這些解決方案:

1、距離(lí)判斷:

● 簡單方案:像素點判斷

● 進階方案:OpenCV 圖像分析

2、按壓模拟:

● 簡單方案:adb/wda 指令

● 進階方案:機械臂模拟手指點擊(原創)

下(xià)面逐一介紹這裡的實現方法,非常有意思。

二、距離(lí)判斷

1. 像素點判斷

該方法采用自目前最火的跳一跳小遊戲「輔助程序」:wechat_jump_game。

如(rú)上圖所示,我們先定義了「棋子(zǐ)」和(hé)「棋盤」,需要找到的兩個(gè)目标點用橙色點标注,首先針對棋子(zǐ)的目标點的判斷,可(kě)以這麼做:

相關(guān)代碼:

而針對棋盤中(zhōng)心點的确認的思路(lù)則是這樣的:

當然還有一些其他方法來盡量縮小棋盤中(zhōng)心點的檢測區域,這裡簡單介紹下(xià):

當然,如(rú)果恰好跳到中(zhōng)心點,下(xià)一個(gè)棋盤中(zhōng)間會有白色點,則可(kě)以直接匹配中(zhōng)心點的色值,得到棋盤中(zhōng)心點,這種情況基本百發百中(zhōng):

相關(guān)代碼:

但棋盤種類比較多,形狀也各異,而且棋盤表面并非純色,還有其他顔色,所以即使像素判斷的代碼裡增加了很多特殊 case,依舊不能做到非常完美:

總結一下(xià),目前這個(gè)方案基本沒有太大問(wèn)題,但如(rú)果跳一跳遊戲把背景改成了非線性漸變,或随機飄落一些物體,或棋盤表面更加複雜,那這裡的算法就基本不可(kě)用了。

2. OpenCV 圖像分析

基于像素點的判斷低效而且不夠健壯,而利用 OpenCV 計算機視覺庫則可(kě)以從圖像分析層面進一步簡化判斷邏輯提升效率,首先采用該方法的跳一跳小遊戲「輔助程序」來自 wechat_jump_jump。它是這麼得到棋子(zǐ)的位置的:

相關(guān)代碼:

接下(xià)來找棋盤的中(zhōng)心點,假如(rú)下(xià)一個(gè)棋盤存在白色的示意點,同樣采用上面的模闆匹配方法進行匹配,若匹配不上(匹配值小于某阈值,也許下(xià)個(gè)棋盤本身就是白色,所以灰度圖分辨不出),則采用第二種方案:

這裡是否準确的精髓就在于高斯濾波去除圖像噪音的臨界點以及 Canny 函數中(zhōng)阈值的設定,需要不斷調整參數到最優狀态。

相關(guān)代碼:

三、按壓模拟

1. adb/wda 指令

這兩個(gè)分别是針對 Android 和(hé) iOS 的命令行工具,可(kě)以将手機和(hé)電腦連接起來,并通(tōng)過命令行發送指令,指令中(zhōng)就包含了屏幕的截圖和(hé)按壓模拟。不過 iOS 配置起來稍微麻煩一點,具體操作指引可(kě)以參考 這裡。其核心的命令有:

當然,如(rú)果嫌配置麻煩,還可(kě)以通(tōng)過 Android 的 AirDrop App 或 iOS 的 QuickTime 把手機屏幕投到電腦中(zhōng),然後通(tōng)過 Python 的 Pillow 庫來截取投屏的内容,再做進一步的圖像識别工作。

還有一點值得一提,按壓時間這部分還是有優化的空間,前面提到了跳躍距離(lí)和(hé)按壓時間基本是線性關(guān)系,但越到後面可(kě)以越發現,距離(lí)并非和(hé)按壓時間絕對成線性比例,因為遊戲本身不是一個(gè)純 2D 的平面場景(2.5D),所以我們測量到的直線距離(lí)在 2.5D 場景中(zhōng)是有變化的,雖然影響不大,但在遊戲後期棋盤越來越小,距離(lí)越來越大時,容易凸現出問(wèn)題來,所以關(guān)于距離(lí)的計算有幾種不同的解決:

拟合函數的細節可(kě)以參考:

1)https://github.com/metowolf/JumpJumpHelper

2)https://github.com/wangshub/wechat_jump_game/issues/744

3)https://github.com/wangshub/wechat_jump_game/pull/841

2. 機械臂模拟手指點擊

本着學術(shù)探究的态度,結合之前折騰開源硬件的經曆,所以也鬥膽想給跳一跳小遊戲增加一點動(dòng)手環節,把觸摸模拟這一操作通(tōng)過機械臂來物理完成,于是在萬能淘寶裡淘了一個(gè)一百多快錢的機械臂和(hé)部分配件,自己編寫了控制代碼,把按壓時間傳輸作為機械臂按下(xià)的停留時間,想法确定後便開始購置物品:

到貨後折騰一兩個(gè)晚上,最後成功搭建好了,大家看看效果(電容筆偶爾還是會觸碰不良)
視頻鍊接:https://v.qq.com/x/page/s0532...

四、最後

反對一切使用外挂行為!

反對一切使用外挂行為!

反對一切使用外挂行為!

通(tōng)過對外挂程序源碼的研讀,學習到了非常多創新的思維,這也算是外挂留給代碼世界的果實。


關(guān)于騰訊WeTest手遊安全測試團隊
騰訊WeTest手遊安全測試團隊從2011年初開始對手遊安全領域進行探索和(hé)技術(shù)積累,旨在通(tōng)過提前發現遊戲版本的安全漏洞,預警風險,打造出業(yè)界領先的手遊安全測試技術(shù)方案,在工具上已經支持所有騰訊在研和(hé)運營的手遊項目。團隊通(tōng)過使用與正式服同樣的遊戲客戶端和(hé)服務器(qì),模拟外挂工作室制作外挂的過程,依靠自身的技術(shù)積累來提高專業(yè)程度,持續保持漏洞的發現率。

目前提供了專家測試服務,希望通(tōng)過提前發現遊戲版本的安全漏洞,預警風險,幫助提高騰訊遊戲的品牌和(hé)口碑。

服務目前已經對外開放,點擊http://wetest.qq.com/product/sr 即可(kě)使用

相關(guān)案例查看更多