无论主机系统如何,始终返回常数值(用于指纹识别)
例如,在此模拟器中获取用户名的调用返回各种随机字符串。但是,无论主机上的实际值是多少,调用获取可用磁盘空间总是
返回相同的数字。
从裸返回实际值。金属(仿真器泄漏真实信息)
例如,获取MAC地址的调用从主机系统返回值。
编写函数以测试Windows API中各种函数的返回值,我正在寻找一种方法来自动生成代码(最好在C / C ++中)以查询WinAPI提供的大量函数。这样的事情是否可能发生,或者我可以利用的其他项目是否已完成?
#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
评论
这应该在StackOverflow上,因为这是软件工程问题。我不确定我是否同意Stolas的评论,因为该问题与倒车密切相关,请参阅Rolf的回答。
@ekse,它与程序集而不是逆向工程有关。当您尝试编写FUD病毒(或类似的东西)时,也可能是安全性。不过,这个主题很有趣;)