温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么对Android代码进行混淆

发布时间:2021-12-18 17:02:49 来源:亿速云 阅读:179 作者:iii 栏目:移动开发

这篇文章主要介绍“怎么对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代码进行混淆”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI