我需要 Hook 任何试图检索系统时间的函数,以便为不同的应用程序生成“时间无关”的重播。某些事件(如伪随机数生成)取决于对 time() 的调用,但例如其他一些事件会调用 timeGetTime() 或 _time64()。
我需要 Hook (在 Windows 中)以捕获所有时间检索函数的最少函数集是什么。实际上有可能 Hook 这些功能吗?我试图在 time() 上完成它,但我的钩子(Hook)被忽略了。我已成功 Hook 到其他函数(如 rand),但我的 time() Hook 似乎被忽略了。
我正在使用 Detours,但我愿意使用任何其他 API 拦截工具。
最佳答案
对于游戏“speedhacks”,通常 Hook 的 3 个 API 是:
大多数这些函数返回自系统启动以来的时间或类似的东西。在你的钩子(Hook)里,你需要决定你想做什么。你可以:
- 始终返回静态时间
- 执行“减慢”或“加快”时间的常用方法:
- 当你的 DLL 被注入(inject)时,需要一个初始时间(比如
init_time
) - 每次目标调用您的时间函数时,您都可以调用真实函数的蹦床版本,从而获得
real_time
- 您返回的值类似于
init_time + 0.5*(real_time-init_time)
,例如,这会使时间减半
- 当你的 DLL 被注入(inject)时,需要一个初始时间(比如
关于c - 是否可以 Hook 任何时间检索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090051/