目的:使用编译好的工程模式虚拟机调试防杀程序,一劳永逸地减少apk shell中更改Debug=true等选项。 节省大量调试时间。
1.下载android4.4.2源码和goldfish源码(linux内核源码)
由于Google被墙挡住了,所以android系统源码和金鱼源码给出了如下地址:
android4.4.2系统源码:
(需要解压,云盘上的打包文件是分的,需要用命令行解压,很简单,网上搜索taz解压多个文件,就可以了。)
金鱼源代码:
首先需要安装ubuntu系统:我用的是ubuntu16.04LTS(64位),根目录至少100G,用于保存android系统源码和金鱼源码
1、金鱼源码编译:
goldfish的编译可以参考:这篇文章,但是下载本文源码的部分可以跳过。 直接看源码部分如何配置。 编译成功后会得到zImage文件,然后运行虚拟机的时候会用到。 (由于linux内核使用debug模式,所以在调试应用程序时不需要改变apk的debug模式)
2、android系统源码编译:
1、android系统的编译自然需要jdk和gcc。 我的java版本使用版本1.6.0_45x64
2.gcc版本为5.4.0
之后就可以编译了。
如果是新系统jdk 编译源码安装,编译过程中会遇到各种错误,因为没有安装各种必要的工具如:curgitg++等工具
本文介绍了一些错误处理方法,各位狼友可以提前安装一下,以节省时间。
其实还有一些错误,没有列出完整。 编译时如果遇到,可以网上搜索错误提示,就能找到解决办法。 这个关卡也很容易通过。
编译android系统源码的方法是:解压系统源码后,右键单击该目录,“在终端中打开...”,在终端中输入命令sourcebuild/envsetup.sh,如右图所示
输入命令lunch后,会出现几个选项。 我一般选择输入1(模式aosp_arm-eng表示编译一个完整的emulator模拟器并启用所有Debug模式,-eng为工程机模式),比如
然后在命令行输入make -j4进行编译,如右图:
如果是第一次编译,大约需要2个小时(耐心等待)。 完成后,xxx/out/target/product/generic目录下会有一个cache.imgramdisk.imgsystem.imguserdata.img文件。 这个文件是android系统创建的一个图像文件。
如果后面改了源码,需要重新编译,还有一个更快的编译方法 makenod 这个命令只生成system.img
现在我们有了zImage的镜像和android系统的源代码,我们可以用它来启动虚拟机,并在终端命令行中输入
xxx/adt-bundle-linux-x86_64-20140702/sdk/tools/emulator-systemxxx/out/target/product/generic/system.img-data/xxx/out/target/product/generic/userdata.img-ramdiskxxx/输出/目标/产品/通用/ramdisk.img-cachexxx/输出/目标/产品/通用/cache.img-kernelxxx/goldfish/arch/arm/boot/zImage-avdDevice_Test
输入里面的命令启动虚拟机。 第一次运行时,找不到虚拟机Device_Test。 需要使用eclipse创建一个名为:Device_Test的虚拟机,如右图:
点击确定后,关闭用eclipse创建的虚拟机,然后使用虚拟机名称Device_Test。 (同样,你会在xxx/adt-bundle-linux-x86_64-20140702/sdk/system-images/android-20/android-wear/armeabi-v7a目录下找到system.img,以及一个kernel-qemu文件,其中对应我们编译的zImage文件,所以我们可以使用我们编译的文件来启动虚拟机)。
最后,每次都要输入这么多命令jdk 编译源码安装,非常麻烦。 我的做法是每次启动后将此命令保存在一个×.sh中(如:st_ad_vm.sh,Windows下保存为bat文件),只需要输入命令 Enter ./st_ad_vm.sh 即可启动虚拟机,非常方便。 如果需要使用IDA调试APK,可以将编译好的system.imgcache.imgzImage等文件复制到windows环境下,在windows下启动虚拟机也有效。 并在windows下编写一个*.bat批处理文件。 也可以启动虚拟机。 用IDA进行动态调试,会事半功倍。
一个人在逃避命运的路上遇见了自己的命运。
常常在逃避命运的路上,却又不期而遇。
看学安全·看学公测
16年持续关注安全,专业为您服务!