微信打飛機之IOS/安卓無敵破解版

小雨vicky發表於2013-11-28

       鼓搗了4個小時安卓版微信的飛機大戰,終於把破解版打包完成了。現在把IOS和Android端的破解版都放出來。ios版的是網上找來的,只是一個外掛,從昨天的1千萬分就知道我測試過了,沒問題。 而安卓版是是對整個微信的重新打包,而且由於手上沒有裝置,沒辦法測試,先放到網盤上,有興趣的幫忙測一下。       
       IOS版: 需要越獄才能安裝。微信5.0打飛機無敵補丁 
       ios版的不熟,所以具體的就不予置評了,使用步驟如下:
       1.我這裡用91助手,PP,同步之類的也可以,把下載的.deb補丁放在cydia軟體安裝。然後重啟即可(不行的話就多重啟一次)。




      2.開啟微信進入打飛機遊戲,然後暫停遊戲,就可以看到外掛選項的彈出,選擇你要的功能即可。




   安卓版:需要root,並且能將system分割槽mount為可寫。安卓微信打飛機無敵版

     安裝方式:先解除安裝你原本的微信。將這個apk放到/system/app/資料夾下。如果出現so庫沒有釋放的原因,手動將微信lib下對應你手機平臺的so庫拷貝到/data/data/com.tencent.mm/lib對應的資料夾下。

       打灰機這個神作據說是騰訊的藍翔程式設計師用了1周時間寫出來的,結果第一天ios版被破解了,安卓版沒多久也淪陷了,這次修改和打包就是按照此貼微信5.0 Android版飛機大戰破解無敵模式手記操作的,因為有的地方寫的太詳細了,有些細節又被忽略了,加上程式碼被混淆了,所以今天花了大半天才整出來。 
     
      大概原理是:
      1.微信遊戲採用外掛動態載入方式。具體來說,就是外掛及遊戲以jar包形式存在,jar包中有classes.dex及其他資原始檔,在執行時動態載入資源及classes.dex程式碼。 

      2.MD5值作檔名+外掛簽名校驗,再加上安裝APK本身的簽名校驗。三重校驗保證了微信遊戲的安全性。      A.在拷貝外掛jar包的過程中,會對外掛進行第一次校驗——簽名校驗。        B.在載入執行jar包的時候會對這個MD5值進行校驗,如果快取中的檔案MD5值不同,會用重新釋放apk中的外掛覆蓋。      C.APK本身簽名校驗。      但是很不幸的是安卓存在著一個漏洞, system/app和vendor/app下的apk只會校驗manifest.xml檔案簽名。因此我們可以任意修改外掛jar包,在重新生成新包之後計算出新包的MD5值,並對新包進行重新命名。對於外掛的簽名校驗,則直接通過修改smali程式碼,遮蔽掉微信簽名校驗的函式功能,直接返回true,這樣以來就可以繞過安全性這一問題。(這回換Google的藍翔程式設計師了蛋疼了...)

       3.上面兩部分是可以外掛可以修改並重新植入,從而達到破解的理論基礎和基本前提。 所以這個破解實際是針對Android本身的漏洞而非騰訊的漏洞。

       4.飛機大戰修改的原理(採用libgdx引擎)。反編譯為smali,然後通過修改程式碼,或是調整屬性,或是修改程式碼走向來達到不同的效果。我這裡以jd-gui來演示,smali程式碼跟彙編差不多了,今天時間主要是花在這上面了。
   
       5.解壓微信後,\com.tencent.mm_351\assets\preload\這個目錄下以com.tencent.mm.plugin.shoot為字首的jar包就是打飛機的原始碼。後面32位數值是MD5。反編譯jar包的dex資料,用jd-gui開啟可以看到打飛機的原始碼。
 

 

    
       6.遊戲中的幾個物件,如下圖。他們都繼承自同一個類:GameSprite。相當於遊戲引擎中精靈的概念。它們都有生命值、寬高、速度、型別、狀態等屬性。這些類的定義都在actor子包內。在遊戲過程中會對每個精靈做碰撞檢測,當你發現你的飛機爆炸時,就是碰撞檢測在起作用。(注:HERO即是PLAYER)





 7.修改內容:
     A.永久雙子彈。通過設定子彈初始型別為雙子彈,並且在檢測時也設定為雙子彈,那麼永久雙子彈達成。
        private Player.BulletType mBulleType = Player.BulletType.NORMAL;
        private Player.BulletType mBulleType = Player.BulletType.DOUBLE; 
        this.player.setBulletType(Player.BulletType.NORMAL);
        this.player.setBulletType(Player.BulletType.DOUBLE);
     B.無限炸彈。在使用炸彈後保持子彈數不變。(以下Smali語言不寫了,很晦澀)
     C.無敵模式。在Hit碰撞函式中直接返回,不死。     D.結束遊戲。不死沒辦法結束遊戲,想進入排行就得死。。所以。。。判斷飛機的位置,當飛機飛到螢幕最上方時觸發死亡。
     具體修改的地方如下。




好了,就這樣吧,還是那句話,遊戲只是後臺一行行冰冷的資料。那麼你就輸了


參考資料:微信5.0 Android版飛機大戰破解無敵模式手記



相關文章