5.10反编译、重编译
在Android早期做apk应用的时候,很多人对于反编译还没有概念,或者说还没有防范意识。随着反编译的流行,为了保证自己的产品不会变成满天飞的山寨应用,更多的企业选择了混淆编译以及将核心逻辑编译成so等方法,以防止别人的反编译。由于对移动安全方面了解甚少,所以本书只有这一节涉及到安全方面的皮毛也许,笔者有兴趣的朋友可以翻阅相关资料学习。.
第一个需要用到的工具是Apktools,下载地址:
htps:/:/e.oge.com/p/android-apotoo/downloads/ist。解压之后会得到
apktools.jar文件,打开终端指向apkools根目录,输入以下命令即可完成反编译: .
java -jar apktool.jar d xxx.apk
成功反编译的话可以看到如下日志并生成-一个和apk名字一样的文件夹。
I: Baksmaling... I: Loading resource table... I: Loaded. I: Decoding Androi dManifest.xml with resources. . . I: Loading resource table from file: /Users/app1e/Library/apktoo1/fr amework/1.apk I: Loaded. I: Regular manifest package... . I: Decoding file- resources. .. I: Decoding values */* XMLs... I: Done. I: Copying assets and libs. ..
这样就可以根据我们的需求对mainfest.xml等文件做相应的修改了(比如增加权限等)。
接下来我们就需要进行重编译,同样要使用Apktools工具。在终端中输入:
java -jar apktools.jar b <反编译出来的文件夹>
重编译成功的话会在文件夹中看到build和dlist文件夹,重新编译成功的apk就保存在dlist文件夹中。但是这个apk目前还不能正常安装,原因是该apk还是未签名状态(unsign)。接下来我们就说说Android应用的签名。
在Eclipse的设置中点击Android标签中的Build选项,可以看到Eclipse中Android工程默认的签名都是Android ADT自带的debug签名,如图所示。
同样地,右键-一个项 目,选择Android Tools中的Expert Signed Application Package,
能够成功创建所选签名证书的应用apk。 而需要让-一个没有签名的应用程序签上名的
话,需要第3个工具: re-sign.jar。 re-signjar 的下载地址: .
http:/ /czxttk1.com/ res/re-sign.jar
使用该工具能将之前重编译的应用变成带有签名证书的应用。
在整个反编译过程中最重要的目的除了修改以外还有一一个,那就是查看源代码。这里就需要第4个工具dex2jar,下载地址:
https://code . google. com/p/dex2jar/downloads/list
解压之后,运行一下命令给予相应的权限:
chmod +x dex2jar .sh
接着使用该文件进行反编译:
./dex2jar.sh xxx.apk
成功之后会出现_dex2jar.jar文件,然后我们需要下载第5个工具JD-GUI,下载地址:htp:/:/va.decompier.frr.f.r/.使用该工具打开<apk name>. dex2jarjar 文件,就能够直接看到应用程序的代码,如下图所示。
本节简单介绍了反编译、重编译、签名等需要使用的工具。由于相关的其他测试我用得也不多,所以更多的知识还需要读者多谷歌学习了。