APK中java代码反编译

Android APK中的Java代码可以被反编译到什么程度主要看APK的加密程度。

第一种情况:无混淆无加密无加壳。
直接利用Dex2jar和JD-GUI可把源码从APK里抠出来,代码逻辑清晰,基本上做到可复用,只是资源文件的引用需要计算一下。

第二种情况:混淆。
通常是利用Proguard做的防护。因为是对jar做的不可逆混淆(除非有mapping),因此不能还原成原来的代码。但是代码结构,代码逻辑一致,只要花长时间对代码进行梳理一样可找准核心代码,解密方法跟第一种一致。

第三种情况:加密。
这里以DexGuard为例。对于这种代码加密的方法,在程序运行中必定会进行解密,只要抽出它解密的逻辑便可。PS:我自己做过DexGuard的解密,如果用Dex2jar反编译看的话逻辑是不对的,一定要从Smali代码看。后来发现网上已经有人做了。
解密的脚本:A look inside Dexguard

第四种情况:加壳。
这种情况跟第三种类似。无论你怎么加壳,运行的时候必定是Dalvik可识别的Odex代码,建议直接在内存里dump出来。这里推荐Xpose的ZjDroid。
脱壳教程:ZjDroid工具介绍及脱壳详细示例

作者:Vince
链接:http://www.zhihu.com/question/30723538/answer/49382019

来自为知笔记(Wiz)

时间: 2024-10-03 04:53:28

APK中java代码反编译的相关文章

JAVA代码反编译笔记

最近有个朋友说有个java弄的软件是从朋友处拿来的,由于进行了网卡地址绑定,不修改网卡地址无法使用,叫我看看有无办法破解,之前都很少玩这些东西,本着帮忙的心态,尝试了下,便有了一下的笔记内容. 1.使用jd-gui进行反编译,找到核心校验代码,将该b.class文件单独从jar包中抽离出来,由于该jar包编译打包时采用加密混淆,是无法直接使用的,而且代码非常难读懂,也只能将就着看了: 2.将包含b.class的jar包通过winrar解压工具直接打开,根据包名路径找到b.class然后直接删掉里

Java代码的编译与反编译那些事儿

编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Language)和高级语言(High-level Language). 机器语言(Machine Language)和汇编语言(Assembly Language)属于低级语言,直接用计算机指令编写程序. 而C.C++.Java.Python等属于高级语言,用语句(Statement)编写程序,语句是计算

.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译

apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包apk有几种方式可取 一.最简单的方法(类似我们的winfrom) 只要我们调试或者运行过项目,在项目下的bin debug下就有同名apk文件了(Eclipse)下是这样的.在Android下变成了\app\build\apk下了 当然我们不能把这个apk放在商店.没有签名会被人家的apk替换 二.签名发布 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过

C#代码反编译 得到项目可运行源码

C#代码反编译 得到项目可运行源码 摘自:http://www.cnblogs.com/know/archive/2011/03/15/1985026.html 谈到"C#代码反编译",大家可能都会想到 Reflector代码反编译工具,对其应该也不会太陌生:做C#开发,它算得上是一个不可或缺的实用工具.通过它我们可以很方便的查看一个程序集的源代码(这是其最基本的使用,也是大家常用的),还可以方便破解软件...,而我这篇文章要跟大家分享的是:用Reflector将C#的开发的软件[项目

生成具备语法高亮、缩进、可折叠和主动提示的代码反编译控件Spices .Net Decompiler

Spices .Net Decompiler控件是一款功能强大的代码恢复和反编译工具,支持转换.NET二进制格式((.EXE或.DLL)为格式化的.最佳的源代码,支持MSIL, C#, VB.NET, Delphi.NET, J# 和可管理的C++.具体功能: 转换后的代码具备良好的格式:生成的代码具备语法高亮.缩进.可折叠和主动提示 支持可视的进行反编译 正确的反编译所有类型的程序集:managed (C#, VB.NET, Delphi.NET), CompactFramework and

Android对apk源代码的改动--反编译+源代码改动+又一次打包+签名【附HelloWorld的改动实例】

最近遇到了须要改动apk源代码的问题,于是上网查了下相关资料.编写了HelloWorld进行改动看看可行性,经过实验证明此方案可行,而且后来也成功用这种方法对目标apk进行了改动,仅仅只是须要改动的部分比HelloWorld复杂些,可是仅仅要了解下smali也能进行相关的改动,以下讲下详细的步骤,文中所用到的资源会在文章的结尾给出,感兴趣的能够下载试试. 首先介绍下要用到的工具: jdk:这个不用多说了 baksmali:把classes.dex转为为smali文件的工具 dex2jar:cla

(转)unity3D 如何提取游戏资源 (反编译)+代码反编译

原帖:http://bbs.9ria.com/thread-401140-1-1.html 首先感谢 雨松MOMO 的一篇帖子 教我们怎么提取 .ipa 中的游戏资源.教我们初步的破解unity3d资源的基本方法附上原帖的链接:http://www.xuanyusong.com/archives/2584 下面我会从头介绍一下提取的全过程: 步骤一:首先从 https://github.com/ata4/disunity/releases 下载 DisUnity v0.3.1也可以直接用工具下载

Android APK文件的逆向反编译

APK是Android Package的缩写,即Android安装包(APK).APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android模拟器或Android手机中执行即可安装.APK文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk. APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的简称,即Android Dalvik执行程序,

Android APK XML解析与反编译方法

APK中的XML为何不能直接打开,是否只是简单的二进制文件,难道被加密了?为什么AXMLPrinter2反编译的时候竟然报错了,如何解决? java.lang.ArrayIndexOutOfBoundsException: 128 at android.content.res.StringBlock.getShort(StringBlock.java:231) at android.content.res.StringBlock.getString(StringBlock.java:91) at