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啦
配置环境变量
- 在程序根目录下执行:
python3 -O -m enjarify.main ${PATH}\yourapp.apk
-
Linux & Mac 用户:
ln -s "$PWD/enjarify.sh" ~/bin/enjarify
-
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