溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么對(duì)Android代碼進(jìn)行混淆

發(fā)布時(shí)間:2021-12-18 17:02:49 來(lái)源:億速云 閱讀:188 作者:iii 欄目:移動(dòng)開發(fā)

這篇文章主要介紹“怎么對(duì)Android代碼進(jìn)行混淆”,在日常操作中,相信很多人在怎么對(duì)Android代碼進(jìn)行混淆問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么對(duì)Android代碼進(jìn)行混淆”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

apk直接可以 解壓,然后很容易的就可以反編譯出.java,找了找,果然,這一切只不過(guò)是 一分鐘的事兒:

1、得到classes.dex文件;直接用你機(jī)器上的解壓軟件打開.apk 文件,解壓出 classes.dex 文件。

2、還原.jar文件;這一步需要用到一個(gè)工具 dex2jar (谷歌的代碼庫(kù)里有 http://code.google.com/p/dex2jar/)

下載完了,解壓,然后把***步的 產(chǎn)物(即那個(gè)classes.dex文件)放到 dex2jar的解壓目錄里。

cmd命令行,目錄切換到dex2jar的目錄下:

“ dex2jar.bat classes.dex”

看到命令行的 “Done” 之后, dex2jar文件夾里 就會(huì)有“classes.dex.dex2jar.jar” 文件了,這個(gè)就是傳說(shuō)中的jar包了。

3、查看.jar文件;這一步就是傳統(tǒng)的反編譯了,需要工具輔助,我這里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)

下載你的系統(tǒng)對(duì)應(yīng)的版本、解壓,你會(huì)看到一個(gè).exe文件,雙擊,選擇第二步生成的.jar, 好吧,你的項(xiàng)目是不是完全還原了呢?

非常簡(jiǎn)單的步驟就能讓代碼暴露。

那么,如何對(duì)我們的代碼混淆呢?

新建一個(gè) 2.3.3的項(xiàng)目,你會(huì)看到項(xiàng)目文件里有一個(gè)proguard.cfg 文件,google已經(jīng)幫我們做了這么多事,可惜是從2.3開始的,那我 悲催的項(xiàng)目(基于2.2的sdk) 該如何是好?

呵呵,其實(shí)不用,你只要 把 proguard.cfg 文件 拷貝到 你的 舊項(xiàng)目里就好了。

當(dāng)然這樣還不夠,因?yàn)?google是默認(rèn)不混淆項(xiàng)目的:

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文件,然后用上面的方法 反編譯你的 項(xiàng)目,你會(huì)看到 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 *; }

到此,關(guān)于“怎么對(duì)Android代碼進(jìn)行混淆”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI