FlowDroid: 精确的上下文,流,字段, 对象敏感和生存周期感知的污染分析

本blog是对http://sseblog.ec-spride.de/tools/flowdroid/项目的翻译和说明,参考的是主页上列的papers。

一个Android app可包含多个组件,如activity, service, content-provider 和broadcast receiver。其中activity负责成像,也就是人机交互,是我们分析的主要入口和场所。不像传统的Java程序,Android app里不带main函数,我们无法简单的像之前一样找到程序的入口和出口来画控制流图,但app里每个组件都有函数来反应此组件的生命周期(lifecycle),我们可以依托lifecycle来画出控制流图。我们先来看下一个activity里的lifecycle是什么样的,

(图片截取自AppIntent, CCS'13)

从图中可以看出activity可以从任何结点按任何顺序执行,并没有传统的单入口单出口结构。除了lifecycle函数activity里还可以带有各种event handler的callbacks,用于处理像UI交互之类的事件。callbacks可以看作居住在lifecycle函数间。

为了生成给定app的控制流图,我们可以对其生成一个虚拟main函数。通过一个例子我们能很清楚的看清背后的思想。


例子中的app只有一个activity用于把用户输在密码框中的内容通过短信发送出去。画横线的语句分别代表了source和sink。现在我们来生成它的控制流图


可以看到dummy main中把onCreatea当作入口,把onDestory作为出口,把原lifecycle图中的带分支的状态看作是抽象的模糊判断语句p,把激活callbacks的条件也同样看作是抽象的判断语句p。

说完了控制流图生成,接下来正式步入static analysis。整个analys

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值