假设我有一个程序,它具有两个函数,依次调用functionAfunctionB

functionA需要大量处理才能执行,并且在执行过程中设置并维护functionB引用的许多全局变量。

我想对functionB进行模糊测试,但是必须先运行functionA才能迫使我等待大约10秒钟,才能看到特定测试的结果。

如何才能我要执行一组测试后,在执行functionA后保存程序状态,并在functionB处恢复?

另外,有哪些机制可以改变程序变量以反映新的模糊值?

评论

英特尔PIN工具具有一个API,可以通过保存/恢复处理器状态来重播执行,需要手动跟踪内存更改。也可以看看这个PDF。但是请注意,该API的变化与pdf中提到的有所不同,但是您将获得大致的了解。

如上所述,内存访问以及打开文件描述符之类的操作可能很棘手。如果您正在执行内存模糊测试,并且这些功能没有很多副作用,那么这是可行的。否则很快就会变得很麻烦。

与上述建议类似,如果functionA没有副作用(例如,打开/读取/写入文件,调用系统调用),则可以使用Intel Pin的上下文操作API来编写您的模糊器。我已经为我的个人项目实现了这种“反向执行”机制,您可以在(github.com/tathanhdinh/PathExplorer/blob/windows_version/…)中看到。很抱歉刊登广告。

#1 楼

CreateToolhelp32Snapshot()将有助于创建程序状态的快照,特别是使本文模糊不清

此外,Peter Van Eeckhoutte在此博文中介绍了您试图在(内存模糊化)中进行的操作

一步一步概述

评论


第一篇论文甚至没有提到CreateToolhelp32Snapshot。此外,CreateToolhelp32Snapshot不能用于创建易于用于执行控制目的的过程快照。

– NirIzr
18年8月31日在1:26

我说这会有所帮助,例如,补充说,它不用于执行控制以恢复其状态:docs.microsoft.com/en-us/windows/desktop/api/tlhelp32/…"th32ProcessID:要被删除的进程的进程标识符“该参数可以为零,以指示当前进程。当指定TH32CS_SNAPHEAPLIST,TH32CS_SNAPMODULE,TH32CS_SNAPMODULE32或TH32CS_SNAPALL值时,将使用此参数。否则,它将被忽略,并且所有进程都包括在快照中。”

– grepNstepN
18-09-27在14:01



最后,可以将Context结构与以这种方式返回的值一起使用CreateThread,GetThreadContext和SetThreadContext,我通过Corelan提到了一种更简单的,已经写好的方法

– grepNstepN
18-09-27在14:05