1. 程式人生 > >unity3d手遊破解(一)

unity3d手遊破解(一)

重點知識: Assembly-CSharp.dll扔進Reflector+reflexil環境

轉:https://bbs.pediy.com/thread-226135.htm

最近找樂子破解了點手遊玩玩,順便分享一下,目標APK--發條英雄。1、大致分析拿到APK先看看libs和assets,發現有libmono.so以及\assets\bin\Data\Managed\Assembly-CSharp.dll,可以確定是unity3d手遊,可以嘗試修改 Assembly-CSharp.dll來破解遊戲,不過發條英雄的這個dll加密了,所以需要先解密。
2、解密dll把 libmono.so扔進ida,找到mono_image_open_from_data_with_name函式,F5檢視發現瞭解密程式碼:

在這個函式先判斷載入的dll是否包含ssem字串,接著判斷前兩個位元組是否等於82(0x52),77(0x4d),因此可以確定下面的for迴圈是解密程式碼,比較簡單,抄下來自己寫一個解密程式(附件有一份),然後對這個 Assembly-CSharp.dll進行解密。3、修改dll把 Assembly-CSharp.dll扔進Reflector+reflexil環境進行修改(不會的同學百度學習一下),找到關鍵函式get_DamageValue,直接改成返回100W,然後攻擊就變成了100W。不過這個時候怪物攻擊也是100W,因此再找到Player的applyDamage函式,修改這個函式直接ret,然後玩家就無敵了。

最後儲存為一個新的dll並替換掉之前APK裡面的 Assembly-CSharp.dll,解密後的dll頭部不等於82(0x52),77(0x4d),因此so可以直接載入。4、執行重新簽名,打包成新的APK,安裝執行,一刀100W。
5、結束語伺服器信賴客戶端的計算結果就導致這種情況,不過伺服器加強資料校驗也能檢測出來。有興趣的同學可以去改改dll實現競技場百戰百勝。
最後於 4小時前 被王正飛編輯 ,原因:上傳的附件: