是否有人知道具有多个入口点的程序(特别是Android APK)的入口点生成过程。我已经尝试查看FlowdroidScandroid,但是我不理解术语“源”和“接收器”及其与入口点生成的关系。

如果有人可以指出我要为新手学习的资源,也许是一些好书,我将非常感激。 (我已经在此浪费了几天)

谢谢。

在进一步阅读FlowDroid之后进行编辑:

源和接收器与入口点生成无关,但它们用于数据流分析。这就是为什么在运行带有--nocallbacks选项的FlowDroid时不会生成dummyMainClass.class的原因。亚铁矿?还是我还是错了?

资源:


  此外,FlowDroid需要完整的Android生命周期和回调模型。由于SuSi提供了Android的源和接收器,因此我们只需要寻找切入点。这些信息以及必要的元信息会从Android的清单文件,dex文件和布局xml文件中提取。后者使我们可以考虑以XML定义的用户交互回调(例如按钮单击),并在密码字段方面发现其他来源。由于无法静态预测用户交互,因此FlowDroid会生成一种特殊的main方法,该方法会考虑所有可能的组合以确保不会丢失异味。

最佳答案

--nocallbacks


禁止模拟Android回调(单击按钮,更改GPS位置等);此选项可减少运行时间,但可能会漏掉一些漏洞。

什么是回调?
来自FlowDroid paper


  回调Android操作系统允许应用程序执行以下操作:
  注册各种类型的信息(例如位置)的回调
  更新或UI交互。 FLOWDROID在这些回调中建模
  它的虚拟main方法,例如识别
  应用程序存储框架传递到的位置数据
  回调作为参数,然后在以下情况下将此数据发送到Internet
  活动已停止。回调的调用顺序
  通常无法预测,这就是为什么FLOWDROID假定
  可以以任何可能的顺序调用所有回调。然而,
  回调只能在父组件(例如活动)时发生
  在跑。为了精确起见,FLOWDROID因此关联了组件
  (活动,服务等)及其注册的回调。一个活动
  例如,可以注册在按钮时调用的回调
  被按下。然后,相应的回调处理程序必须是
  在此事件的onResume()和onPause()事件之间进行了分析
  仅活动。
  有两种不同的方法可以在
  Android平台。首先,可以在以下方式中声明性地定义回调
  活动的XML文件。另外,他们也可以注册
  必须使用对特定系统方法的众所周知的调用。
  FLOWDROID支持两种方式。此外,对于那里的恶意软件
  攻击者通过以下方式注册未记录的回调的风险
  Android基础结构的覆盖方法,其中一些
  甚至可以由本机代码调用。 FLOWDROID可识别此类
  覆盖的方法,类似于常规回调一样处理它们
  诸如按钮单击之类的处理程序。
  用于查找在应用程序代码FLOWDROID中注册的回调
  首先从每个组件开始计算一个调用图
  生命周期方法(onCreate(),onStop()等)在
  各个组件类。然后使用该调用图来扫描
  调用使用知名度之一的Android系统方法
  回调接口作为形式参数类型。之后,电话
  图被逐步扩展以包括这些新发现的
  回调,由于回调处理程序是免费的,因此扫描将再次运行
  自行注册新的回调,可能需要FLOWDROID
  重新扩展调用图并重新分析直到固定点
  它达到了。虽然此方法比仅扫描更昂贵
  对于实现回调接口的类,它在组件和回调之间提供了更精确的映射。这不
  只会减少误报,但我们也发现它会大大减少
  以下污点分析的运行时。一旦假人
  主要方法已构建,FLOWDROID计算最终值
  使用此方法作为应用的入口点的调用图。
  对于布局XML文件中定义的回调,
  使用以下命令将XML文件映射到一个或多个应用程序组件
  各自的布局控件。例如,按钮单击处理程序,
  仅对托管相应按钮的活动有效。流体
  分析每个活动以查看XML中的哪些标识符
  文件注册。然后,此信息用于创建映射


抱歉,我们有同样的问题:没有关于Soot / FlowDroid的好的文档。但是我经常通过搜索邮件列表找到解决问题的方法。

07-25 22:05