Java 破解騰訊微信跳一跳(幾乎每次命中中心點,目前最高 19844 分)

Tips:本文字數(shù)1785,閱讀時間5分鐘

文章轉(zhuǎn)載知乎,作者:就不告訴你,網(wǎng)易?資深研發(fā)工程師,浙江大學,計算機應用技術(shù)

我沒有想到有那么多同學問我如何導入項目。主要的問題在于:

如何導入項目?

為什么不上傳wechat_jump_hack.iml文件?

點擊此處,查看詳細教程

2018/01/04優(yōu)化

根據(jù)同學們的反饋,我今天午休時,抽了20分鐘,優(yōu)化了一下算法。

1.提高瓶子的識別率。

由于瓶子的顏色比較接近,新實現(xiàn)了一種算法用于瓶子的瓶蓋的識別。效果如下:


2. 提高出現(xiàn)特殊盒子時,下步的計算。

特殊盒子,例如留聲機,他的動效時間很長,而且很大,對下一步的識別產(chǎn)生干擾。因此,改進了一下算法,減少干擾的影響。效果如下:

3. 新增加了HackTest.java文件。

大家在運行Hack.java后,會在wechat_jump_hack/out/production/wechat_jump_hack/imgs/input/目錄下存放截圖文件。運行Hack.java結(jié)束后,再運行HackTest.java,會在wechat_jump_hack/out/production/wechat_jump_hack/imgs/output/下生成input目錄中的截圖的位置標記。

? ? ? ? 紅點表示玩家位置;

? ? ? ? 綠點表示下一個盒子的邊界點;

? ? ? ? 藍點表示下一個盒子的中心點;

如果覺得跳得不準的同學,請運行HackTest.java文件,觀察標記的位置是否準確。如果準確的話,請自行調(diào)整彈跳系數(shù)。筆者無法做到我所用的彈跳系數(shù)適用于所有的設(shè)備。

4. 添加對命中中心點的統(tǒng)計

screenshot, file: /Users/chenliang/SkylineProjects/wechat_jump_hack_1/out/production/wechat_jump_hack_1/imgs/input/1092.png

438, 364

pos, x: 404, y: 1104

find myPos, succ, (404, 1104)

191, 217, 194

232, 258, 266

top, x: 732, y: 803

true

left, x: 599, y: 880

right, x: 868, y: 880

whitePoint: 752, 715, 887, 866

find whitePoint, succ, (733, 876), centerHit: 901, total: 1093

find nextCenter, succ, (733, 876)

distance: 554

/Users/chenliang/Library/Android/sdk/platform-tools/adb shell input swipe 400 400 400 400 554

根據(jù)我的運行結(jié)果,命中中心點的概率,大約為82%~85%。因為微信也在改進,命中中心點的難度也在提高 。

一. 效果展示

程序控制小人自動跳,幾乎每次命中中心點。

為了更好的展示運行效果,我貼一個剛剛錄制的視頻。http://v.youku.com/v_show/id_XMzI4NzM4MzI0NA==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2

如果你的運行效果,不像這個視頻中所示,請一定要認真閱讀“溫馨提示”這個章節(jié)。

歡迎大家與我交流意見。附上 GitHub 地址?burningcl/wechat_jump_hack

破解過程,總共花了3個小時,不斷地調(diào)整算法與參數(shù),因此代碼比較亂,還請見諒。

喜歡這個程序的同學,求在GitHub上加star。



二. 實現(xiàn)原理

具體識別的算法,我現(xiàn)在沒有時間總結(jié)了,大家可以先看源碼。源碼中部分參數(shù)是在筆者的手機上進行調(diào)試的(分辨率為1080),大家可以根據(jù)自己手機,進行相應修改。

主要步驟

識別玩家位置

如下圖中白色空心方格所示:


1、識別目標方塊位置

如下圖中紅色實心方格所示,識別最上面的頂點,最左邊的點,與最右邊的點,從而計算出中心點:


識別目標方塊中心圓點的位置

如果你前一次踩中中心點,會有下一個中心點的提示(一個白色的圓點)。

流程

1、通過ADB截屏;

2、通過ADB將截屏保存到電腦;

3、識別玩家位置;

4、識別目標方塊位置;

5、識別目標方塊中心圓點的位置;

6、如果第5步成功,則取第5步的中心點為下一步的位置;否則,取第4步的中心點為下一步的位置;

7、計算玩家位置與下一步的位置,乘以一定的系數(shù),得到長按的時間;

8、通過ADB,觸發(fā)長按;

三. 運行教程

1、準備Java運行與編譯環(huán)境,使用Java8以上,IDE推薦使用Intellij;

2、安裝Android SDK;

3、使用 git工具clone項目,地址為https://github.com/burningcl/wechat_jump_hack

4、使用IDE(筆者使用Intellij)import該項目;

5、準備好一部已經(jīng)打開開發(fā)者模式的Android手機;

6、請確認是否adb已經(jīng)聯(lián)接上你的手機;如果adb連接失敗,則會導致截圖與拉取截圖失敗,提示“find myPos, fail”;如果連著多個Android設(shè)備的話,最好關(guān)到只有一個;

7、打開開發(fā)者選項,找到“USB調(diào)試(安全設(shè)置)允許通過USB調(diào)試修改權(quán)限或者模擬點擊”(在mui上是這樣的,在其他手機上,應該也是差不多這樣)這個開關(guān),打開它;如果這個權(quán)限沒有授予,則不能正常觸發(fā)彈跳;

8、修改com.skyline.wxjumphack.Hack中ADB_PATH,將其改為你自己的ADB位置;

9、打開微信,打開跳一跳游戲,并點擊開始;

10、 ?運行程序(Hack.java中的main方法)吧,騷年,觀察它自動跳動;

四. 溫馨提示

1、有些同學反饋,程序報錯,提示找不到文件或者“find myPos, fail”。請確認是否adb已經(jīng)聯(lián)接上你的手機;如果adb連接失敗,則會導致截圖與拉取截圖失敗。

2、有些同學反饋,位置都計算出來了,但是沒有觸發(fā)彈跳。打開開發(fā)者選項,找到“USB調(diào)試(安全設(shè)置)允許通過USB調(diào)試修改權(quán)限或者模擬點擊”(在mui上是這樣的,在其他手機上,應該也是差不多這樣)這個開關(guān),打開它。

3、這個小游戲,后來騰訊好像加了一些干擾的動效,會干擾位置計算。后期可以優(yōu)化。

4、因為我總共才花了3小時去破解,主要的時間都花了前期的識別算法的優(yōu)化上。代碼中,還有很多魔法值什么的,代碼也比較亂。如果要閱讀的話,還請見諒。

5、至于位置計算的準確性,請運行MyPosFinder.java與NextCenterFinder.java中的main方法,觀察生成文件,查看標記的位置是否正確。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。