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
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
; - }
- -keepclasseswithmembernames class * {
- public
(android.content.Context, android.util.AttributeSet); - }
- -keepclasseswithmembernames class * {
- public
(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代码进行混淆的教程
文章转载:http://www.shufengxianlan.com/qtweb/news14/63664.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联