在配置好基础的系统环境之后,为了进行后面的逆向开发和分析工作,还需要安装一些基础的开发工具。
首先,作为安卓逆向开发和分析人员,必不可少的一款开发工具就是Android Studio。在Eclipse退出安卓开发历史舞台后,作为Google官方的安卓App开发IDE,笔者首先要推荐的就是Android Studio。从官网把Android Studio下载到Linux环境中,解压之后,切换到android-studio/bin目录下,再运行当前目录下的studio.sh即可启动Android Studio。
首次启动Android Studio会提示用户下载一些插件(即工具),比如Android SDK等工具,这些工具是后续开发所必需的,因此一直单击Next按钮采用默认设置即可。在这个过程中,可以关注一下SDK的保存目录,默认SDK目录在/root/Android/Sdk/下,这个目录下会存储一些在后续逆向过程中需要用到的工具,比如adb(用于与移动设备进行通信的工具)。请将adb工具所在目录/root/Android/Sdk/ platform-tools/加入环境变量,以便在任意目录下都能直接执行adb命令,具体方法如下:
在将adb命令加入环境变量之后,为了使设置生效需要重新打开terminal,再次执行adb命令,结果如下:
root@VXIDr0ysue:~/Chap01# adb shell * daemon not running; starting now at tcp:5037 * daemon started successfully adb: no devices/emulators found
在插件下载完毕后,Android Studio的主界面如图1-3所示。
在第一次创建Project时,Android Studio需要进行一段费时很长的同步环节,这时耐心等待即可。
图1-3 Android Studio主界面
笔者推荐使用一款Python版本管理软件pyenv,在Android Studio配置好后,读者可以通过pyenv安装和管理不同的Python版本,每一个由pyenv包管理软件安装的Python都是相互隔离的。换句话说,不管在当前这个Python版本中安装了多少依赖包,对于另一个Python版本都是不可见的。如果读者觉得Python环境不纯或者需要新的环境,随时可以安装一个新的、纯净的Python,也算是另类的一种虚拟机环境吧。
需要注意的是,在安装pyenv之前一定要对虚拟机执行一次快照操作,防止在安装pyenv的最后一步进行依赖包同步时出现整个系统无法进入桌面环境的情况。笔者安装pyenv的具体安装过程如下:
如果安装后重启能够正常进入桌面环境,接下来就可以使用pyenv install命令安装不同版本的Python。在安装完毕后还需要运行pyenv local命令切换到对应的Python版本。例如,安装Python 3.8.0:
root@VXIDr0ysue:~/Chap01# pyenv install 3.8.0 root@VXIDr0ysue:~/Chap01# pyenv local 3.8.0 root@VXIDr0ysue:~/Chap01# python -V Python 3.8.0
由于pyenv的最后一步依赖包的问题一直很棘手,甚至可能会导致系统桌面环境崩溃,因此这里推荐一款替代pyenv的工具——miniconda。miniconda的作用和pyenv的作用是相同的,与pyenv相比,miniconda的安装不需要考虑依赖包的问题,属于傻瓜式的安装。miniconda的安装方式很简单,具体过程如下:
在运行最后一条命令后会先要求用户阅读License,阅读完毕后输入yes即可安装,在安装过程中会要求用户指定安装目录,这里采用默认值即可。之后再次输入yes,shell会提示需要手动执行一次conda init命令才能真正将miniconda安装成功。
安装完miniconda后,重启一次terminal,执行conda create -n py380 python=3.8.0命令安装指定版本的Python。其中,py380为安装时conda激活Python 3.8.0之后的代称,python=3.8.0指定安装Python版本为3.8.0。若想使用特定的Python版本,则可以使用conda activate py380来激活对应的版本,在不需要使用该特定版本时,则可执行conda deactivate命令来退出,例如:
笔者再推荐一些日常工作中使用的小工具,这些工具也许不会对工作有直接的帮助,但是一旦我们掌握了这些工具的使用,就会为日后的工作带来诸多方便。
首先推荐htop工具,它是加强版的top工具。htop可以动态查看当前活跃的、系统占用率高的进程,效果如图1-4所示,这一功能在我们编译安卓Android源码时非常好用,在我们执行make命令之后,可以观察到内存Mem耗尽之后开始侵占Swp(交换虚存)的进度条。Uptime是开机时间;Load average是平均负载,比如四核CPU,平均负载跑到4的时候就说明系统满载了。这个工具的详细操作指南可以在网上搜索到。
图1-4 htop界面
其次,推荐一款实时查看系统网络负载的工具jnettop。通过该工具,我们在安装和使用软件(比如Frida)的过程中可以实时查看它下载和安装的进度,甚至在AOSP编译时仍然能观察到它连接到国外的服务器下载依赖包等的行为。除此之外,在抓包时打开这个工具往往会有奇效,比如实时查看对方IP等。在jnettop界面中可以看到主机连接的远程IP、端口、速率以及协议等,如图1-5所示。
图1-5 jnettop界面