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

阿里巴巴中臺部門急需P7層級的Java技術專家。若是有意向的同窗,歡迎投簡歷到huasong.cl@alibaba-inc.com或者掘金站內信給我。html


運行起來的同窗,歡迎在評論區裏,貼出本身如今中心點的命中率。java

若是有同窗對Android無障礙服務熟悉而且有時間有精力,能夠實現一個基於Android無障礙服務的外掛,那樣就不須要鏈接ADB與電腦了。git


我沒有想到有那麼多同窗問我如何導入項目。主要的問題在於:github

  • 如何導入項目?
  • 爲何不上傳wechat_jump_hack.iml文件?

點擊此處,查看詳細教程算法


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

爲了更好的展現運行效果,我貼一個剛剛錄製的視頻。v.youku.com/v_show/id_X…
安全

若是你的運行效果,不像這個視頻中所示,請必定要認真閱讀「舒適提示」這個章節。bash

附上 GitHub 地址: github.com/burningcl/w… 歡迎你們與我交流意見。破解過程,總共花了3個小時,不斷地調整算法與參數,所以代碼比較亂,還請見諒。微信

2018/01/04優化

根據同窗們的反饋,我今天午休時,抽了20分鐘,優化了一下算法。工具

  1. 提升瓶子的識別率。

    因爲瓶子的顏色比較接近,新實現了一種算法用於瓶子的瓶蓋的識別。效果以下:

  2. 提升出現特殊盒子時,下步的計算。

    特殊盒子,例如留聲機,他的動效時間很長,並且很大,對下一步的識別產生干擾。所以,改進了一下算法,減小干擾的影響。效果以下:

  3. 新增長了HackTest.java文件。你們在運行Hack.java後,會在wechat_jump_hack/out/production/wechat_jump_hack/imgs/input/目錄下存放截圖文件。運行Hack.java結束後,再運行HackTest.java,會在wechat_jump_hack/out/production/wechat_jump_hack/imgs/output/下生成input目錄中的截圖的位置標記。

    • 紅點表示玩家位置;
    • 綠點表示下一個盒子的邊界點;
    • 藍點表示下一個盒子的中心點;

    若是以爲跳得不許的同窗,請運行HackTest.java文件,觀察標記的位置是否準確。若是準確的話,請自行調整彈跳係數。筆者沒法作到我所用的彈跳係數適用於全部的設備。

  4. 添加對命中中心點的統計

    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
    複製代碼

    根據個人運行結果,命中中心點的機率,大約爲82%~85%。由於微信也在改進,命中中心點的難度也在提升

  5. 對於最後的成績沒法提交

微信已經作了屏蔽措施,斷定做弊沒法上傳數據。      
感謝@ imvin軍的經驗,在迫近最高分的時候拔掉數據線,手動操做幾步,實測步數越多成功率越好。

一. 效果展現

二. 實現原理

具體識別的算法,我如今沒有時間總結了(之後有時間我能夠去總結一下),你們能夠先看源碼。源碼中部分參數是在筆者的手機上進行調試的(分辨率爲1080),你們能夠根據本身手機,進行相應修改。

主要步驟

  1. 識別玩家位置

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

  2. 識別目標方塊位置

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

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

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

流程

  1. 經過ADB截屏;
  2. 經過ADB將截屏保存到電腦;
  3. 識別玩家位置;
  4. 識別目標方塊位置;
  5. 識別目標方塊中心圓點的位置;
  6. 若是第5步成功,則取第5步的中心點爲下一步的位置;不然,取第4步的中心點爲下一步的位置;
  7. 計算玩家位置與下一步的位置,乘以必定的係數,獲得長按的時間;
  8. 經過ADB,觸發長按;

三. 運行條件

  1. 準備Java運行與編譯環境,使用Java8以上,IDE推薦使用Intellij;
  2. 安裝Android SDK;
  3. 使用 git工具clone項目,地址爲 github.com/burningcl/w… ;
  4. 使用IDE(筆者使用Intellij)import該項目;
  5. 準備好一部已經打開開發者模式的Android手機;
  6. 請確認是否adb已經聯接上你的手機;若是adb鏈接失敗,則會致使截圖與拉取截圖失敗,提示「find myPos, fail」或者找不到文件「1.png (No such file or directory) 」;若是連着多個Android設備的話,最好關到只有一個;
  7. 打開開發者選項,找到「USB調試(安全設置)容許經過USB調試修改權限或者模擬點擊」(在mui上是這樣的,在其餘手機上,應該也是差很少這樣)這個開關,打開它;若是這個權限沒有授予,則不能正常觸發彈跳;
  8. 修改com.skyline.wxjumphack.Hack中ADB_PATH,將其改成你本身的ADB位置;
  9. 打開微信,打開跳一跳遊戲,並點擊開始;
  10. 運行程序(Hack.java中的main方法)吧,騷年,觀察它自動跳動;

四. 舒適提示

  1. 有些同窗反饋,程序報錯,提示找不到文件或者「find myPos, fail」。請確認是否adb已經聯接上你的手機;若是adb鏈接失敗,則會致使截圖與拉取截圖失敗。
  2. 有些同窗反饋,位置都計算出來了,可是沒有觸發彈跳。打開開發者選項,找到「USB調試(安全設置)容許經過USB調試修改權限或者模擬點擊」(在mui上是這樣的,在其餘手機上,應該也是差很少這樣)這個開關,打開它。
  3. 這個小遊戲,後來騰訊好像加了一些干擾的動效,會干擾位置計算。後期能夠優化。
  4. 由於我總共才花了3小時去破解,主要的時間都花了前期的識別算法的優化上。代碼中,還有不少魔法值什麼的,代碼也比較亂。若是要閱讀的話,還請見諒。
  5. 至於位置計算,請運行MyPosFinder.java與NextCenterFinder.java中的main方法,觀察生成文件,查看標記的位置是否正確。
相關文章
相關標籤/搜索