Enjarify 是一个将Dalvik字节码转化为等价的Java字节码,然后可以用一系列的Java分析工具去分析Android应用。之前我们一直使用Dex2jar来完成这个工作,不过Dex2jar已经算是一个非常老的工具咯。Dex2jar在绝大部分情况下都挺不错的,但是如果碰到了些模糊的特性或者特殊案例就会出错或者默默地吐出一些错误的结果。相比之下,Enjarify在设计的时候就考虑到了尽可能多的情况,特别是对于那些Dex2jar不起作用的情况下。另外,Enjarify能够有效地处理Unicode编码的类名、常量,隐式新濠天地转换、正常处理流程中的移除处理啊等等。
Usage and installation
Enjarify是一个普通的Python 3的应用程序,你可以直接Git Clone然后运行。下载好了之后直接进到对应的目录下:
Linux环境下
python3 -O -m enjarify.main yourapp.apk
有时候为了方便新濠天地,可以将该脚本做一层封装,尽可能的使用Pypy,这货会比CPython速度快一点。另外,如果你希望能够像新濠天地命令一样直接新濠天地Enjarify,你可以将它作为链接放到你的环境新濠天地中,譬如:
ln -s "$PWD/enjarify.sh" ~/bin/enjarify
Windows环境下
我们提供了一个可执行的脚本enjarify.bat,同样地把这个脚本放到环境新濠天地中就可以了。
Usage
安装好以后,可以直接用以下命令新濠天地:
enjarify yourapp.apk
最简单的用法就是可以将一个apk新濠天地或者一个dex新濠天地作为命令行的输入,如果你使用的是一个多dex的apk,那么Enjarify会自动将这些dex打包到一个单一的jar新濠天地中。而如果你选定了一个dex新濠天地,那么只有这个dex新濠天地会被解析。
enjarify classes新濠天地网 dex
默认的输出是会在当前目录下创建一个[inputname]-enjarify.jar新濠天地。可以通过-o参数来指定输出新濠天地的名称:
enjarify yourapp.apk -o yourapp.jar
默认情况下,Enjarify不会覆盖已经存在的新濠天地,不过可以使用-f或者--force参数来强制指定覆盖。
Limitations
Enjarify 目前还不能狗完整解析一些可选的信息,譬如源新濠天地的属性、行数以及注解。Enjarify已经尽可能地去解析所有的类,不过因为Android或者Java的限制,有些隐藏类并不能很好地解析,不过往往只有在有很多人为混淆的情况下才会出现。
Performance tips
PyPy可是比CPython快很多,可以在这里http://pypy.org/.下载,注意要使用PyPy3,而不是普通的PyPy。Linux下默认会使用pypy3,Windows下面则需要你自己去编辑了。另外,Enjarify默认会使用一些新濠天地算法使得整个反编译之后的app的可读性增加,比如移除未使用的新濠天地等。如果你不需要这些,可以使用--fast参数来加快速度。