Unity3D 匯出的apk進行混淆和加固(防止反編譯)
前言:
對於辛辛苦苦完成的apk程式被人輕易的反編譯了,那就得不償失了,這篇文章就是解決Unity打包出來的apk進行程式碼加固和混淆。
準備資料:
1:Obfuscator.zip 作用是程式碼混淆,是Unity的一個外掛
2:Apkdb.rar 作用是反編譯apk,做過修改之後回編譯成修改好的apk
3:Reflector_8.5.0.179_XiaZaiBa.zip 作用是反編譯程式碼,方便檢視程式碼
4:梆梆助手.exe 作用是對apk進行重新簽名和對apk的加固
以上檔案下載地址:
如果連結無效,請聯絡我QQ:503115254
正文:
1:打包一個帶有簽名的apk
在打包Player Settings設定裡面,需要對簽名重新設定,簽名可以理解成為一個證書,可以設定密碼資訊,保證一部分的程式安全,據說在Unity5.0對程式的安全有了初步保障,有一個預設的簽名。但是個人習慣還是使用自己的簽名為好,如下圖:
以上都設定好之後,Alias下拉框選項就會多出一個選項,此時就是需要建立的簽名了
點選 Create a new key之後,如圖,填寫所需要的資訊,就可以建立了新的簽名了,新的簽名一定要儲存好,這個東西對於程式加固還有作用。如圖所示
我是儲存到桌面上了
然後正常釋出自己的apk就可以了
2:對apk進行反編譯
接下來就要用到上面介紹的各種工具了,首先使用的是Apkdb反編譯工具,首先解壓出來,這是一個安裝包,解壓之後,需要進行對其安裝,最好是關閉防毒軟體,安裝介面是一個dos介面,
選擇1 簡體中文就可以了,輸入1 然後回車繼續安裝
安裝過程中,會提示你需要安裝Java
按任意鍵繼續 就開始安裝程式了,等待安裝完畢後,會有一個選項,這裡選擇1或2都可以,我選擇1
然後會讓你選擇安裝器,這個選擇哪個都行,我選擇N
然後需要你重啟電腦,因為要配置滑鼠右鍵的功能
重啟後,右鍵自己釋出出來的apk,你會發現多了一些東西,這些東西都是有用的
點選APKDB編譯,就準備開始對apk進行反編譯
這裡選擇1 於是就開始反編譯了,編譯完成後,就在同級目錄下生成一個資料夾,這就是反編譯出來的檔案
然後就開始對程式碼的混淆了
3:對程式的程式碼混淆
這次使用的是Unity的外掛Obfuscator for Unity,解壓後是一個unitypackage包,匯入進去之後,你會發現工具欄多出了兩個工具,如圖所示
這裡主要使用的是Tools裡面的Obfuscator 選項,我們寫的程式碼是在\assets\bin\Data\Managed資料夾下,當然,你看到的是dll檔案,沒錯,我們的程式碼就是被編譯成了dll檔案,也就是Assembly-CSharp.dll,此時,你可以用Reflector進行反編譯dll來獲取裡面的程式碼(我分享出來的是綠色版本的Reflector,所以不需要安裝就可以使用),如圖所示
所以就要使用到混淆器,混淆器是把裡面的程式碼變數等資訊進行重新命名,這樣可讀性會變得非常差,接著,回到Unity中,點選Tools下的Obfuscator 選項,會彈出一個選擇資料夾的提示框,這個提示框就是我們剛剛提到的dll資料夾,也就是解壓後的資料夾,選擇這個Managed資料夾就可以了,它會自動進行程式碼混淆,
混淆完成後推出dos命令,此時的dll就被混淆了,利用我們的Reflector看下程式碼
全都是替換成了這類資訊,相信你會頭大的,沒事,電腦能認識就行。然後就是對已經修改好的apk回編譯成可以用的apk
4:回編譯成可用的apk
對於已經進行程式碼混淆的檔案來說,原先是apk進行反編譯得到的檔案,所以還需要回編譯回去,右鍵反編譯出來的資料夾,
同樣選擇使用APKDB編譯,此時出現的畫面略有不同,
這裡選擇1就可以了,等待回編譯完成後,自動輸出一個新的apk,在輸出之前,會有一個選項
選擇Y就是了,新的apk目錄是在原先目錄下重新建立了一個名為“已編譯***”資料夾,開啟後就是回編譯的檔案了。
到這裡,我們完成了對程式碼的混淆,但是還沒有進行加固,防止反編譯,所以,請往下看
5:使用梆梆助手來對apk進行加固
如果還沒有賬號的需要申請賬戶,下載梆梆助手才可以使用,
然後匯入自己的apk就可以了,這裡是流水式的走下來,所以只需要匯入和匯出就可以了,
新增單個apk檔案,選擇好剛剛混淆後的apk,然後你做的事情就是等,等待上傳完--加固完--下載完--已完成,當到已完成的時候,說明這裡已經可以匯出了,匯出需要前面提到的自己建立的簽名,這裡可是會用到的,如果不用,則apk安裝包可能會出現問題
選擇匯出簽名apk,選擇簽名檔案,輸入密碼,然後點選開始匯出
匯出的apk是經過混淆,經過加固比較安全的apk了
9月19號更新:
其實這樣也算不是很安全,同時你也可以對程式碼進行加殼,網上一搜一大堆的加殼的工具,程式的安全沒有絕對的。
可以參考我的另外兩篇文章:
Unity程式設計筆錄--Unity Android加密dll http://blog.csdn.net/adambieber/article/details/49837503
Unity程式設計筆錄--Unity
Android 加密 so http://blog.csdn.net/adambieber/article/details/49871245
好了,到這裡結束了,如果有什麼問題,請諮詢我的QQ:503115254