android 混淆

简介: 引用:http://www.cnblogs.com/classic/archive/2011/04/27/2030234.html 一个xxx.apk提交给测试、 ok,去倒杯水,看看网页~~~~~ 呃,忽然觉得 是不是应该 给我的代码 提高点安全性, 记得看过 apk直接可以 解压,然后很容易的就可以 反编译出 .

引用:http://www.cnblogs.com/classic/archive/2011/04/27/2030234.html

一个xxx.apk提交给测试、

ok,去倒杯水,看看网页~~~~~

呃,忽然觉得 是不是应该 给我的代码 提高点安全性,

记得看过 apk直接可以 解压,然后很容易的就可以 反编译出 .java

找了找,果然,这一切 只不过是 一分钟的事儿,

1、得到 classes.dex文件;直接用你机器上的  解压软件 打开 .apk 文件

  解压出 classes.dex 文件,(这个就是 .jar 的前生--- 其实应该说 后世)

  win rar

2、还原.jar文件;这一步需要用到一个工具 dex2jar (谷歌的代码库里有 http://code.google.com/p/dex2jar/

  看名字也不难知道他是干嘛的了吧?(没错,就是 把 dex 还原 成  jar包 )

  下载完了,解压,然后把第一步的 产物(即那个classes.dex文件)放到 dex2jar的解压目录里

  (解压目录里 有 dex2jar.bat 文件,检查一下,没有的话 说明目录不对、再 找找)

  dex2jar

  cmd 命令行 ,目录切换到 dex2jar的目录下(linux 系统的话 执行那个 .sh文件)

  “ dex2jar.bat classes.dex”

  看到命令行  的 “Done” 之后, dex2jar 文件夹里 就会有“classes.dex.dex2jar.jar” 文件了,

  这个就是 传说中的 jar包了

  done

3、查看.jar文件;这一步就是传统的 反编译 了,需要工具辅助,我这里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui

  下载你的系统对应的版本,解压,(我xp系统)你会看到一个 .exe文件,没错就是 单文件绿色版

  双击,选择 第二步 生成的 .jar, 好吧,你的项目是不是 完全还原了呢?(内部类的话 还原后的结构看着有点不喜欢)

没错,这么简单 就能 让你的代码暴露了,心疼不?

[这里我就不贴 图了,公司的项目]

好了,接下来说说  怎么混淆吧,网络上好多介绍 proguard 混淆android 项目的文章,都是抄来贴去,

好几个都是讲得没头没尾、我看了好半天  ,愣是没搞明白,……

android sdk \ tools 目录下 看到 proguard 了没?

androidtools

新建一个 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 的变量名,方法名.

这个我相信你自己也搞的头昏了吧?

ok

再看看 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 的子类 名称是被保留的。

想自定义 混淆细节 的话 就 琢磨琢磨这个配置文件吧

相关文章
|
JSON Android开发 数据格式
我的Android进阶之旅------&gt;解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug
1、错误描述 今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null。
1533 0
|
Android开发
Android 混淆详解
Android 混淆详解 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/69388246 本文出自【赵彦军的博客】 混淆的基本概念 什么是混淆? 代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。
1717 1
|
Java Android开发
Android项目实战(二十五):Android studio 混淆+打包+验证是否成功
原文:Android项目实战(二十五):Android studio 混淆+打包+验证是否成功 前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep。
1180 0
|
Java 开发工具 Android开发
|
Web App开发 Java 开发工具
|
Java Android开发 数据格式
|
算法 Java Android开发
|
Java Android开发
Android项目实战(二十五):Android studio 混淆+打包+验证是否成功
前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep。-keep class com.hyphenate.** {*;} -dontwarn com.hyphenate.**   即:混淆规则。
1151 0
|
Android开发
android混淆
<p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px"> 为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:</p> <p styl
1460 0