翻译:shan66
预估稿费:100RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
前言
在本文中,我们将介绍如何对运行在已经取得root权限的Android设备或模拟器上的进程进行调试。调试进程是一个非常重要的任务,因为通过这种方式,我们就能在应用程序中查找内存损坏等安全漏洞。
准备工作
1.设置一个Android模拟器
2. 安装NDK – 可以从下面的链接进行下载
http://developer.android.com/tools/sdk/ndk/index.html
然后,我们要做些什么呢?
其实我们要做的事情并不复杂:
1. 在模拟器上设置GDB服务器
2. 从客户端连接到GDB服务器
3. 开始调试
好了,让我们开始吧。
使用GDB在Android模拟器上调试APP
第一步是将gdb服务器推送到模拟器上。我们希望能够从设备中的任何位置访问它,为此,一种方法是将其放在/ system / bin目录下。
我们首先使用“adb”获取设备上的shell,并运行“mount”命令,具体如下所示。
从上图可以看出,在这里/ system是以“ro”权限进行安装的。因为我们需要在这里写一些文件,所以我们需要用“rw”重新安装它,具体命令如下所示。
现在我们来看看“mount”命令。
不知您是否注意到了,现在/system分区是以"rw"权限挂载的。
下面,我们将gdbserver推送到模拟器。
导航到NDK目录并寻找ARM二进制代码所在位置。在我的机器中,它位于“prebuilt / android-arm”目录下面,如下所示。
使用“adb push”命令将gdbserver推送到模拟器上。
为了验证是否上传成功,请使用“adb”在设备上获取shell,并键入以下命令。
“gdbserver –help”
从上图可以看出,gdb服务器一切正常。
我们还可以检查gdbserver的版本,具体命令如下图所示。
我们可以看到,目标进程的进程ID是1234。
下图显示了如何使用gdbserver附加到这个进程。
注意:我们也可以使用以下命令直接挂接到该程序中。
gdbserver:8888 [filename] [arguments]
现在,gdbserver正在运行。一旦运行完成,我们需要使用“adb forward”转发端口8888,具体如下所示。
完成上述所有步骤后,我们就可以启动预编译的gdb客户端了。
我们可以使用下图中的命令来启动预编译的gdb客户端,如下所示。
从上图可以看出,我们会得到一个gdb控制台。现在,我们需要连接到运行在模拟器上的gdbserver实例上,具体方法如下所示。
好极了! 我们现在终于可以与目标进程进行交互了。让我们列出寄存器清单。
至于你可以用本文介绍的配置来做什么,那就要看你的想象力了。在后面的文章中,我将为读者演示如何使用相同的配置,通过GDB在NDK应用程序中探测内存损坏漏洞。
传送门
安卓 Hacking Part 2:Content Provider攻防(连载)
安卓 Hacking Part 3:Broadcast Receivers攻防(连载)
安卓 Hacking Part 4:非预期的信息泄露(边信道信息泄露)
安卓 Hacking Part 5:使用JDB调试Java应用
安卓 Hacking Part 9:不安全的本地存储:Shared Preferences
安卓 Hacking Part 11:使用Introspy进行黑盒测试
安卓 Hacking Part 12:使用第三方库加固Shared Preferences
安卓 Hacking Part 13:使用Drozer进行安全测试
安卓 Hacking Part 14:在没有root的设备上检测并导出app特定的数据
安卓 Hacking Part 15:使用备份技术黑掉安卓应用
安卓 Hacking Part 17:破解Android应用
安卓 Hacking Part 19:NoSQL数据库不安全的数据存储