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方法,觀察生成文件,查看標記的位置是否正確。