談談android反編譯和防止反編譯的方法


android基於java的,而java反編譯工具很強悍,所以對正常apk應用程序基本上可以做到100%反編譯還原。

因此開發人員如果不准備開源自己的項目就需要知道怎樣防止反編譯和反編譯他人的項目來學習。

2.3版本以上eclipse自動生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以對代碼進行混淆,反編譯后是很難看懂的。

2.3之前的SDK版本也沒關系,把上面的proguard.cfg文件復制一份放到項目中,然后進行相同的操作即可。

Android - proguard混淆器使用,有引用第三方jar包的時候報錯:
You may need to specify additional library jars (using '-libraryjars')
處理方法:在proguard.cfg文件頂部加入
-dontwarn com.motorola.**
-keep class com.motorola.** { *;}
說明:-dontwarn和-keep結合參數使用來保持第三方庫中的類而不亂,-dontwarn com.motorola.**意思是保持com.motorola.**這個包里面的所有類和所有方法而不混淆

-keep class com.motorola.** { *;}意思是ProGuard不要警告找不到com.motorola.**這個包里面的類的相關引用。對應包名改成你對應的jar包頂層package  

 詳細可以查看官方文檔 http://developer.android.com/tools/help/proguard.html

 

有些應用反編譯后java代碼用jd-ui根本都無法打開,連混淆的代碼都看不到的,本人嘗試多次都做不到(網上有說是混淆工具針對反編譯工具的),希望知道的告知下怎么處理的。 

--注:上面的問題經過本人多次嘗試終於找到部分原因了,一.使用的版本比較低,現在最新版的是dex2jar-0.0.9.7,二.dex2jar目錄不要有中文的,三.需要把class.dex直接拖到dex2jar.bat,生成 classes.dex.dex2jar.jar。如果生成jar過程中報一堆at com.googlecode.dex2jar.ir.ts.TopologicalSort.dfsRemove(TopologicalSort.java:135)錯誤的話還是不能打開的,看了下官方的問題報告有很多人有類似的問題,貌似進入了一個死循環,跟apk文件大小有點關系,應該是dex2jar的一個bug。

注意:上面的功能只是把java代碼混淆了,xml和資源文件、圖片並沒有混淆,有些游戲應用圖片比較重要需要轉換成dat文件 再加上自己的加密解密算法還原。

 另外加了混淆功能后還有壓縮的功能,混淆后的apk比原來的小(具體比例看你的代碼重復量了)

 

說完防止反編譯再來說說怎么反編譯吧 

先說一下反編譯的流程和原理:

1.用apktool 把apk--> 資源包(java代碼變成smali文件看不懂的),可以修改資源包里面的文件。

2.apk后綴名改成zip或rar解壓,獲取 classes.dex 文件,用dex2jar轉換成jar包(注:直接解壓出來的資源文件是不能直接打開的,要用第一步的反編譯工具,dex2jar.bat文件目錄不要有中文)。

------------------------------------------ 

新版使用說明(不用把apk換成zip解壓了,可以直接把apk文件拖到dex2jar.bat上--不能包含中文名稱)
下載dex2jar最新版http://code.google.com/p/dex2jar/downloads/list
解壓dex2jar-version.zip文件到一個目錄. 比方說 /home/panxiaobo/, C:\
unzip -x dex2jar-version.zip -d /home/panxiaobo
使用 dex2jar 來生成 .jar 文件. dex2jar會在someApk.apk所在目錄下生成一個someApk_dex2jar.jar文件.
   linux sh /home/panxiaobo/dex2jar-version/dex2jar.sh /home/panxiaobo/someApk.apk
   windows C:\dex2jar-version\dex2jar.bat someApk.apk

-------------------------------------------------- 

3.用jd-ui等java反編譯工具直接查看java代碼。

4.把java代碼和第一版的資源包整到一起重新組成一個新的應用。

5.用apktool 重新編譯。

6.用簽名工具重新簽名。

7.重新發布帶新的簽名的應用。

 注:如果不用改java代碼,只是換換風格和漢化2.3.4步則不用做。

 

google code上的開源項目  

apktool http://code.google.com/p/android-apktool/

dex2jar http://code.google.com/p/dex2jar/  ps:這個是中國人寫的

另外有人做了個工具套裝,集成了apktool dex2jar jd-ui,不過我下載了運行不了 不知道是不是相應環境沒有配對導致的

hackapk http://code.google.com/p/hackapk/ 

 

另外有人把apktool做了個封裝 弄成exe文件 圖形界面的方便使用,截個圖出來給大家看看吧

 

 注:上面那個軟件不能簽名的,要用另外一個軟件(APKSign)來進行簽名,截圖如下:

 

 另給出上面兩個工具的下載連接 機鋒論壇上面的,估計直接點擊連接下載不了

 Xwindows,帶圖形界面: apktool.rar (3.33 MB)  -->這個下載后可以自己到 http://code.google.com/p/android-apktool/ 下載最新版的apktool.jar替換原來的。

簽名工具:Auto-sign.rar(312.45 KB) 


另外還有些命令行的工具,本人給APK編輯器不同版本上面的說明不對應浪費了很多時間 

 1.普通apk文件(就是從各種網站上下載下來的第三方軟件)

(1)把他放到place-apk-here-for-modding文件夾里面。(不要有空格和中文,中文的改成英文的)
(2)打開Script.exe,在CMD窗口中輸入 22或23(設置目前的工程),選擇要編輯的apk文件的編號,回車確認

 

如上:有些版本設置目前的工程選項改成23了,但說明文件沒有改過來,按22一直都無法選擇apk,原因很不好找。 

建議還是使用圖形界面。 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM