一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android開發(fā)之反編譯與防止反編譯

 風聲之家 2018-06-18

Android開發(fā)之反編譯與防止反編譯

 防止反編譯是每個程序員的必修課,因為當你辛辛苦的研發(fā)一個應用,被人家三下五除二給反編譯了,是一件多么尷尬的事啊。那么如何防止反編譯啊?這里就用Google Android自帶的代碼混編的方式來防止反編譯。孫子兵法中講得好:“知彼知己百戰(zhàn)不殆”,所以在講解防止反編譯之前,先讓我們了解一下如何反編譯一個應用。

一、反編譯Android應用

實驗環(huán)境:

Windows8.1企業(yè)版、dex2jar-0.0.9.9

反編譯工具包:

Android反編譯工具包(升級版)

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

具體步驟:

1)        首先將apk文件后綴改為zip并解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的,將classes.dex復制到dex2jar.bat所在目錄dex2jar-0.0.9.9文件夾。

在命令行下定位到dex2jar.bat所在目錄,運行

dex2jar.bat   classes.dex

如圖:

 dex2jar.bat    classes.dex

生成classes_dex2jar.jar

如圖:

生成classes_dex2jar.jar

2)        進入jdgui文件夾雙擊jd-gui.exe,打開上面生成的jarclasses_dex2jar.jar,即可看到源代碼了,如下圖:


2. apk反編譯生成程序的源代碼和圖片、XML配置、語言資源等文件

具體步驟:

1) 下載上述反編譯工具包,打開apk2java目錄下的apktool1.4.1文件夾,內含三個文件:apktool.jar aapt.exe,apktool.bat,

注:里面的apktool_bk.jar是備份的老版本,最好用最新的apktool.jar

在命令行下定位到apktool.bat文件夾,輸入以下命令apktool.bat d  -f   abc123.apk   abc123

如下圖:

上圖中,apktool.bat 命令行解釋apktool.bat  d  -f    [apk文件 ]   [輸出文件夾]

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest android:versionCode="1" android:versionName="1.0" package="com.jph.recorder"  
  3.   xmlns:android="http://schemas./apk/res/android">  
  4.     <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" />  
  5.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  6.     <uses-permission android:name="android.permission.RECORD_AUDIO" />  
  7.     <uses-permission android:name="android.permission.VIBRATE" />  
  8.     <uses-permission android:name="android.permission.SEND_SMS" />  
  9.     <application android:theme="@style/AppTheme" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:allowBackup="true">  
  10.         <activity android:label="@string/app_name" android:name="com.jph.recorder.Recorder">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.         <activity android:label="@string/show_recordFile" android:name="com.jph.recorder.ShowRecordFiles" />  
  17.         <activity android:theme="@android:style/Theme.Dialog" android:name=".AboutActivity" />  
  18.         <activity android:label="@string/feedback_label" android:name=".FeedBackActivity" />  
  19.         <service android:name="com.jph.recorder.RecordService" />  
  20.     </application>  
  21. </manifest>  


將反編譯完的文件重新打包成apk,很簡單,輸入apktool.bat   b    abc123(你編譯出來文件夾)即可,命令如下:

打包apk后的文件在目錄C:\HelloAndroid下,生成了兩個文件夾:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夾下,Ok


3. 圖形化反編譯apk

上述步驟一、二講述了命令行反編譯apk,現在提供一種圖形化反編譯工具:Androidfby

首先,下載上述反編譯工具包,打開Androidfby目錄,雙擊Android反編譯工具.exe,就可以瀏覽打開要反編譯的apk文件。

圖形化反編譯apk


二、防止應用被反編譯

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

代碼混淆(Obfuscated code)亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,但是難于閱讀和理解的形式的行為。代碼混淆可以用于程序源代碼,也可以用于程序編譯而成的中間代碼。執(zhí)行代碼混淆的程序被稱作代碼混淆器。目前已經存在許多種功能各異的代碼混淆器。

將代碼中的各種元素,如變量,函數,類的名字改寫成無意義的名字。比如改寫成單個字母,或是簡短的無意義字母組合,甚至改寫成“__”這樣的符號,使得閱讀的人無法根據名字猜測其用途。重寫代碼中的部分邏輯,將其變成功能上等價,但是更難理解的形式。比如將for循環(huán)改寫成while循環(huán),將循環(huán)改寫成遞歸,精簡中間變量,等等。打亂代碼的格式。比如刪除空格,將多行代碼擠到一行中,或者將一行代碼斷成多行等等。

