首页 > 编程知识 正文

最好用的反编译软件,c反编译工具

时间:2023-05-05 04:41:43 阅读:115430 作者:2572

3358 www.Sina.com/http://uncle Chen.github.io/2016/09/07/Android反编译技术总结/一、Apk反编译工具及其使用方法1 .原理

在学习反编译之前,建议您学习Apk打包的过程,以了解打包完成后的Apk中包含哪些文件,以及各种文件是如何生成的。

这里有两篇安卓维基推荐的好文章:

安卓打包流程

安卓构建流程分析

Apk技术也有非常多的技术,主要是围绕如何减小体积、如何提高包装速度展开的,这里很少提到。 以下是基本的Apk文件结构图。

Apk文件本质上是zip包。 用解压缩工具解压缩后,你会发现其中包含了什么。 简要说明Apk文件的工作原理。

AndroidManifest.xml :应用的全局配置文件assets文件夹:原始资源文件夹和与Android项目对应的assets文件夹通常用于存储原始网页、语音等。 与res文件夹的区别不在此说明,请参考上面介绍的两篇文章。 classes.dex :源代码编译为class,然后转换为jar并压缩为dex文件。 dex是可以直接在Android虚拟机上运行的文件。 lib文件夹:引用的第三方sdk的so文件。 META-INF文件夹: Apk签名文件。 res文件夹:包含布局、图像等的资源文件。 resources.arsc :记录资源文件与资源id的映射关系。 上面的屏幕快照中的每个文件都应该包含在最基本的Apk文件中。 但是,无法直接读取将Apk解压缩为zip的这些文件。 最终,他们都是用build-tools打包工具处理的。 尝试直接在文本编辑器中打开其中的Manifest文件。

反编译Apk的目的是将Apk分解为我们可以读取的文件。 我们希望通过反向编译获得AndroidManifest.xml文件、res文件和java代码。

2.Apk反编译步骤

)打开apk工具的包装,并打开资源文件(如AndroidManifest和res ) http://www.Sina.com/https://bit bucket.org/ibotpeaches/apk tool/downloads

分解3358www.Sina.com/apk文件,反编译其中的资源文件,反编译为可以读取它们的转载自UncleChen’s Blog,作者:UncleChen。 如上所述,通过将Apk文件直接解压缩为zip而获得的xml资源文件无法在文本编辑器中直接打开和读取,因为它在打包时经过构建工具处理。

用法:官网https://ibotpeaches.github.io/apk tool/documentation /上有介绍,最新版本为2.2.0,运行环境需要jre1.7。

下面是使用apk工具分解apk文件的基本方法。 只需在终端中执行以下命令。

jva-jarapktool.jardyourapkfile.apk//注意` apktool.jar '是刚才下载的jar的名称,` d `参数为decode//在此命令之后`-o 例如,//Java-jarapktool.jardyourapkfile.apk-odestiantiondir-s//某些主要参数化方法及其含义:-f如果目标文件夹已经存在,则为现有的默认情况下,文件输出到以Apk文件名命名的文件夹中。 保存classes.dex文件。 默认情况下,将dex文件解码为smali文件。 - r保留-rresources.arsc文件。 缺省情况下,将resources.arsc文件解码为特定的资源文件

获得了可以在文本编辑器中打开的AndroidManifest.xml文件、assets文件夹、res文件夹、smali文件夹等。 original文件夹是原始AndroidManifest.xml文件,res文件夹是所有反向编译的资源,smali文件夹是反向编译的代码。 请注意,smali文件夹下的结构与我们源代码中的package相同,但已更改为smali语言。 与程序集语法类似,是Android虚拟机使用的寄存器语言。

现在,可以在文本编辑器中打开AndroidManifest.xml文件和res下的layout文件。 这将显示此Apk文件的包名称、Activity组件、程序所需的权限、xml布局和图标等信息。 其实,当我们把Apk上传到APP市场时,APP市场也会用同样的方法解析我们的Apk。

note1:其实还有一个方法。 每次都可以省去

解包时,都要输入java -jar apktool.jar xxx这行命令,官网也有说明,就是将这个命令包装成shell脚本,方法见:https://ibotpeaches.github.io/Apktool/install/

note2:如果你在编译的时候,发现终端里面提示发生了brut.android.UndefinedResObject错误,说明你的apktool.jar版本太低了,需要去下载新版工具了。

note3:如果想要自己实现一个解析Apk文件,提取版本、权限信息的java服务时,可以引用apktool.jar中的ApkDecoder,调用decode方法来实现。可以看下图中,apktool.jar里面有解析Apk文件的实现。

(2) dex2jar反编译dex文件,得到java源代码
上一步中,我们得到了反编译后的资源文件,这一步我们还想看java源代码。这里要用的工具就是dex2jar。

工具下载地址:https://sourceforge.net/projects/dex2jar/

功能:将dex格式的文件,转换成jar文件。dex文件时Android虚拟机上面可以执行的文件,jar文件大家都是知道,其实就是java的class文件。在官网有详细介绍。

用法:打开下载的dex2jar-2.0文件夹,里面有shell和bat脚本,进入终端,就可以在命令行使用了。

