我需要掛鉤,嘗試以產生「時間獨立」重放針對不同的應用來檢索系統時間的任何功能。一些像僞隨機數生成這樣的事件依賴於對time()的調用,但是例如其他一些調用timeGetTime()或_time64()。是否有可能鉤到任何時間檢索功能
什麼是我需要掛鉤(在Windows中)捕獲所有時間檢索功能的最小函數集。它實際上可能鉤住這些功能嗎?我試圖按時(),但我的鉤子被忽略。我已經成功掛鉤其他功能(如蘭德),但我的時間()鉤子似乎被忽略。
我使用Detours,但我打開使用任何其他API攔截工具。
我需要掛鉤,嘗試以產生「時間獨立」重放針對不同的應用來檢索系統時間的任何功能。一些像僞隨機數生成這樣的事件依賴於對time()的調用,但是例如其他一些調用timeGetTime()或_time64()。是否有可能鉤到任何時間檢索功能
什麼是我需要掛鉤(在Windows中)捕獲所有時間檢索功能的最小函數集。它實際上可能鉤住這些功能嗎?我試圖按時(),但我的鉤子被忽略。我已經成功掛鉤其他功能(如蘭德),但我的時間()鉤子似乎被忽略。
我使用Detours,但我打開使用任何其他API攔截工具。
對於遊戲 'speedhacks',3層的API通常是鉤是:
大多數函數返回的時間,因爲系統開始或類似的東西。在你的鉤子裏,你需要決定你想要做什麼。你可以:
init_time
)real_time
init_time + 0.5*(real_time-init_time)
這將慢下來的時間價值半例如您可能想掛鉤時間系統調用。呃,我不知道我爲什麼甚至暗示。但kernel32.dll中的逆向工程GetSystemTime
將詳細說明如何進行系統調用。
的最少的一組要勾(最好)內核API是NtQuerySystemTime
和NtGetTickCount
。建議使用內核掛鉤,因爲有太多的用戶空間apis掛鉤,你永遠不知道應用程序是否使用這兩個函數直接訪問時間數據。
當然,您應該通過調用PsGetCurrentProcess()並將*(eprocess->UniqueProcessID)
與目標進程ID進行比較來過濾該進程。
爲什麼你不只是要複製一個特定的模擬每次經過相同的種子的PRNG? –
我正試圖在應用程序中執行此操作,但我無法訪問源代碼 – cloudraven