android混淆工具
㈠ 求教一個問題,命令行編譯Android程序,如何用proguard混淆
針對android 選擇user版本進行編譯的時候,會出現proguard錯誤,我們需要知道的事情
1.proguard是做什麼的,他的作用是將java代碼進行混淆的工具
2.因為proguard是混淆工具,所以android的mk文件也對其支持為兩種方式:
1.指定不需要混淆的native方法與變數的proguard.flags文件如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags
2.制定編譯的工程,不要使用代碼混淆的工具進行代碼混淆如:LOCAL_PROGUARD_ENABLED := disabled
3.不設置,默認使用LOCAL_PROGUARD_ENABLED := full.即將該工程代碼全部混淆
㈡ Android如何代碼混淆,防止apk程序被反編譯
下面具體說一說怎麼樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:view plain 1. -optimizationpasses 5 2. -dontusemixedcaseclassnames 3. - 4. -dontpreverify 5. -verbose 6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 7. 8. -keep public class * extends android.app.Activity 9. -keep public class * extends android.app.Application 10. -keep public class * extends android.app.Service 11. -keep public class * extends android.content.BroadcastReceiver 12. -keep public class * extends android.content.ContentProvider 13. -keep public class * extends android.app.backup.BackupAgentHelper 14. -keep public class * extends android.preference.Preference 15. -keep public class com.android.vending.licensing.ILicensingService 16. 17. -keepclasseswithmembernames class * { 18. native <methods>; 19. } 20. 21. -keepclasseswithmembernames class * { 22. public <init>(android.content.Context, android.util.AttributeSet); 23. } 24. 25. -keepclasseswithmembernames class * { 26. public <init>雀緩(android.content.Context, android.util.AttributeSet, int); 27. } 28. 29. -keepclassmembers enum * { 30. public static **[] values(); 31. public static ** valueOf(java.lang.String); 32. } 33. 34. -keep class * implements android.os.Parcelable { 35. public static final android.os.Parcelable$Creator *; 36. } 從腳本中可以看到,混淆中保留了繼承自Activity、Service、Application、頃困模BroadcastReceiver、ContentProvider等基本組件以及com.android.vending.licensing.ILicensingService, 並保留了所有的Native變數名及類名,所有類中部分以設定了固定尺旁參數格式的構造函數,枚舉等等。) 讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句「proguard.config=proguard.cfg」就可以了 完整的default.properties文件應該如下:view plain 1. # This file is automatically generated by Android Tools. 2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3. # 4. # This file must be checked in Version Control Systems. 5. # 6. # To customize properties used by the Ant build system use, 7. # "build.properties", and override values to adapt the script to your 8. # project structure. 9. 10. # Project target. 11. target=android-9 12. proguardproguard.config=proguard.cfg 大功告成,正常的編譯簽名後就可以防止代碼被反編譯了。
㈢ Android 開發怎樣做代碼加密或混淆
android代碼的混淆和加密:
通常來說Proguard對一般用途來說足夠了,但是也需要注意一些程序風格,增強proguard的效果。
1、 特定類的public函數不做實際的事情,只做簡單處理後調用private函數。proguard對會對一些特定類的public函數不做混淆,以便被AndroidManifest.xml和各種layout引用。
2、會被AndroidMinifest.xml和layout引用的類放在淺層的包中,需要隱藏的類放在較深處,以便proguard混淆包名帶來好處。如果一個包中有需要不混淆的內容,則整個包名都不會被混淆。
3、將函數根據功能分細切短也會有些益處。當然如果隱藏代碼的要求比較高,還是用native好了。
望採納!!
㈣ 如何使用Android Studio打包混淆的Jar
使用AS打包混淆Jar包,網路一下,一片一片的,但是很多都是零零散散的寫得不是很詳細或是直接拷貝,按照他們的教程測試總不是很順利,所以這里我就把我個人學習AS打包混淆Jar的成果總結出來,希望對大家有幫助。個人覺得寫得還是比較詳細的
使用gradle混淆打包Jar
使用AS開發項目,引入第三方庫是非常方便的,我們只需要在build.gradle中配置一行代碼就可以輕松引入我們需要的開發庫。那麼gradle可以幫我們混淆打包Jar嗎?答案是當然可以!
那麼我們如何打包Jar呢?其實我們在編譯項目的時候,AS已經幫我們在目錄build/intermediates/bundles/release/classes.jar打好了Jar。那麼我們需要做的就是把Jar進行混淆的工作了。這里以個人項目bannerDemo為例,混淆步驟如下:
在你的library的build.gradle文件中加入如下代碼:
task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
// 未混淆的jar路徑
injars 'build/intermediates/bundles/release/classes.jar'
// 混淆後的jar輸出路徑
outjars 'build/outputs/cocolove2-banner-1.1.0.jar'
// 混淆協議
configuration 'proguard-rules.pro'}
配置混淆協議
1.我們先把AS自帶的協議配置進來中文注釋,筆者添加
# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html## Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer# versions are distributed with the plugin and unpacked at build time. Files in this directory are# no longer maintained.#表示混淆時不使用大小寫混合類名-dontusemixedcaseclassnames#表示不跳過library中的非public的類-#列印混淆的詳細信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不進行校驗,這個校驗作用 在java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {
native <methods>;
}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
2.AS自帶的配置文檔還是不夠的,我們還需要加入如下配置
這里只展示基本操作,在實際開發中可能需要更多依賴,要根據具體情況引入自己需要的依賴包
#下面代碼中的xx是指我個人的配置路徑,涉及個人信息,這里以xx代替
#引入依賴包rt.jar(jdk路徑)
-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar
#引入依賴包android.jar(android SDK路徑)
-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar
#如果用到Appcompat包,需要引入
-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar
-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar
#忽略警告
-ignorewarnings
#保證是獨立的jar,沒有任何項目引用,如果不寫就會認為我們所有的代碼是無用的,從而把所有的代碼壓縮掉,導出一個空的jar
-dontshrink
#保護泛型
-keepattributes Signature
3.加入自己不想混淆的配置根據實際需求配置
-keep class com.cocolove2.library_banner.view.**{*;}
在命令行執行命令混淆Jar,提示BUILD SUCCESFUL表示成功!
//mac./gradlew makeJar//windowsgradlew makeJar
示例展示
我這里以混淆library-banner庫為例
- #log提示缺少依賴Jar,或者路徑不對
- 解決辦法:乖乖的引入缺少的依賴jar和修改路徑
- #提示如下異常[INFO] java.io.IOException: Can't read [D:Program
- FilesJavajdk1.8.0_91jrelib t.jar] (Can't process class [com/oracle/net/Sdp$1.class] (Unsupported class version number
- [52.0] (maximum 51.0, Java 1.7)))
- 解決辦法:
- 下載最新proguard(支持Java 8的版本),然後將下載的文件解壓。
- 將andorid sdk/tools/proguard/lib中的jar包,替換為剛下載解壓文件中的lib包。
proguard5.2.1下載地址
1.首先我們要看看下我們的buildTool的配置,如下圖:
混淆報錯解決辦法個人遇到的
閱讀
㈤ android源碼被混淆了怎麼還原
android源碼被混淆了還原方法為:
1、得到 classes.dex文件;直接用機器上的解壓軟體 打開 .apk 文件,解壓出 classes.dex 文件。
2、還原.jar文件;這一步需要用到一個工具 dex2jar (谷歌的代碼庫里有http://code.google.com/p/dex2jar/)下載完了,解壓,然後把第一步的 產物(即那個classes.dex文件)放到 dex2jar的解壓目錄(解壓目錄里 有 dex2jar.bat 文件,檢查一下,沒有的話說明目錄不對)。
3、查看.jar文件;這一步就是傳統的 反編譯 了,需要工具輔助,這里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)下載系統對應的版本,解壓,(xp系統)會看到一個 .exe文件,沒錯就是 單文件綠色版,雙擊,選擇 第二步 生成的 .jar,即可。
㈥ android 加入library如何混淆
android工程會看到項目有
project.properties這個文件就是用來開啟項目是否混淆
proguard-project.txt 這個文件就是記錄了代碼混淆的屬性
要開啟混淆,只需要將project.properties 文件中的
# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt」的「#」去掉就可以了。
關於proguard-project.tx混淆的屬性:
通常情況下,我們只需要作以上幾步操作就能滿足需求,如果有一些特殊要求,某些類或者jar包不需要混淆,這個時候就需要修改proguard-project.txt文件了。以下是網上搜索的網友分享的經驗:
1.在proguard-project.txt文件中添加不需要混淆的類和第三方的jar包
這個是保持自己包中不需要混淆的類,如果有些類調用了jni也不需要混淆,不然會出錯。還有如果項目中有其他項目作為library引入,那這些項目的一些類也不能混淆。
2.另外還有其他一些經驗:
-optimizationpasses 5壓縮等級
-dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】
- 【指定不去忽略非公共的庫類。 】
-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
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>;【所有方法不進行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【對該方法不進行混淆】
}
-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 *;
}
㈦ android 工程中什麼是混淆代碼工具proguard的配置文件
proguard的配置文件如果是在4.3版本之後,新建工程之後,就會生成這個文件,裡面可以進行一些混淆的操作。
㈧ 什麼是代碼混淆andriod和android-studio工程如何啟用代碼混淆功能
代碼混淆有兩種重要功能。其一,混淆代碼。其二,優化代碼。
進行代碼混淆的程序被稱為代碼混淆器(混淆工具)。進行代碼混淆的意義主要在於對代碼進行一定程度的加密。
在android 2.3之後,sdk中就已經集成了混淆器proguard(目錄在sdk\tools\proguard),所以我們可以很方便的直接在工程中開啟代碼混淆。
eclipse android工程開啟混淆功能,我們需要手動在項目文件.properties(我的是project.properties文件)中添加下面的代碼
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
某些方式創建的項目中可能已經有如上兩行了,只是默認被注釋掉了,只要把proguard.config這一行解注釋就好了。這樣代碼混淆功能就開啟了,在打簽名包時,項目會自動進行代碼混淆。
㈨ Android之如何混淆代碼和相關配置
項目發布之前混淆是必不可少的工作,混淆可以增加別人反編譯閱讀代碼的難度,還可以縮小APK包。
使用步驟:
1、修改project.properties文件:
Java代碼 收藏代碼
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
去掉proguard.config一行前面的#注釋;
2、配置proguard-project.txt文件:
這個是主配置文件,裡面配置哪些需要混淆,哪些不需要混淆的選項;
提供給外部的類、方法、變數等名字不能混淆;
在AndroidManifest中配置的類(Activity、Service等的子類及Framework類默認不會進行混淆)
不混淆Parcelable的子類,防止android.os.BadParcelableException
Jni中調用的類
反射用到的類
項目中的實體類
3、導出項目:
export簽名項目。
4、查看是否混淆成功:
用反編譯工具反編譯並對比未混淆的代碼;
5、運行ProGuard及其生成的文件介紹
在以release模式下打包apk時會自動運行ProGuard,這里的release模式指的是通過ant release命令或eclipse project->android tools->export signed(unsigned) application package生成apk。在debug模式下為了更快調試並不會調用proguard。
如果是ant命令打包apk,proguard信息文件會保存於<project_root>/bin/proguard文件夾內;如果用eclipse export命令打包,會在<project_root>/proguard文件夾內。其中包含以下文件:
mapping.txt表示混淆前後代碼的對照表,這個文件非常重要。如果你的代碼混淆後會產生bug的話,log提示中是混淆後的代碼,希望定位到源代碼的話就可以根據mapping.txt反推。
mp.txt描述apk內所有class文件的內部結構
seeds.txt列出了沒有被混淆的類和成員
usage.txt列出了源代碼中被刪除在apk中不存在的代碼
目前市面上有很多第三方應用加固的平台, 如果新應用發布前需要掃描或者加固的話,可以先試試免費的,例如騰訊御安全,建議自己先去加固測試下。