【问题标题】:Android Entry PointsAndroid 入口点
【发布时间】:2014-06-07 00:43:40
【问题描述】:
有没有人知道为具有多个入口点的程序生成入口点的过程,特别是 Android APK。我已经尝试查看Flowdroid 和Scandroid,但我不理解“源”和“接收器”这两个术语以及它们与入口点生成的关系。
如果有人能指出我的新手学习资源,也许是一些好书,我将不胜感激。 (我已经为此浪费了几天时间)
谢谢。
在 FlowDroid 上进一步阅读后编辑:
Sources 和 Sinks 与入口点生成无关,但它们用于数据流分析。这就是为什么当使用--nocallbacks 选项运行FlowDroid 时,它不会生成dummyMainClass.class。阿米尔特?还是我还是错了?
来源:
此外,FlowDroid 需要对 Android 的生命周期和回调进行完整建模。因为Android的sources和sinks是由SuSi提供的,所以我们只需要寻找入口点。连同必要的元信息,它们从 Android 的清单文件、dex 文件和布局 xml 文件中提取。后者允许我们考虑在 XML 中定义的用户交互回调(例如按钮点击),并根据密码字段发现其他来源。由于无法静态预测用户交互,FlowDroid 会生成一个特殊的 main 方法,该方法会考虑所有可能的组合,以确保不会丢失任何污点。
【问题讨论】:
标签:
java
android
entry-point
【解决方案1】:
--nocallbacks
禁用 Android 回调的模拟(按钮单击、GPS 位置更改等;此选项会减少运行时间,但可能会漏掉一些漏洞。
什么是回调?
来自FlowDroid paper
回调 Android 操作系统允许应用程序
为各种类型的信息注册回调,例如位置
更新或 UI 交互。 FLOWDROID 对这些回调建模
它的虚拟 main 方法,例如识别
应用程序存储框架传递给
回调作为参数,稍后将这个数据发送到互联网时
活动停止。调用回调的顺序
通常无法预测,这就是为什么 FLOWDROID 假设
可以以任何可能的顺序调用所有回调。然而,
回调只能在父组件(例如活动)时发生
在跑。为了精确,FLOWDROID 将组件关联起来
(活动、服务等)及其注册的回调。一个活动
例如,可以注册在按钮时调用的回调
被按下。相应的回调处理程序必须是
在此的 onResume() 和 onPause() 事件之间进行分析
仅限活动。
有两种不同的方法可以在
安卓平台。首先,回调可以声明式地定义在
活动的 XML 文件。或者,他们也可以注册
强制使用对特定系统方法的众所周知的调用。
FLOWDROID 支持这两种方式。此外,对于那里的恶意软件
是攻击者通过以下方式注册未记录回调的风险
覆盖 Android 基础设施的方法,其中一些
甚至可以被本机代码调用。 FLOWDROID 认识到这样的
覆盖的方法,处理它们类似于正常的回调
处理程序,例如按钮单击。
为了查找在应用程序代码中注册的回调,FLOWDROID
首先为每个组件计算一个调用图,从
生命周期方法(onCreate()、onStop() 等)在
相应的组件类。然后使用此调用图扫描
调用使用一种众所周知的 Android 系统方法
回调接口作为形式参数类型。随后,通话
图形逐渐扩展以包括这些新发现的
回调,并且扫描再次运行,因为回调处理程序是免费的
自行注册新的回调,可能需要 FLOWDROID
重新扩展调用图并重新分析直到一个固定点
它达到了。虽然这种方法比仅仅扫描更昂贵
对于实现回调接口的类,它在组件和回调之间提供了更精确的映射。这不
只减少误报,但我们也发现它大大减少
以下污点分析的运行时间。一旦假人
main 方法已经构建,FLOWDROID 计算一个 final
使用此方法作为应用程序入口点的调用图。
对于布局 XML 文件中定义的回调,相应的
XML 文件映射到一个或多个应用程序组件,使用
相应的布局控件。例如,一个按钮单击处理程序,
仅对承载相应按钮的活动有效。流动机器人
分析每个活动以查看 XML 中的哪些标识符
文件它注册。然后使用此信息创建映射
很抱歉,我们遇到了同样的问题:没有关于 Soot/FlowDroid 的良好文档。但我经常通过搜索邮件列表找到解决问题的方法。