前往Shuct.Net首页

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

关于反编译的搜索

如何反编译,防止反编译,常见问题总结 - Leo - 博客频道 - CSDN.NET Leo 杨念材 目录视图 摘要视图 订阅 新年新气象------CSDN2014新版导航就要跟大家见面了 2014年1月微软MVP当选名单揭晓! 消灭0回答,赢下载分 “我的2013”年度征文活动火爆进行中! 专访何海涛:“不正经”程序员的进阶之路 如何反编译,防止反编译,常见问题总结 分类: Android 2012-02-21 11:20 1565人阅读 评论(0) 收藏 举报 反编译工具jareclipse下载工具javaexception 本文对如何反编译,防止反编译,和常遇到的问题做了个总结,并略有修改。 资源来自:http://blog.csdn.net/sunboy_2050/article/details/6727581 http://blog.csdn.net/sunboy_2050/article/details/6727640 http://blog.csdn.net/wustrive_2008/article/details/7169810 如何防止反编译 作为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的内容: [html] view plaincopyprint? -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自动生成的project.properties文件中加上一句“proguard.config=proguard.cfg”就可以了 完整的project.properties文件应该如下: [html] view plaincopyprint? # 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文件复制一份放到项目中,然后进行相同的操作即可 如何进行反编译 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。 一、反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址: dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:http://laichao.googlecode.com/files/jdgui.zip 具体步骤: 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的; 解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录 运行 dex2jar.bat classes.dex 生成 classes.dex.dex2jar.jar 生成jar文件的截图如下: 运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了 HelloAndroid源码(编译前的apk源码对照)如下: 二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件 如果是只是汉化软件,这将特别有用。 首先还是下载工具,这次用到的是apktool 下载地址:http://code.google.com/p/android-apktool/downloads/list 下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载) 具体步骤: 将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar 在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图: 命令行解释:apktool d [apk文件 ] [输出文件夹] 反编译的文件如下(AndroidManifest.xml为例): 特别注意:你要反编译的文件一定要放在C盘的根目录里 将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下: 打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹: build dist 其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok 混淆代码中常遇到的问题 问题一:proguard:Parse Exception: 解决方法:由于Eclipse的工作空间路径中有空&#26684;(可能还有其他原因导致此错误), 问题二:Conversion to Dalvik format failed with error 1 解决办法:网上下一个新版本的proguard,解压后,复制里面的lib和bin目录覆盖SDK中tools/progurad/下的lib和bin目录即可。 proguard的下载地址:http://proguard.sourceforge.net/#downloads.html最终解决问题! 更多 上一篇:playBackgroundMusic and playEffect crash 下一篇:常用的RBG编码表 查看评论 * 以上用户言论只代表其个人观点,不代表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 个人资料 ecjtuync 访问:294387次 积分:4426分 排名:第1407名 原创:165篇 转载:56篇 译文:0篇 评论:89条 文章搜索 文章分类 ACM算法设计(3) Apache(6) ASP.NET2.0(48) C/C++语言编程(20) database(3) ICE中间件(4) Linux(23) Openssl &amp; cryptlib研究(5) Python(2) qtopia开发(11) shell(3) WinCE开发(24) windows(31) 计算机应用FAQ(9) 设计模式(Design pattern)(6) 软件工程(3) Android(6) IOS(1) itron(2) 文章存档 2013年06月(1)2013年01月(2)2012年08月(3)2012年02月(2)2012年01月(3)2011年12月(1)2011年05月(7)2010年06月(3)2010年05月(1)2010年02月(1)2010年01月(1)2009年12月(1)2009年11月(4)2009年09月(2)2009年08月(11)2009年06月(5)2009年05月(4)2009年04月(5)2009年02月(2)2008年12月(5)2008年11月(13)2008年10月(11)2008年09月(9)2008年08月(3)2008年06月(5)2008年03月(4)2008年01月(1)2007年12月(1)2007年11月(1)2007年10月(9)2007年09月(13)2007年08月(6)2007年07月(5)2007年06月(6)2007年05月(23)2007年04月(19)2007年03月(9)2007年01月(19) 阅读排行 入党转正申请书 (35553) vc sp6 中英文和补丁下载地址(17468) word文档设置页眉页脚的技巧(13080) 什么是所谓的一级学科,二级学科,国家一级学科等,是怎样分类的??(9789) windows找不到msconfig解决方法(7045) Linux下gcc编译中关于头文件与库文件搜索路径相关问题 (6677) qt-designer使用教程1--HelloWorld (5988) word里实现在方框中打勾和打叉(4595) GDB attach 用法(4588) C语言图形编程(4169) 评论排行 vc sp6 中英文和补丁下载地址(27) word文档设置页眉页脚的技巧(5) OPENSSL_Uplink(0098E000,07): no OPENSSL_Applink 错误分析(4) 字符集编码的识别(4) 您试图打开以前版本的Microsoft Office创建的文件。注册表策略设置已阻止此文件在该版本中打开的解决办法(3) mysql++ use Unicode on Windows(3) Apache Hook机制解析(下)——实战:在自己的代码中使用Apache的钩子(3) C语言图形编程(2) 购买笔记本时候的注意事项(2) sp6补丁应该放在哪个文件夹下面?(2) 推荐文章 最新评论 Windows下用C语言获取进程cpu使用率,内存使用,IO情况 mopdwell: 为什么这段代码在VS2005上编译通不过啊,求助。 C++ 发手机短信(很易很简单) caojun19790629: 老师给源码 Linux 用qmake快速生成makefile chenybh110: 迷茫了半天,看到楼主文章终于明白qmake的用途了~ OPENSSL_Uplink(0098E000,07): no OPENSSL_Applink 错误分析 jjz2009nsqdzh: 知其然,知其所以然!希望CSDN多一些像您这样的原创性文章。 Crypto++库在VS 2005中的使用——RSA加解密 HHasdsda: 我项目里需要多线程调试dLL(MDd)(release),那该怎么办 cocos2d-x环境配置和常见问题 hyq1017: 我用eclipse编译cocos2dx的testcpp自带示例(android),已经Install... 两个开发源码加密库openssl和cryptlib的比较 linda1000: 你好,请问cryptlib有针对python应用的模块吗? C#.NET 连接 Access操作类 iispecial: 部错 Valgrind 使用简单说明 cinderellaxw: 转载好文,要顶。那个例子是官方的例子。 cocos2d-x 输出debug信息 ecjtuync: 这个错误意思是 eclipse的环境里要lcocos2d把这个库加起。 牛人博客 牛人博客 源代码下载 源码天空 (RSS)vc在线杂志资源 (RSS)加密算法下载openssl (RSS) 资料下载网站 天轰穿博客 (RSS)编程论坛 (RSS)oldlinux源代码 (RSS)linux论坛 (RSS)www.linuxforum.net (RSS)http://lxr.linux.no/source/ (RSS)http://www.codeguru.com/ (RSS)http://www.codeproject.com/ (RSS)Visual Studio 2005 msdn在线资源 (RSS)Qt学习论坛 (RSS)qt (RSS)C/C++函数查询文档 (RSS)C++ STL资源 (RSS)微软移动设备开发论坛 (RSS)Microsoft TechNet (RSS)w3school (RSS)