android 代码 混淆- 原来如此简单
2013-03-05 16:36
441 查看
android 代码 混淆- 原来如此简单
一个xxx.apk提交给测试、ok,去倒杯水,看看网页~~~~~
呃,忽然觉得 是不是应该 给我的代码 提高点安全性,
记得看过 apk直接可以 解压,然后很容易的就可以 反编译出 .java
找了找,果然,这一切 只不过是 一分钟的事儿,
1、得到 classes.dex文件;直接用你机器上的 解压软件 打开 .apk 文件
解压出 classes.dex 文件,(这个就是 .jar 的前生--- 其实应该说 后世)
2、还原.jar文件;这一步需要用到一个工具 dex2jar (谷歌的代码库里有 http://code.google.com/p/dex2jar/)
看名字也不难知道他是干嘛的了吧?(没错,就是 把 dex 还原 成 jar包 )
下载完了,解压,然后把第一步的 产物(即那个classes.dex文件)放到 dex2jar的解压目录里
(解压目录里 有 dex2jar.bat 文件,检查一下,没有的话 说明目录不对、再 找找)
cmd 命令行 ,目录切换到 dex2jar的目录下(linux 系统的话 执行那个 .sh文件)
“ dex2jar.bat classes.dex”
看到命令行 的 “Done” 之后, dex2jar 文件夹里 就会有“classes.dex.dex2jar.jar” 文件了,
这个就是 传说中的 jar包了
3、查看.jar文件;这一步就是传统的 反编译 了,需要工具辅助,我这里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)
下载你的系统对应的版本,解压,(我xp系统)你会看到一个 .exe文件,没错就是 单文件绿色版
双击,选择 第二步 生成的 .jar, 好吧,你的项目是不是 完全还原了呢?(内部类的话 还原后的结构看着有点不喜欢)
没错,这么简单 就能 让你的代码暴露了,心疼不?
[这里我就不贴 图了,公司的项目]
好了,接下来说说 怎么混淆吧,网络上好多介绍 proguard 混淆android 项目的文章,都是抄来贴去,
好几个都是讲得没头没尾、我看了好半天 ,愣是没搞明白,……
android sdk \ tools 目录下 看到 proguard 了没?
新建一个 2.3.3的项目,你会看到 项目 文件里 有一个 proguard.cfg 文件?
好吧,伟大的 google 已经帮我们做了这么多事儿了,可惜是从2.3开始的,
那我 悲催的 项目(基于2.2的sdk) 该如何 是好?(非得 残忍的把 项目属性设置为 2.3的么?
其实即使你该了,google 也不会为你把 proguard.cfg文件补上的)
呵呵,其实不用,你只要 把 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 *; }
这里是 google默认 不混淆 Activity 、Service ... 类的 子类, 正如上面的截图中看到的 所有 activity 的子类 名称是被保留的。
想自定义 混淆细节 的话 就 琢磨琢磨这个配置文件吧
分类: android
绿色通道: 好文要顶 关注我 收藏该文与我联系
曲怀觞
关注 - 0
粉丝 - 4
+加关注
2
0
(请您对文章做出评价)
« 博主上一篇:针对java/C#程序员的C++(Qt)入门指南[前言]
» 博主下一篇:某网站见到一则评论,引用而来
posted on 2011-04-27 12:03 曲怀觞 阅读(15721) 评论(4) 编辑 收藏
FeedBack:
#1楼 2011-04-27 13:22 nothing
better
推荐你看一下 baksmali 这个工具。它是一个逆向工具。
通过逆向可以非常清晰的看出项目结构和流程。。。
代码混淆那只是给那些小白们看的。。
支持(0)反对(0)
#2楼 2011-05-16 09:51 haojunming
问一下,我的就是用这种方法混淆的,可是混淆后的apk文件不能安装,不知道该怎么办,请您帮帮忙,谢谢啊,我的手机号18701427983,qq1149598411,再次谢谢,这个混淆我都做了近一个月了,苦恼死我了
支持(0)反对(0)
#3楼 2011-10-26 11:41 小飞侠09
这个混淆不管用啊,我混淆过后,还能反编译出源码
支持(0)反对(0)
#4楼 2012-03-13 14:41 weipt
是啊,我的是2.2的,加了哪一句也没用啊
相关文章推荐
- android 代码 混淆- 原来如此简单
- android 代码 混淆- 原来如此简单
- android 代码 混淆- 原来如此简单
- android 代码 混淆- 原来如此简单
- android 代码 混淆- 原来如此简单
- android 代码 混淆- 原来如此简单
- android代码混淆- 原来如此简单
- android 代码 混淆- 原来如此简单
- 简单方便的代码混淆(Android)
- Android 简单的代码混淆
- Android代码混淆的一个常用的简单例子
- Android代码混淆,就这么简单
- Android代码混淆只需简单三步
- Android 最简单的代码混淆
- Android常用代码混淆的简单解释
- 简单Android代码混淆(转)
- Android 代码混淆及第三方jar包不被混淆
- android应用安全——代码安全(android代码混淆)
- 如何混淆Android项目代码(ProGuard)防止反编译
- Android 代码混淆总结