我需要挂钩任何试图检索系统时间的函数,以便为不同的应用程序生成“时间无关”的重放。伪随机数生成等一些事件依赖于对time()的调用,但是例如其他一些事件调用timeGetTime()或_time64()。
我需要挂钩(在Windows中)以捕获所有时间检索功能的最小函数集是什么。实际上可以挂钩这些功能吗?我正在尝试按时(),但我的钩子被忽略了。我已成功连接其他函数(如rand),但我的time()钩子似乎被忽略了。
我正在使用Detours,但我愿意使用任何其他API拦截工具。
答案 0 :(得分:2)
对于游戏'speedhacks',通常挂钩的3个API是:
大多数这些函数返回自系统启动以来的时间或类似的东西。在你的钩子里,你需要决定你想做什么。你可以:
init_time
)real_time
init_time + 0.5*(real_time-init_time)
,例如答案 1 :(得分:0)
您可能想要挂钩时间系统调用。呃,我不知道为什么我甚至暗示这一点。但是kernel32.dll中的逆向工程GetSystemTime
将详细说明如何进行系统调用。
答案 2 :(得分:0)
您想要挂钩的最小(最好)内核API集合是NtQuerySystemTime
和NtGetTickCount
。建议使用内核挂钩,因为挂起的用户空间过多,你永远不知道应用程序是否使用这两个函数直接访问时间数据。
当然,您应该通过调用PsGetCurrentProcess()并将*(eprocess->UniqueProcessID)
与您的目标进程ID进行比较来过滤掉该过程。