我得到了一个模拟Windows API的程序。我试图在此仿真器中找出缺陷所在:


无论主机系统如何,始终返回常数值(用于指纹识别)

例如,在此模拟器中获取用户名的调用返回各种随机字符串。但是,无论主机上的实际值是多少,调用获取可用磁盘空间总是
返回相同的数字。


从裸返回实际值。金属(仿真器泄漏真实信息)

例如,获取MAC地址的调用从主机系统返回值。



编写函数以测试Windows API中各种函数的返回值,我正在寻找一种方法来自动生成代码(最好在C / C ++中)以查询WinAPI提供的大量函数。这样的事情是否可能发生,或者我可以利用的其他项目是否已完成?

评论

这应该在StackOverflow上,因为这是软件工程问题。

我不确定我是否同意Stolas的评论,因为该问题与倒车密切相关,请参阅Rolf的回答。

@ekse,它与程序集而不是逆向工程有关。当您尝试编写FUD病毒(或类似的东西)时,也可能是安全性。不过,这个主题很有趣;)

#1 楼

我已经多次使用防病毒引擎进行了相同的练习。通常,我使用的步骤是:识别CPU / Windows仿真器。这通常是最难的部分。查看文件名,并对大型switch语句进行grep反汇编。查找具有200个或更多案例的交换机,并分别进行检查。其中至少有一个与解码单字节X86操作码有关。
找到CALL指令的调度程序。通常,它具有确定是否调用固定地址的特殊处理。如果这种方法没有奏效,请查看周围模块中的字符串,以查看显然与某些Windows API相关的任何内容。
游戏结束。 AV引擎在许多易于辨别的方式上不同于真实的处理器和Windows的正版副本。要检查的事情:将伪参数传递给API,并查看它们是否正确处理了错误条件(它们永远不会处理)。查看模拟器是否模拟了AF标志。查找复杂指令的异常行为,并查看模拟器是否正确实现了该指令。请仔细查看GetTickCount和GetLastError的实现,因为这些实现通常很糟糕。


#2 楼

以前的答案是好的。我会说这取决于机器和仿真器。还有更多的技巧可以识别仿真器。

您可能会看到环境,文件系统中是否存在乳化剂?正在运行的应用程序数量是否表示一个虚拟应用程序?

向操作系统询问该应用程序是否已调试?存在不同的方法,大多数方法很容易失败。

我有一个程序可以测量两次关闭指令之间的执行时间。如果计算机不支持仿真的硬件,则非常可靠。

使用google进行反调试

Chris Jacobi

评论


这不仅仅是评论,还是答案。您没有提供任何有效的方法来检测仿真...尝试至少提供一些有关仿真检测的技术,以改善您的答案。

–恐怖
2013年12月27日7:34