您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么對Android代碼進行混淆”,在日常操作中,相信很多人在怎么對Android代碼進行混淆問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么對Android代碼進行混淆”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
apk直接可以 解壓,然后很容易的就可以反編譯出.java,找了找,果然,這一切只不過是 一分鐘的事兒:
1、得到classes.dex文件;直接用你機器上的解壓軟件打開.apk 文件,解壓出 classes.dex 文件。
2、還原.jar文件;這一步需要用到一個工具 dex2jar (谷歌的代碼庫里有 http://code.google.com/p/dex2jar/)
下載完了,解壓,然后把***步的 產物(即那個classes.dex文件)放到 dex2jar的解壓目錄里。
cmd命令行,目錄切換到dex2jar的目錄下:
“ dex2jar.bat classes.dex”
看到命令行的 “Done” 之后, dex2jar文件夾里 就會有“classes.dex.dex2jar.jar” 文件了,這個就是傳說中的jar包了。
3、查看.jar文件;這一步就是傳統的反編譯了,需要工具輔助,我這里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)
下載你的系統對應的版本、解壓,你會看到一個.exe文件,雙擊,選擇第二步生成的.jar, 好吧,你的項目是不是完全還原了呢?
非常簡單的步驟就能讓代碼暴露。
那么,如何對我們的代碼混淆呢?
新建一個 2.3.3的項目,你會看到項目文件里有一個proguard.cfg 文件,google已經幫我們做了這么多事,可惜是從2.3開始的,那我 悲催的項目(基于2.2的sdk) 該如何是好?
呵呵,其實不用,你只要 把 proguard.cfg 文件 拷貝到 你的 舊項目里就好了。
當然這樣還不夠,因為 google是默認不混淆項目的:
To enable ProGuard so that it runs as part of an Ant or Eclipse build, set the proguard.config property in the <project_root>/default.properties file. The path can be an absolute path or a path relative to the project's root.
google 告訴我們 還要 配置 default.properties.
嗯,把 proguard.config=proguard.cfg 加上,好了,再次生成 新的 .apk文件,然后用上面的方法 反編譯你的 項目,你會看到 aa bb cc 的包、aa bb cc 的類 和 aa bb cc 的變量名,方法名.
再看看 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 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 *; }
到此,關于“怎么對Android代碼進行混淆”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。