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

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

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

google Android開發(fā)是開源的察绷,開發(fā)過程中有些時候會遇到一些功能洪囤,自己不知道該怎么做,然而別的軟件里面已經(jīng)有了素跺,這個時候可以采用反編譯的方式最欠,解開其他的程序,來了解一些它 的做法督赤,同時啊懈万,還可以借鑒別人的軟件結(jié)構(gòu)拴清,資源文件;作為一個開發(fā)者钞速,你可能會很想知道這些效果界面是怎么去實現(xiàn)的贷掖,這時,你便可以對改應(yīng)用的APK進行反編譯查看渴语。此方式主要目的是為了促進開發(fā)者學(xué)習(xí)苹威,借鑒好的代碼,提升自我開發(fā)水平驾凶。請勿去破解人家的軟件或其他操作

反編譯工具包

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

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

  • dex2jar

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

  • jd-gui

查看jar文件,基本可以看到j(luò)ava class文件了泳挥,也是支持mac,windows,linux。作用:查看APK中classes.dex轉(zhuǎn)化成出的jar文件至朗,即源碼文件

反編譯流程

一屉符、準(zhǔn)備好要反編譯的軟件

解壓成三個文件夾

二、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文件 ] [輸出文件夾])

  • 獲取成功后便有可以查看該應(yīng)用的所有資源文件了


    圖片
  • 如果你想將反編譯完的文件重新打包成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 文件夾內(nèi),在命令行下定位到dex2jar.bat所在目錄胧辽,輸入
dex2jar.bat classes.dex

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

    圖片

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


    圖片

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

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

防止APK程序被反編譯

作為Android應(yīng)用開發(fā)者朝蜘,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發(fā)的應(yīng)用可以被別人很輕易的就反編譯出來涩金。

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

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

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

代碼混淆(Obfuscated code)亦稱花指令佳晶,是將計算機程序的代碼,轉(zhuǎn)換成一種功能上等價讼载,但是難于閱讀和理解的形式的行為轿秧。代碼混淆可以用于程序源代碼,也可以用于程序編譯而成的中間代碼咨堤。執(zhí)行代碼混淆的程序被稱作代碼混淆器菇篡。目前已經(jīng)存在許多種功能各異的代碼混淆器。
將代碼中的各種元素一喘,如變量驱还,函數(shù),類的名字改寫成無意義的名字凸克。比如改寫成單個字母议蟆,或是簡短的無意義字母組合,甚至改寫成“__”這樣的符號萎战,使得閱讀的人無法根據(jù)名字猜測其用途咐容。重寫代碼中的部分邏輯,將其變成功能上等價蚂维,但是更難理解的形式戳粒。比如將for循環(huán)改寫成while循環(huán),將循環(huán)改寫成遞歸虫啥,精簡中間變量蔚约,等等。打亂代碼的格式涂籽。比如刪除空格苹祟,將多行代碼擠到一行中,或者將一行代碼斷成多行等等。

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文件應(yīng)該如下:


圖片
# 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锰悼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子团赏,更是在濱河造成了極大的恐慌箕般,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔清,死亡現(xiàn)場離奇詭異丝里,居然都是意外死亡,警方通過查閱死者的電腦和手機体谒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門杯聚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抒痒,你說我怎么就攤上這事幌绍。” “怎么了故响?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵傀广,是天一觀的道長。 經(jīng)常有香客問我彩届,道長伪冰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任樟蠕,我火速辦了婚禮贮聂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寨辩。我一直安慰自己吓懈,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布靡狞。 她就那樣靜靜地躺著骄瓣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耍攘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天畔勤,我揣著相機與錄音蕾各,去河邊找鬼。 笑死庆揪,一個胖子當(dāng)著我的面吹牛式曲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吝羞,長吁一口氣:“原來是場噩夢啊……” “哼兰伤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钧排,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤敦腔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恨溜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體符衔,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年糟袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了判族。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡项戴,死狀恐怖形帮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情周叮,我是刑警寧澤辩撑,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站则吟,受9級特大地震影響槐臀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氓仲,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一水慨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敬扛,春花似錦晰洒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至急侥,卻和暖如春砌滞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坏怪。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工贝润, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铝宵。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓打掘,卻偏偏與公主長得像华畏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尊蚁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容