前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

反编译apk、混淆、Proguard机制 - 程序猿?工程狮! - 博客频道 - CSDN.NET 程序猿?工程狮! 活着最终是为了生活,哦不,这个过程一定要精彩! 目录视图 摘要视图 订阅 “大声说出你的爱”情人节特别活动获奖名单发布 专访小恩爱CTO钟超:让数据决定创意功能的去留 电子版《程序员》杂志免费领 反编译apk、混淆、Proguard机制 分类: Android 2011-12-29 23:51 2603人阅读 评论(1) 收藏 举报 javajartoolsandroid工具windows 1反编译说明方法 ============================================================== 一.反编译Apk得到Java源代码 转载自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip 或者 http://code.google.com/p/dex2jar/ JD-GUI下载地址: windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz 步骤: 1.首先找到Android软件安装包中的classes.dex 把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar 3.运行JD-GUI工具(它是绿色无须安装的) 打开上面的jar文件,即可看到源代码 --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- 二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件。 转载自:http://blog.sina.com.cn/s/blog_5752764e0100kv34.html 工具下载: 在http://code.google.com/p/android-apktool/下 载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。 步骤: 1.解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解压后的一个.jar 文件copy进来) 2.打开命令窗口 (开始 > 运行,输入cmd,回车。)进入到apktool.bat的文件夹里。 输入: apktool d C:\***.apk C:\***文件夹 (命令行解释:apktool d 要反编译的文件 输出文件夹) 特别注意:你要反编译的文件一定要放在C盘的根目录里, 3.打开 C:\***文件夹 就可以得到我们学院的各种资源了。 三.将反编译完的文件重新打包成apk 很简单,只要输入: apktood b c:***文件夹(你编译出来文件夹) 2.混淆、防止反编译的方法 ================================================================================ 作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。 Google&#20284;乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹 proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。 下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\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 * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -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 *; } 从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService, 并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数&#26684;式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。) 让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了 完整的default.properties文件应该如下: # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system use, # "build.properties", and override values to adapt the script to your # project structure. # Project target. target=android-9 proguard.config=proguard.cfg 大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类&#20284;于下面的效果,是很难看懂的: 如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可 如果有很多警告的话,就在proguard.cfg配置文件中加一行 -ignorewarnig就可以了。 &#20540;得注意的是在bin中的apk那个是不算的,可能还是没什么区别,只有通过签名之后的打包出来反编译就有如上图的效果。 3.ProGuard混淆机理 ============================================================================================ ProGuard工具通过移除不用的代码,用语义上混淆的名字来重命名类、字段和方法等手段来压缩、优化和混淆你的代码。结果是更小的.apk文件,并且更难于被反编译。由于ProGuard能够让你的程序难于被反编译,因此,当你的程序使用了一些机密的信息的时,使用它就显得更加重要。 ProGuard已经集成到Android的编译环境中,因此,用不着手动来触发它。ProGuard只在release模式下编译应用程序才会运行,所以,在debug模式下编译,你就不必处理混淆的代码。是否运行ProGuard是完全可选的,但强烈推荐使用。 启用ProGuard 当你创建Android工程时,proguard.cfg文件会在工程的根目录自动创建。这个文件定义了ProGuard如何优化和混淆代码,因此,理解如何定制它是非常重要的。默认的配置文件只是覆盖了一些通用的情况,所以,基本上你需要编辑它来满足你的需求。参考后面的“配置ProGuard”章节来了解如何定制ProGuard的相关信息。 启用ProGuard让它跟随Ant或Eclipse编译时一起运行,你需要在<project_root>/default.properties文件中设置proguard.config属性。路径可以是绝对路径或是工程根目录的相对路径。 如果你把proguard.cfg文件放在默认的位置(工程的根目录),你可以像这样来指定它的位置: proguard.config=proguard.cfg 你还可以把该文件移到任何你想放的位置,然后指定绝对路径:proguard.config=/path/to/proguard.cfg 当你在release模式下编译你的程序,不管是用ant release还是用Eclipse的导出向导,编译系统都会自动检查proguard.config属性是否设置。如果设置了,ProGuard就会在打包成.apk文件之前,自动处理应用程序的字节码。Debug模式编译,不会触发ProGuard,因为它会使得调试更加复杂累赘。 ProGuard运行结束后,输出以下文件: dump.txt 描述.apk文件中所有类文件间的内部结构 mapping.txt 列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。 seeds.txt 列出了未被混淆的类和成员 usage.txt 列出了从.apk中删除的代码 这些文件放在以下文件夹中: Ant:<project_root>/bin/proguard Eclipse: <project_root>/proguard 注意:每当你在release模式下编译时,这些文件都会被覆盖重写,当然,是被ProGuard工具生成的最新的文件所覆盖。每次你发布你的程序时,都应该保存一份,为了将来能够解码bug报告。 配置 ProGuard 一些情况下,proguard.cfg文件中的默认配置就足够了。然而,有些情况ProGuard也很难正确分析,它可能会删除它认为不用的代码,但实际上正是你的程序所需要的。例如: 只在AndroidManifest.xml文件中引用的类 由JNI调用的方法 动态引用的字段和方法 默认的proguard.cfg文件努力去覆盖通用的情况,但有可能你会遇到如ClassNotFoundException这样的异常,而这正好是由于ProGuard移除了整个类造成的。 你可以修正由于ProGuard移除代码造成的错误,只需要在proguard.cfg文件中添加一行“-keep”。例如: -keep public class <MyClass> 使用-keep选项时,有一些选项和建议,因此,强烈建议你阅读ProGuard手册来了解更多关于定制配置文件的信息。“Overview of Keep options”和“Examples section”将非常有用。 更多 上一篇:android的消息Toast,提示对话框,menu,Activity替换数据传递。 下一篇:Android layout之优化:使用include和merge 标签 相关主题推荐 反编译 apk android应用 broadcastreceiver 应用程序 相关博文推荐 cocos2dx 2.2.2版本从VS到... 解决google地图无法使用网络定位的问题 Linux下Qt应用程序的发布 (android)如何创建自己可用的Se... 为你的Android应用申请更多内存 ubuntu 反编译apk 关于Unity 2d动画实现 Android Fragment详解(二... 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 Take_all 访问:15832次 积分:267分 排名:千里之外 原创:9篇 转载:14篇 译文:0篇 评论:8条 文章搜索 文章分类 Android(14) 关于计算机(2) 程序猿(3) Java(4) 文章存档 2012年06月(7)2012年05月(1)2012年04月(3)2012年03月(9)2011年12月(3) 阅读排行 反编译apk、混淆、Proguard机制(2603) Android px和dip及sp的区别及转换代码(2207) Android adb shell(1501) 整理些草笔记(1381) android 双击back建退出程序代码(1266) 解决Listview页脚RemoveFooterView报java.lang.ClassCastException错问题(1065) 解决Android Graphical Layout(693) ListView与Adapter使用要点 ConverView问题。。(581) 成为Android高手一般分为六个阶段(540) Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用(506) 评论排行 解决Listview页脚RemoveFooterView报java.lang.ClassCastException错问题(4) Android adb shell(1) 反编译apk、混淆、Proguard机制(1) ListView与Adapter使用要点 ConverView问题。。(1) 程序员职业规划发展路线图(1) synchronized(0) android 双击back建退出程序代码(0) 解决Android Graphical Layout(0) android Toast大全(五种情形)建立属于你自己的Toast(0) Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用(0) 推荐文章 最新评论 解决Listview页脚RemoveFooterView报java.lang.ClassCastException错问题 Take_all: @littelsnail:如果没有footview,删除当然报错的哦。add当然不会先报错。 解决Listview页脚RemoveFooterView报java.lang.ClassCastException错问题 littelsnail: 有个疑问,如果添加和删除footer出错,那首先报错的应该是添加footer处啊,为什么是在删除fo... Android adb shell LLTKk: 很专业的介绍!但是从哪下载? 解决Listview页脚RemoveFooterView报java.lang.ClassCastException错问题 doubloon: 谢谢指点。有专注才有收获。系统涉及的东西太多,又从高到低层,一眼看过去有时深不见底。呵呵 ListView与Adapter使用要点 ConverView问题。。 jianfeng4207: 谢谢LZ,帮了我大忙,一开始以为新加入的Item,converView才为空,所以一直出错,SDK文... 解决Listview页脚RemoveFooterView报java.lang.ClassCastException错问题 yinhuangjia: 先生真乃神人也 程序员职业规划发展路线图 Take_all: 向着美好的未来奋进! 反编译apk、混淆、Proguard机制 jeffsc: java –jar AXMLPrinter2.jar capture.xml > test.xml...