d2j-dex2jar classes.dex 或 sh dex2jar.sh classes.dex// 获取classes.dex文件在最前面说过,只要把Apk当做zip解压出来,里面就有dex文件了// 或者用apktool反编译时带上 `-s` 参数

运行后,可以看到classes.dex已经变成了classes-dex2jar.jar。

note1:第一次下载下来后,在mac里运行的时候可能会提示需要管理员的权限,这里我给这些sh脚本chmod 777后,即可运行它。

note2:写完这一节的时候,我发现把dex转换成jar已经有了更好的工具enjarify,https://github.com/google/enjarify这个工具是谷歌官方开源的用于反编译dex文件的。使用方法和dex2jar差不多,也是简单的命令行操作。这个工具的主页中也提到dex2jar已经是一个比较老的工具,在遇到混淆等等复杂的情况时,可能无法正常工作。所以这里推荐大家使用enjarify这个工具。

(3) jd-gui查看java源代码
工具下载地址:官网http://jd.benow.ca/上选择自己所需要的版本。

功能:这个工具不用多说,写java的人都知道。有时候我们自己开发一个jar包给别人用,也会用它来查看class是不是都被正确的打入到了jar内,我以前介绍的gradle自定义打包jar的博客中也提到过它。

用法:下载后双击既可以运行这个工具,直接把上一步得到的classes-dex2jar.jar拖到jd-gui程序的界面上即可打开了,效果如下图所示。

反编译Apk步骤小结
反编译一个Apk,查看它的资源文件和java代码,我们需要用到3个工具。

apktool:https://ibotpeaches.github.io/Apktool/dex2jar:https://github.com/pxb1988/dex2jarjd-gui:http://jd.benow.ca/

反编译就是用这3个工具得到AndroidManifest.xml、res、java代码等。但是我们可以看到,如果你要对一个Apk做尽可能彻底的反编译,把它扒得干干净净,这一步一步的基本操作还是稍显麻烦。另外加固过Apk的情况可能更复杂,需要我们勤动手尝试。为了能提高效率,下面我把自己见过的一些集成工具介绍给大家,尽可能实现可以一键反编译Apk。

二、自动化工具汇总(一键反编译Apk) 1.谷歌提供的工具:android-classyshark

下载地址:https://github.com/google/android-classyshark/releases,下载下来之后是一个可执行的jar文件,win下或者mac下都只要双击即可运行。

功能:带有界面,一键反编译Apk工具,直接打开Apk文件,就可以看到Apk中所有的文件结构,甚至还集成了dex文件查看,java代码查看,方法数分析、导入混淆mapping文件等一系列工具。谷歌推出这个工具的目的是为了让我们开发者更清楚的了解自己的Apk中都有什么文件、混淆前后有什么变化,并方便我们进一步优化自己的Apk打包实现。下面带上几张截图,真是帅气的一笔的好工具啊!

即将到来的Android Studio 2.2中集成了一个叫做APK Analyzer的功能,这个功能不知道是不是和这个工具有关系呢,本人还没有尝试过2.2版本,有兴趣的朋友可以体验一下preview版本。

2.Python实现的工具:AndroidGuard

下载地址:https://github.com/androguard/androguard/releases

功能:集成了反编译资源、代码等各种文件的工具包。需要安装Python环境来运行这个工具,这个工具按照不同的反编译需求,分别写成了不同的py功能模块,还有静态分析的功能。所以如果想要用Python开发一个解析Apk文件并进行静态扫描分析的服务,可以引用这个工具来实现。

用法:具体用法比较多,这里也不再展开了。可以通过工具内置的-h帮助指令查看各个模块的功能。

unclechendeiMac:androguard-2.0 unclechen$ python androaxml.py -hUsage: androaxml.py [options]Options: -h, --help show this help message and exit -i INPUT, --input=INPUT filename input (APK or android's binary xml) -o OUTPUT, --output=OUTPUT filename output of the xml -v, --version version of the API// androaxml.py这个模块是用来解析AndroidManifest文件的,`-i` 表示输入的apk文件,`-o` 表示输出xml文件。 3.Mac专属工具:Android-Crack-Tool

https://github.com/Jermic/Android-Crack-Tool
功能:这是网上一位名为Jermic的大神开发的、在Mac环境下使用的App,集成了Android开发中常见的一些编译/反编译工具,方便用户对Apk进行逆向分析,提供Apk信息查看功能。工具的截图如下所示,非常强大。

4.手机上的反编译工具:ApkParser

功能:在电脑上已经有了这么多的工具,在手机上的也有很方便的工具。APKParser是一款在查看手机上已经安装的Apk的信息的工具,他可以查看软件的AndroidManifest.xml文件、方法数、res资源文件,并在手机上直接展示出来。个人觉得这是一个非常实用的工具,作为开发者,手机里面必须要有它。

5.工具汇总

以上几款工具都是我体验过、感觉不错的集成工具,推荐给大家。临近本文结束前,又发现了这么一个福利网站-http://www.androiddevtools.cn/,其中有一章专门总结了各种Apk反编译的工具。相信有了这么多的利器,大家应该有100种方法将一个App扒得干干净净了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。