首頁 收藏 QQ群
 網(wǎng)站導航

ZNDS智能電視網(wǎng) 推薦當貝市場

TV應用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 12499|回復: 0
上一主題 下一主題
[案例]

android防止反編譯的措施

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
8
作為Android應用開發(fā)者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發(fā)的應用可以被別人很輕易的就反編譯出來。
Google似乎也發(fā)現(xiàn)了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows        ools下面多了一個proguard文件夾
proguard是一個java代碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的代碼,從而達到保護代碼的作用。
下面具體說一說怎么樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows        oolslib的內(nèi)容:
   
view plaincopyprint?   
   
-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>;  }    -keepclasseswithmembernames class * {      public <init>(android.content.Context, android.util.AttributeSet);  }    -keepclasseswithmembernames class * {      public <init>(android.content.Context, android.util.AttributeSet, int);  }    -keepclassmembers enum * {      public static **[] values();      public static ** valueOf(java.lang.String);  }    -keep class * implements android.os.Parcelable {    public static final android.os.Parcelable$Creator *;  }     
   
-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>;}-keepclasseswithmembernames class * {    public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembernames class * {    public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;}   
從腳本中可以看到,混淆中保留了繼承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本組件以及com.android.vending.licensing.ILicensingService,
并保留了所有的Native變量名及類名,所有類中部分以設定了固定參數(shù)格式的構(gòu)造函數(shù),枚舉等等。(詳細信息請參考<proguard_path>/examples中的例子及注釋。)
讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了
完整的default.properties文件應該如下:
   
view plaincopyprint?   
   
# 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     
   
# 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-9proguard.config=proguard.cfg   
大功告成,正常的編譯簽名后就可以防止代碼被反編譯了。反編譯經(jīng)過代碼混淆的apk得到的代碼應該類似于下面的效果,是很難看懂的:   
     
   

上一篇:Android---AlarmManager(全局定時器/鬧鐘)
下一篇:也談一下“享元模式”
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡信息服務信用承諾書 | 增值電信業(yè)務經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-10-23 06:23 , Processed in 0.051487 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復 返回頂部 返回列表