反編譯Android APK及防止APK程序被反編譯


怎么逆向工程對Android Apk 進行反編譯

google Android開發是開源的,開發過程中有些時候會遇到一些功能,自己不知道該怎么做,然而別的軟件里面已經有了,這個時候可以采用反編譯的方式,解開其他的程序,來了解一些它 的做法,同時啊,還可以借鑒別人的軟件結構,資源文件;作為一個開發者,你可能會很想知道這些效果界面是怎么去實現的,這時,你便可以對改應用的APK進行反編譯查看。此方式主要目的是為了促進開發者學習,借鑒好的代碼,提升自我開發水平。請勿去破解人家的軟件或其他操作

反編譯工具包

  • apktools-目前最強大的反編譯工具

輕松反編譯apk,解析出資源文件,xml文件,生成smali文件,還可以把修改后的文件你想生成apk。作用:資源文件獲取,可以提取出圖片文件和布局文件進行使用查看

  • dex2jar

將apk中的dex文件轉換成為jar文件,很多人不會看smali文件,還是看java類文件比較舒服,這個時候可以借助這個工具來轉成java,也是支持windows,linux,mac。作用:將apk反編譯成java源碼(classes.dex轉化成jar文件)

  • jd-gui

查看jar文件,基本可以看到java class文件了,也是支持mac,windows,linux。作用:查看APK中classes.dex轉化成出的jar文件,即源碼文件

反編譯流程

一、准備好要反編譯的軟件

解壓成三個文件夾

二、apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件

  1. 使用apktools進行apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件

將需要反編譯的APK文件放到該目錄下,打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入以下命令:

apktool.bat d -f  emanager.apk  emanager 

DOS命令

(命令中emanager.apk指的是要反編譯的APK文件全名,emanager為反編譯后資源文件存放的目錄名稱,即為:apktool.bat d -f [apk文件 ] [輸出文件夾])

  • 獲取成功后便有可以查看該應用的所有資源文件了
    圖片
  • 如果你想將反編譯完的文件重新打包成apk,那你可以:輸入
    apktool.bat b emanager(你編譯出來文件夾) 便可,這就不述說了。

三、Apk反編譯得到Java源代碼

  1. Apk反編譯得到Java源代碼

下載上述工具中的dex2jar和jd-gui ,解壓將要反編譯的APK后綴名改為.rar或則 .zip,並解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的classes.dex放到之前解壓出來的工具dex2jar-0.0.9.15 文件夾內,在命令行下定位到dex2jar.bat所在目錄,輸入
dex2jar.bat classes.dex

DOS命令

  • 目錄下會生成一個classes_dex2jar.jar的文件,然后打開工具jd-gui文件夾里的jd-gui.exe,之后用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了,效果如下:
    圖片

  • 被混淆過的效果圖(類文件名稱以及里面的方法名稱都會以a,b,c....之類的樣式命名):
    圖片

可以看到反編譯的代碼和原本的代碼差別不大,主要差別是原來的資源引用全都變成了數字。

即使那些代碼是混淆過的,你可以得到他的大體思路對你的開發有益無害

防止APK程序被反編譯

作為Android應用開發者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發的應用可以被別人很輕易的就反編譯出來。

Google似乎也發現了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows\tools\下面多了一個proguard文件夾

proguard是一個java代碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的代碼,從而達到保護代碼的作用。

  1. 先介紹一下什么是代碼混淆:

代碼混淆(Obfuscated code)亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,但是難於閱讀和理解的形式的行為。代碼混淆可以用於程序源代碼,也可以用於程序編譯而成的中間代碼。執行代碼混淆的程序被稱作代碼混淆器。目前已經存在許多種功能各異的代碼混淆器。
將代碼中的各種元素,如變量,函數,類的名字改寫成無意義的名字。比如改寫成單個字母,或是簡短的無意義字母組合,甚至改寫成“__”這樣的符號,使得閱讀的人無法根據名字猜測其用途。重寫代碼中的部分邏輯,將其變成功能上等價,但是更難理解的形式。比如將for循環改寫成while循環,將循環改寫成遞歸,精簡中間變量,等等。打亂代碼的格式。比如刪除空格,將多行代碼擠到一行中,或者將一行代碼斷成多行等等。

proguard.cfg

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

default.properties文件應該如下:
圖片

# This file is automatically generated by Android Tools.  
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!  
#  
# This file must be checked in Version Control Systems.  
#  
# To customize properties used by the Ant build system use,  
# "build.properties", and override values to adapt the script to your  
# project structure.  
      
# Project target.  
target=android-9  
proguard.config=proguard.cfg

歡迎交流,進入博客網站:www.wangsong520.com進行留言交流,並且里面有更多知識分享!


免責聲明!

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



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