前往Shuct.Net首页

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

关于反编译的搜索

如何实现APK的反编译得到APK的源码? - wed110的专栏 - 博客频道 - CSDN.NET wed110的专栏 各种收集各种找技术 目录视图 摘要视图 订阅 新年新气象------CSDN2014新版导航就要跟大家见面了 2014年1月微软MVP当选名单揭晓! 消灭0回答,赢下载分 “我的2013”年度征文活动火爆进行中! 专访何海涛:“不正经”程序员的进阶之路 如何实现APK的反编译得到APK的源码? 2012-08-22 22:59 2273人阅读 评论(2) 收藏 举报 反编译工具jarandroid下载工具java工具 对于初学者 下面的内容还是挺有用的哦 http://blog.csdn.net/sunboy_2050/article/details/6727581 不知道为什么图片无法显示 Android APK反编译详解(附图) 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。 注:本Android反编译教程,在Windows7-Ultimate-64bit操作系统上,测试通过! 下述所需的反编译工具包 下载 一、反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者dex2jar是将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所在目录(在DOS命令下CD 目录) 运行 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盘的根目录里(其实不用放在C盘根目录也行) 例如:在D盘目录D:\apktool1.4.1 cd /d D:\apktool1.4.1 //切换到D盘目录,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三个文件 apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反编译命令,注意 d 和 -f 的写法 将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:这个主意你文件所在盘 打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹: build dist 其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok 最后,再介绍一款刚出来的反编译工具 Androidfby ,它是一款对上述步骤进行了封装的图形界面工具,下载地址 但是,针对部分签名的apk,无法实现反编译,但本博客方法则仍然可以反编译成功!仅供参考使用 另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客将讲述如何通过混淆代码防止被别人反编译 Android如何防止apk程序被反编译 作为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? 1. -optimizationpasses 5 2. -dontusemixedcaseclassnames 3. -dontskipnonpubliclibraryclasses 4. -dontpreverify 5. -verbose 6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 7. 8. -keep public class * extends android.app.Activity 9. -keep public class * extends android.app.Application 10. -keep public class * extends android.app.Service 11. -keep public class * extends android.content.BroadcastReceiver 12. -keep public class * extends android.content.ContentProvider 13. -keep public class * extends android.app.backup.BackupAgentHelper 14. -keep public class * extends android.preference.Preference 15. -keep public class com.android.vending.licensing.ILicensingService 16. 17. -keepclasseswithmembernames class * { 18. native <methods>; 19. } 20. 21. -keepclasseswithmembernames class * { 22. public <init>(android.content.Context, android.util.AttributeSet); 23. } 24. 25. -keepclasseswithmembernames class * { 26. public <init>(android.content.Context, android.util.AttributeSet, int); 27. } 28. 29. -keepclassmembers enum * { 30. public static **[] values(); 31. public static ** valueOf(java.lang.String); 32. } 33. 34. -keep class * implements android.os.Parcelable { 35. public static final android.os.Parcelable$Creator *; 36. } 从脚本中可以看到,混淆中保留了继承自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文件应该如下: [html] view plaincopyprint? 1. # This file is automatically generated by Android Tools. 2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3. # 4. # This file must be checked in Version Control Systems. 5. # 6. # To customize properties used by the Ant build system use, 7. # "build.properties", and override values to adapt the script to your 8. # project structure. 9. 10. # Project target. 11. target=android-9 12. proguard.config=proguard.cfg 大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类&#20284;于下面的效果,是很难看懂的: 如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可 更多 上一篇:学习密度与专注力 下一篇:成为高手的解决方案《暗时间》-----------天才的做法 查看评论 * 以上用户言论只代表其个人观点,不代表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 个人资料 wed110 访问:53891次 积分:771分 排名:第18537名 原创:28篇 转载:9篇 译文:1篇 评论:3条 文章搜索 文章分类 WEB 开发之 数据库操作(1) 文章存档 2014年01月(3)2013年08月(3)2013年07月(2)2013年06月(1)2013年05月(2)2012年11月(1)2012年09月(18)2012年08月(8) 阅读排行 最经典最动听的1000首欧美金曲(17187) 长青哲学的七个重点(6104) [BetterExplained]如何有效地记忆与学习---刘未朋(3468) 学习密度与专注力 By 刘未鹏(2800) 人类思维的基本形式(2687) 如何实现APK的反编译得到APK的源码?(2273) 学习与记忆 By 刘未鹏(pongba)(1972) 鱼是最后一个看到水的 By 刘未鹏(pongba)(1806) 如何克服自己心理上的懒惰? 让自己的心智成熟起来(1408) 20世纪合成的灵异旧照(组图)(1392) 评论排行 如何实现APK的反编译得到APK的源码?(2) 人类思维的基本形式(1) 【松鼠科学会】头脑练功房:冥想真的有效吗?(0) 打开文件的Intent及使用(0) 工作与生活的未来---<学习的秘密>(0) JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法(0) Java编程中写出好代码的建议(0) 《学习之道》学习笔记(0) 让Andriod虚拟机执行效率提高10倍的方法!(0) 利用无线网卡在XP系统上设置手机可用的无线AP热点的方法(0) 推荐文章 最新评论 如何实现APK的反编译得到APK的源码? cyfxiaochen: 赞一下 如何实现APK的反编译得到APK的源码? vinceyang1994: 学习啦! 人类思维的基本形式 lanweiqiang: “形象思维只能实现对各种具体、特殊事物此时此地情况的认识和把握……,不能脱离具体特殊的事物,不能超出...