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