【系列分享】安卓Hacking Part 20:使用GDB在Android模拟器上调试应用程序

翻译: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”命令,具体如下所示。

http://p3.qhimg.com/t01e5fec7ccda9f99d8.png

从上图可以看出,在这里/ system是以“ro”权限进行安装的。因为我们需要在这里写一些文件,所以我们需要用“rw”重新安装它,具体命令如下所示。

http://p1.qhimg.com/t012a9e12928ed65a7c.png

现在我们来看看“mount”命令。

http://p7.qhimg.com/t01c4baf806601f57c4.png

不知您是否注意到了,现在/system分区是以"rw"权限挂载的。

下面,我们将gdbserver推送到模拟器。

导航到NDK目录并寻找ARM二进制代码所在位置。在我的机器中,它位于“prebuilt / android-arm”目录下面,如下所示。

http://p1.qhimg.com/t01829e0c487ef8ce12.png

使用“adb push”命令将gdbserver推送到模拟器上。

http://p7.qhimg.com/t016e8170116efdbbda.png

为了验证是否上传成功,请使用“adb”在设备上获取shell,并键入以下命令。

“gdbserver –help”

http://p7.qhimg.com/t01fe21044d8e75405a.png

从上图可以看出,gdb服务器一切正常。

我们还可以检查gdbserver的版本,具体命令如下图所示。

http://p9.qhimg.com/t017882e60eb0573a6d.png

我们可以看到,目标进程的进程ID是1234。

下图显示了如何使用gdbserver附加到这个进程。

http://p5.qhimg.com/t0153a85753918ded71.png

注意:我们也可以使用以下命令直接挂接到该程序中。

gdbserver:8888 [filename] [arguments]

现在,gdbserver正在运行。一旦运行完成,我们需要使用“adb forward”转发端口8888,具体如下所示。

http://p3.qhimg.com/t011dc71735d3d66be8.png

完成上述所有步骤后,我们就可以启动预编译的gdb客户端了。

我们可以使用下图中的命令来启动预编译的gdb客户端,如下所示。

http://p9.qhimg.com/t01e0376a947315deb0.png

从上图可以看出,我们会得到一个gdb控制台。现在,我们需要连接到运行在模拟器上的gdbserver实例上,具体方法如下所示。

https://p1.ssl.qhimg.com/t01033ba22ce35e4a55.png

好极了! 我们现在终于可以与目标进程进行交互了。让我们列出寄存器清单。

https://p0.ssl.qhimg.com/t016103d33a9f9f6f8c.png

至于你可以用本文介绍的配置来做什么,那就要看你的想象力了。在后面的文章中,我将为读者演示如何使用相同的配置,通过GDB在NDK应用程序中探测内存损坏漏洞。


传送门

安卓 Hacking Part 1:应用组件攻防(连载)

安卓 Hacking Part 2:Content Provider攻防(连载)

安卓 Hacking Part 3:Broadcast Receivers攻防(连载)

安卓 Hacking Part 4:非预期的信息泄露(边信道信息泄露)

安卓 Hacking Part 5:使用JDB调试Java应用

安卓 Hacking Part 6:调试Android应用

安卓 Hacking Part 7:攻击WebView

安卓 Hacking Part 8:Root的检测和绕过

安卓 Hacking Part 9:不安全的本地存储:Shared Preferences

安卓 Hacking Part 10:不安全的本地存储

安卓 Hacking Part 11:使用Introspy进行黑盒测试

安卓 Hacking Part 12:使用第三方库加固Shared Preferences

安卓 Hacking Part 13:使用Drozer进行安全测试

安卓 Hacking Part 14:在没有root的设备上检测并导出app特定的数据

安卓 Hacking Part 15:使用备份技术黑掉安卓应用

安卓 Hacking Part 16:脆弱的加密

安卓 Hacking Part 17:破解Android应用

安卓 Hacking Part 18:逆向工程入门篇

安卓 Hacking Part 19:NoSQL数据库不安全的数据存储

(完)