首页 > 编程知识 正文

pyinstaller 反编译(python 打包 apk)

时间:2023-05-05 14:08:06 阅读:76615 作者:1534

安卓反编译技术总结

UncleChen's Blog,作者: UncleChen

一、Apk反编译工具及其使用方法

1 .原理

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

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

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

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

安卓管理. XML :要应用的全局配置文件

资产文件夹:原始资源文件夹。 与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工具打开包装,获取安卓管理和res等资源文件

功能:分解Apk文件,反向编译其中的资源文件,然后将它们反向编译为AndroidManifest.xml和res文件。 如上所述,通过将Apk文件直接解压缩为zip而获得的xml资源文件无法在文本编辑器中直接打开和读取,因为它在打包时经过构建工具处理。

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

Java-jarapktool.jardyourapkfile.apk

//注意` apktool.jar `是刚才下载的jar的名称,` d `参数表示解码

//也可以在此命令后添加类似`-o -s '的参数。 例如

//Java-jarapktool.jardyourapkfile.apk-odestiantiondir-s

//几种主要参数设置方法及其含义:

-f如果目标文件夹已存在,请强制删除现有文件夹

-o指定反编译的目标文件夹的名称。 默认情况下,文件输出到由Apk文件名指定的文件夹

保存classes.dex文件。 默认情况下,dex文件被解码为smali文件。)

- r保留资源. arsc文件。 缺省情况下,resources.arsc被解码为特定资源文件。)

看看分解Java-jarapktool.jardyourapkfile.apk的结果。

获得了可以在文本编辑器中打开的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/apk tool

note2:如果编译过程中指示终端中发生了brut.android.Undefine

dResObject错误,说明你的apktool.jar版本太低了,需要去下载新版工具了。

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

(2) dex2jar反编译dex文件,得到java源代码

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

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

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

d2j-dex2jar 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个工具。

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

二、自动化工具汇总(一键反编译Apk)

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

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

2.Python实现的工具:AndroidGuard

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

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

unclechendeiMac:androguard-2.0 unclechen$ python androaxml.py -h

Usage: 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文件。

功能:这是网上一位名为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 举报,一经查实,本站将立刻删除。