注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

安卓Hacking Part 6:调试Android应用  

2015-07-26 14:50:47|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上一期中,我们介绍了如何用JDB调试Java应用,本期中我们将来学习如何用JDB来调试Android应用,如果某个Android应用是可以被调试的,我们就能在该应用的进程中注入并运行我们自己的代码。

背景介绍

未使本文更加有意思,我开发了一个简单的演示应用,只有一个按钮和一个输入框。

下载:

http://yunpan.cn/cf3RVN5fRRC73 (提取码:8734)

运行截图如下:

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

点击按钮,应用提示”Try Again”。现在我们的目标就是在不修改程序的情况下,把提示结果改成”Hacked”。为此,我们需要在程序运行是来改变提示的内容。

用到的工具

l模拟器

ladb  - Android调试桥

ljdb  - Java调试器

为了简单点,我会使用Android Tamer,其中包含了所以上面提到的工具

相关主题:

u检查漏洞

u相关设置

u运行时代码注入

好了,开始。

漏洞检查

这是本文最简单的部分

1、使用APKTOOL反编译AndroidManifest.xml文件,命令如下

#apktool d <vulnerableapp>.apk

2、检查AndroidManifest.xml文件是否有如下内容:

Android:debuggable=”true”

如果你在其中发现了这样的内容,就所以该应用是可以被调试的。

提示: 我们只用到了APKTOOL来检查应用是否可调试,但我们没有修改应用的代码。

设置准备:

这一步中,我们会为在进程中注入代码做一些准备。上一期中说了,我们会用远程调试的方法。

1、启动模拟器

2、安装测试应用

3、打开终端,输入以下命令,查看Dalvik虚拟机监听在模拟器的哪一个端口。

#adb jdwp

这条命令会显示所有可以连接并调试的端口,如下图:

http://p8.qhimg.com/t01f401ea79d7a56df2.png

提示:JDWP就是 Java Debug Wire Protocol(Java调试线协议),如果一个应用可被调试,该应用的虚拟机会打开一个唯一端口以便JDB连接调试。Android的Dalvik虚拟机也支持该协议。

4、现在打开我们刚安装的测试应用,再使用同样命令查看我们的应用监听的端口,如图:

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

我们比较两次命令执行的结果,发现运行测试应用后多出了赢543端口,这就是我们测试应用对应的端口,我们需要用JDB去连接该端口。

5、在连接之前,我们需要使用adb来转发端口:

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

6、现在就可以用JDB连接调试android应用了.

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

远程代码注入

我们将用在应用运行时修改其行为的方式来实现。

为此,我们需要设置断点来控制程序的执行流程。但我们并不知道该应用所使用的类和方法。使用一下命令来查看类和方法。

查看类的命令 “classes

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

由于打印出的类太多,这里只列出了少数类,但你继续向下滚动你就会发现用户自定义的类。

http://p2.qhimg.com/t015cceb54c04f44be9.png

现在我们用以下命令查看 MainActivity$1类中的方法。

methods com.example.debug.MainActivity$1

http://p8.qhimg.com/t01363c413a2767a3cd.png

在MainActivity$1.onClick方法中设置断点

“stop in com.example.debug.MainActivity$1.onClick(android.view.View)”

http://p4.qhimg.com/t01a180c62971eb3499.png

为了触发这个断点,我们需要手动点击下应用的按钮,如下图,点击后断点被触发:

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

在此我们就能用various 命令查看变量和参数的等命令一些敏感信息。

为了解相关细节,onClick方法的代码如下:

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

使用”locals”命令查看局部变量:

http://p6.qhimg.com/t01efc89659c6f9672a.png

局部变量中没有什么我们需要的信息。

使用”next”命令执行下一行代码:

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

再使用”locals”命令查看本地变量,看上一行代码干了些什么:

http://p2.qhimg.com/t01990f45a8b09ebd43.png

如上图,TextView已经被加载被赋值给了tv参数,对应代码中与TextView的代码已经被执行。

“next”执行下一行,并检查局部变量:

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

上图中列出了所以的局部变量,其中secret的字符串变量看上去毕竟可疑,其值”Try Again”就是之前我们点击按钮后显示的信息。

之前的源代码中看到,setText方法被用来设置值”Try Again”。使用”step”命令进入”setText”方法动态修改显示的值。

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

使用”locals”命令查看该方法中的局部变量:

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

使用”set”命令将”text”变量的值从”Try Again”改为”Hacked”。

http://p8.qhimg.com/t0101f75a73b85114aa.png

我们并不能在程序中看到任何变化,因为我们还没有执行。

下面使用”run命令”执行:

http://p2.qhimg.com/t013aba75cf698d5c54.png

模拟器运行结果如下:

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

可以看到,我们已经成功修改了应用运行的输出,这只是一使用JDB修改应用运行行为的示例。我们也能执行其它的操作,比如“Getting a shell”

总结

本文中,我们示范了如何攻击一个可以被调试的应用,在实际的产品的测试中,渗透测试者也应该注意被测试应用是否可以被调试。

  评论这张
 
阅读(61)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017