Enjarify - Android逆向(二)

Enjarify - Android逆向(二)

首先奉上enjarify的Github地址,小伙伴们可以clone到本地使用哦

Enjarify介绍

上一节我们说了,在开发Android应用时,Android工具经过ADT的复杂编译后转换成dex文件,这是一个逐步优化的过程,dex是Android系统中可以在Dalvik虚拟机上直接运行的文件格式。java源代码dex文件的指令码就是Dalvik虚拟机专有的一套指令集,专门为嵌入式系统优化过,相比标准java的.class文件,它体积小,运行效率高。而我们可以通过一系列操作将这个Dalvik字节码反编译回JVM虚拟机可执行的字节码文件。这里enjarify就是这样的一个Python工具,只要将apk文件拖到它的执行脚本上即可以实现自动化的反编译。

安装和使用

配置运行环境

enjarify基于Python 3环境,所以你可能需要安装Python 3(点击这里下载)

下载enjarify

安装完Python并且clone上面给出的GitHub仓库后我们就可以使用enjarify啦

配置环境变量

  1. 在程序根目录下执行:

python3 -O -m enjarify.main ${PATH}\yourapp.apk

  1. Linux & Mac 用户:

    ln -s "$PWD/enjarify.sh" ~/bin/enjarify

  2. Windows用户:

    右键点击此电脑 -> 点击属性 -> 找到左侧的高级系统设置 -> 在弹出的系统属性面板找到高级选项卡 -> 点击下方的环境变量 -> 在弹出的环境变量面板里找到下方系统变量中的Path变量 -> 双击后添加enjarify所在的目录后保存

使用enjarify

这里预先假设你的APP安装包名为yourapp.apk并且APK在终端所在目录下

enjarify yourapp.apk

或者你想反编译的是dex文件,可以这样使用

enjarify classes2.dex

默认的输出文件在当前目录下并且名为[inputname]-enjarify.jar. 如果想修改输出文件名可以使用 -o或者 --output 选项。例如:

enjarify yourapp.apk -o yourapp.jar

通常情况下,enjarify不会重写已经存在的输出文件,如果需要覆盖输出文件的话就得使用 -f或者 --force 选项。

Enjarify的限制

只支持version 35的dex文件格式,所以在 Android N, O, 和 P中引入的与Java 8有关的特性的文件都无法进行反编译(这个一般不会出问题的,遇到的也都是大佬)。

Enjarify目前无法转换metadata,例如源文件属性,行号和注释。

性能小贴士

Enjarify是基于Python 3的嘛,这里使用PyPy要比CPython快好多,Linux的脚本里面包装了PyPy,Windows的话要自己搞一下了。

可以通过 --fast选项来提高反编译速度,这样会降低一些可读性,这里你自己做决定吧,大部分包应该用不到这个功能。

首发于个人博客Bismuth

你可能感兴趣的:(Enjarify - Android逆向(二))