静态调用图分析解决了哪些问题?
Posted
技术标签:
【中文标题】静态调用图分析解决了哪些问题?【英文标题】:What issues does static call graph analysis decipher? 【发布时间】:2011-05-03 06:01:57 【问题描述】:在程序上使用静态调用图分析希望找到哪些问题? FxCop 使用静态调用图分析,使用这种技术发现了什么问题?
http://msdn.microsoft.com/library/bb429476.aspxhttp://en.wikipedia.org/wiki/Callgraph
抱歉,我缺乏知识,我通过谷歌找到了一些信息,但担心它非常不完整。谢谢!
【问题讨论】:
【参考方案1】:调用图本身就是这样;没有“错误”的调用图(除非您有禁止递归的样式检查)。
真正的问题是,要了解程序中某个点的代码可能会出现问题,您通常需要了解世界的形状(哪些数据结构是实时的,它们可能包含哪些值,它们可能存在哪些关系) 在该代码点处于活动状态的那一刻。调用图显示了执行如何到达感兴趣的代码点,并且沿着该调用图路径的所有代码都设置了代码执行上下文。这使静态分析器能够生成“上下文相关”分析,从而提供更准确的答案。
这导致了第二个问题:如何获得准确的调用图?如果您从 A 直接调用 B,则很容易写下“A 调用 B”并感觉这是一个准确的调用图事实。但是,如果 A 通过间接指针进行调用(你能说虚拟方法调度吗?),那么 A 调用的确切对象就不是那么清楚了;你最终会得到 A-might-call-B1, A-might-call-B2, ... A 实际调用的实际上取决于 A 执行的上下文... 哎呀,您需要调用图来制造调用图。好消息是你从底部构建调用图:“我知道这肯定是真的,所以那肯定是真的”。在分析仪无法弄清楚的地方,它通常会做出保守的猜测:(“所有这些调用都是可能的,我不能排除它们”)。这种保守主义是静态分析仪准确性的关键原因之一。
【讨论】:
【参考方案2】:这是我发现的:
调用图用于检测与程序执行、违反推荐准则以及可能的代码注入攻击有关的问题。
通过创建各种方法之间的调用关系图,可以很容易地看出在某些时候调用某些方法或如何调用某些方法时可能会出现问题的地方。很容易看出过程/函数何时可能违反准则,例如维持代码模块化。由于这些调用关系以及它们的结构,很容易看出恶意代码可能在某些点被注入。通过这种方式,调用图可以为静态分析提供上下文,从而产生更准确的结果。
由于 FxCop 使用静态调用图,它只能在一定程度上推测上述内容。
【讨论】:
以上是关于静态调用图分析解决了哪些问题?的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )