我是一个保安,我已经做了大量的研究,在这一点上,我正在寻找指导下一步去哪里。
另外,很抱歉,我把重要的部分加粗了。
我想在高层次上做的很简单:
我试图将一些数据输入到程序中,然后“跟踪”这些数据,并跟踪这些数据是如何处理的,以及最终的结果。
例如,如果我将登录凭据输入到filezilla,我希望跟踪访问的每个内存引用,并启动跟踪以跟踪数据的去向、发送到的库,如果我甚至可以将其与网络数据包关联起来,则还需要加分。
现在我把注意力集中在windows平台上,我想我的主要问题归结为:
有什么好的api可以远程控制理解windows窗体和系统库的调试器吗?
以下是迄今为止我发现的关键特性:
这种分析技术的名称是“动态污染分析”
它需要调试器或探查器
inspect.exe是查找接受输入的windows ui元素的有用工具
一般来说,windows自动化框架可能是有用的
自动化调试器似乎是一件痛苦的事。idebugclient接口允许更丰富的数据,但是像idapro甚至作弊引擎这样的调试器有更好的内存分析工具
我需要放置内存断点,并跟踪与输入相关联的引用和寄存器。
以下是我尝试过的一系列工具:
我玩过以下所有工具:windbg(很棒的工具)、ida pro、作弊引擎、x64dbg、vdb(python调试器)、intel的pin、valgrind等等……
接下来是一些动态污染分析工具,但它们不支持检测Windows调试框架本机提供的.NET组件或其他便利性,这些便利性是由诸如inspect.exe之类的实用程序提供的:
https://github.com/wmkhoo/taintgrind
http://bitblaze.cs.berkeley.edu/temu.html
然后我试着用idebugclient接口编写我自己的c程序,但是它的文档记录很差,我能找到的最好的项目是这个家伙,他已经3岁了:
C# app to act like WINDBG's "step into" feature
我愿意为适合这个用例的现有项目贡献代码,但此时我甚至不知道从何开始。
我觉得作为一个整体的动态程序分析和调试工具可以用一些爱…我觉得有点困了,不知道从这里搬到哪里去。解决这个问题有很多不同的工具和方法,而且它们都以某种方式缺乏。
不管怎样,我很感激任何指导。如果你能做到这一点,谢谢!!
-戴夫
最佳答案
如果你坚持在运行时这么做,valgrind或pin可能是你最好的选择。据我所知(从未使用过),您可以配置这些工具以任意方式解释每个机器指令。您希望通过机器指令跟踪数据流以跟踪受污染的数据(读取此类数据,然后写入寄存器或条件代码位)。一个复杂的问题可能是将有问题的指令的来源追溯回程序元素(dll)?链接模块?指定的子例程),以便您可以适当地投诉。
这是你作为一个个体在努力方面可能会成功完成的任务。
这应该适用于应用程序。
我怀疑你的问题之一是追踪操作系统的去向。尽管同样的原则也适用,但这要困难得多;你的困难在于让操作系统供应商让你跟踪操作系统中执行的指令。
作为运行时分析这样做的缺点是,如果恶意应用程序对您的特定执行没有任何不良影响,您将不会发现任何问题。这就是动力分析的经典缺点。
您可以考虑使用经典编译器技术在源代码级别跟踪数据。这要求您能够访问可能涉及的所有源代码(如果您的应用程序依赖于各种各样的库,这实际上是很难的),需要您拥有能够解析和跟踪通过源模块的数据流的工具,这些工具可以互相交流(汇编语言,C语言,Java语言,SQL语言,HTML语言,甚至CSS……)。
作为静态分析,这有可能检测到不需要的数据流,无论执行是什么。图灵限制意味着您可能无法检测到所有这些问题。这就是静态分析的缺点。
建立你自己的工具,甚至整合个别的工具,这样做很可能超出你作为一个个体所能合理做的范围。您需要找到构建此类工具的统一框架。[查看我的简历]。