mirror of
https://github.com/tiennm99/time-mocker.git
synced 2026-10-14 16:18:05 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc1ba194d1 | ||
|
|
46c13d0533 | ||
|
|
06e195c5a2 | ||
|
|
9c71d84861 | ||
|
|
a9a76fb541 | ||
|
|
add9912ddd | ||
|
|
d394f6f589 | ||
|
|
b2329b68c9 | ||
|
|
0dc883eb6d |
No files matched your search
Vendored
+5
-8
@@ -3,7 +3,7 @@ name: Create Draft Release
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- 'v*'
|
- "v*"
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
@@ -14,12 +14,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Setup .NET
|
- name: Setup .NET
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v5
|
||||||
with:
|
with:
|
||||||
dotnet-version: 8.x
|
dotnet-version: 10.x
|
||||||
|
|
||||||
- name: Build Solution
|
- name: Build Solution
|
||||||
run: dotnet build TimeMocker.sln -c Release -p:Platform=x64
|
run: dotnet build TimeMocker.sln -c Release -p:Platform=x64
|
||||||
@@ -27,10 +27,7 @@ jobs:
|
|||||||
- name: Prepare Release Artifacts
|
- name: Prepare Release Artifacts
|
||||||
run: |
|
run: |
|
||||||
mkdir release
|
mkdir release
|
||||||
# Copy all DLLs from the build output
|
copy TimeMocker.UI\bin\x64\Release\net48\* release\
|
||||||
copy TimeMocker.UI\bin\x64\Release\net48\*.dll release\
|
|
||||||
copy TimeMocker.UI\bin\x64\Release\net48\*.exe release\
|
|
||||||
copy TimeMocker.UI\bin\x64\Release\net48\*.config release\
|
|
||||||
|
|
||||||
- name: Zip Release
|
- name: Zip Release
|
||||||
run: Compress-Archive -Path release\* -DestinationPath TimeMocker-x64.zip
|
run: Compress-Archive -Path release\* -DestinationPath TimeMocker-x64.zip
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using EasyHook;
|
using EasyHook;
|
||||||
|
|
||||||
namespace TimeMocker.UI.Core
|
namespace TimeMocker.UI.Core
|
||||||
@@ -27,9 +26,6 @@ namespace TimeMocker.UI.Core
|
|||||||
private static readonly string HookDllPathX86 =
|
private static readonly string HookDllPathX86 =
|
||||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TimeMocker.Hook.x86.dll");
|
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TimeMocker.Hook.x86.dll");
|
||||||
|
|
||||||
[DllImport("kernel32.dll", SetLastError = true)]
|
|
||||||
private static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process);
|
|
||||||
|
|
||||||
public event Action<string> LogMessage;
|
public event Action<string> LogMessage;
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
@@ -53,19 +49,16 @@ namespace TimeMocker.UI.Core
|
|||||||
// Write initial delta (zero = real time) before hook starts reading
|
// Write initial delta (zero = real time) before hook starts reading
|
||||||
entry.Shm.Write(new MockTimeInfo { DeltaTicks = 0 });
|
entry.Shm.Write(new MockTimeInfo { DeltaTicks = 0 });
|
||||||
|
|
||||||
// Determine which DLL to use based on target process architecture
|
|
||||||
string hookDllPath = GetHookDllPath(process);
|
|
||||||
|
|
||||||
RemoteHooking.Inject(
|
RemoteHooking.Inject(
|
||||||
process.Id,
|
process.Id,
|
||||||
InjectionOptions.DoNotRequireStrongName,
|
InjectionOptions.DoNotRequireStrongName,
|
||||||
hookDllPath,
|
HookDllPathX86,
|
||||||
hookDllPath,
|
HookDllPathX64,
|
||||||
entry.Shm.MmfName);
|
entry.Shm.MmfName);
|
||||||
|
|
||||||
entry.IsInjected = true;
|
entry.IsInjected = true;
|
||||||
_injected[process.Id] = entry;
|
_injected[process.Id] = entry;
|
||||||
Log($"Injected into [{process.Id}] {process.ProcessName} ({GetArchitectureName(process)})");
|
Log($"Injected into [{process.Id}] {process.ProcessName}");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -77,43 +70,6 @@ namespace TimeMocker.UI.Core
|
|||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetHookDllPath(Process process)
|
|
||||||
{
|
|
||||||
bool is64BitTarget = Is64BitProcess(process);
|
|
||||||
|
|
||||||
if (is64BitTarget)
|
|
||||||
{
|
|
||||||
if (!File.Exists(HookDllPathX64))
|
|
||||||
throw new FileNotFoundException($"x64 hook DLL not found: {HookDllPathX64}");
|
|
||||||
return HookDllPathX64;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!File.Exists(HookDllPathX86))
|
|
||||||
throw new FileNotFoundException($"x86 hook DLL not found: {HookDllPathX86}");
|
|
||||||
return HookDllPathX86;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool Is64BitProcess(Process process)
|
|
||||||
{
|
|
||||||
if (!Environment.Is64BitOperatingSystem)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool isWow64;
|
|
||||||
if (!IsWow64Process(process.Handle, out isWow64))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// If IsWow64Process returns false, it's a 64-bit process
|
|
||||||
// If it returns true, it's a 32-bit process running on 64-bit Windows
|
|
||||||
return !isWow64;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string GetArchitectureName(Process process)
|
|
||||||
{
|
|
||||||
return Is64BitProcess(process) ? "x64" : "x86";
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
// Update fake time for a process
|
// Update fake time for a process
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"sdk": {
|
"sdk": {
|
||||||
"version": "10.0.0",
|
"version": "10.0.100",
|
||||||
"rollForward": "latestMajor",
|
"rollForward": "latestMajor",
|
||||||
"allowPrerelease": true
|
"allowPrerelease": true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user