混淆前和混淆后反編譯出來的代碼對比:

混淆前和混淆后反編譯出來的代碼對比

提示:有心的朋友可以發(fā)現:混淆后生成apk文件比混淆前生成的apk文件要小不少。這樣不僅減小了項目的大小而且可以提高代碼的執(zhí)行速度。如下圖:

混淆前和混淆后反編譯出來的代碼對比2

具體步驟:

1)      查看項目中有沒有proguard.cfg。

如果沒有的話從這下載:

proguard.cfg

 

然后將proguard.cfg復制到項目中。

 

2) 在項目中的project.properties文件中添加:proguard.config=proguard.cfg

3) 然后按照正常的簽名對自己的應用進行簽名,生成后的apk經過反編譯后就會和源代碼有很大的不一樣。

注意:一定要通過正常的簽名方式對應用進行簽名,項目bin目錄中生成的apk文件是使用系統默認簽名的方式,沒有達到代碼混編的效果的。

如果簽名不成功請往下看:

4) 不過這一步你會遇到很多問題,根本就簽名不成功。例如:①如果工程引入了android-support-v4jar類庫,那么在工程打包混淆時,就會出現報錯提示你:You may need to specify additional library jars (using'-libraryjars')。②引用第三方包等問題

如果工程引入了android-support-v4jar類庫,那你就在proguard.cfg里的后面,添加如下內容:

-libraryjars /android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep public class * extendsandroid.support.v4.**

-keep public class * extendsandroid.app.Fragment

然后你再打包看看,應該可以正常生成apk安裝包了。

如果出現:"1 can't find referenced class 2" 字面上的意思就是類1找不到類2的引用;它會建議你:"You may need to specify additional library jars (using'-libraryjars').";

需要使用-libraryjars加上項目中使用到的第三方庫就OK了。

例如:-libraryjars /android-support-v4.jar

注意:這里引用方式是當前工程的根目錄(也可以配置其他目錄),也就是說,你要把第三方jar放到當前目錄下,否則就會警告說找不到jar文件!

        如果出現: can't find superclass or interfaceandroid.os.Parcelable$ClassLoaderCreator,碰到這樣的情況,可以使用-dontwarncom.xx.yy.**,不對錯誤提出警告。

注意:使用這個方式的話,要確保自己沒有用到這個庫里面的類!否則就會拋ClassNotFoundException

如果在工程中確實用到了該類,采用上面方式還是不行。這個時候就要再增加一項:-keep class com.xx.yy.** { *;},讓當前類不混淆。

總結:

對于引用第三方包的情況,可以采用下面方式避免打包出錯:

-libraryjars /aaa.jar

-dontwarn com.xx.yy.**

-keep class com.xx.yy.** { *;}

最后打包成功,祝君成功混淆加密!

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    一区二区三区人妻在线| 亚洲高清亚洲欧美一区二区| 亚洲精品福利入口在线| 久久人人爽人人爽大片av| 日韩在线免费看中文字幕| 精品少妇一区二区视频| 国产伦精品一区二区三区高清版| 久久碰国产一区二区三区| 东京不热免费观看日本| 久热青青草视频在线观看| 国产a天堂一区二区专区| 国产又粗又猛又大爽又黄同志| 欧美加勒比一区二区三区 | 亚洲黄香蕉视频免费看| 国产又粗又猛又爽又黄| 91麻豆精品欧美视频| 日韩人妻中文字幕精品| 日韩精品区欧美在线一区| 中字幕一区二区三区久久蜜桃| 五月婷婷六月丁香在线观看 | 91久久精品中文内射| 日本欧美在线一区二区三区| 又色又爽又黄的三级视频| 久久精品国产99精品最新| 日本午夜乱色视频在线观看| 欧美一级特黄特色大色大片| 91国内视频一区二区三区| 欧美亚洲另类久久久精品| 欧美日韩国产成人高潮| 在线观看视频成人午夜| 精品国产日韩一区三区| 国产在线日韩精品欧美| 国产精品视频第一第二区| 中文字幕人妻日本一区二区| 亚洲欧美精品伊人久久| 99香蕉精品视频国产版| 一区二区三区四区亚洲专区| 中文字幕一二区在线观看| 99久久精品免费看国产高清| 国产亚洲精品一二三区| 精品国产91亚洲一区二区三区|