@cheatron/nthread 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,82 @@
1
+ import * as Native from '@cheatron/native';
2
+ import { NThreadHeap } from './nthread-heap.js';
3
+ import type { CapturedThread } from './thread/captured-thread.js';
4
+ import type { ProxyThread } from './thread/proxy-thread.js';
5
+ import type { GeneralPurposeRegs } from './globals.js';
6
+ /** Per-proxy file channel state. */
7
+ interface FileChannelState {
8
+ /** Local temp file path used as the bidirectional I/O channel. */
9
+ filePath: string;
10
+ /** `FILE*` handle kept open in the target process (`"w+b"` mode). */
11
+ stream: Native.NativePointer;
12
+ }
13
+ /**
14
+ * Default maximum bytes transferred before rotating temp file paths.
15
+ * Reserved for future path-rotation support.
16
+ */
17
+ export declare const DEFAULT_FILE_MAX_TRANSFER: number;
18
+ /**
19
+ * NThreadFile extends {@link NThreadHeap} with filesystem-based I/O channels.
20
+ *
21
+ * Instead of `ReadProcessMemory` / `WriteProcessMemory` (or the base class's
22
+ * decomposed `memset` write strategy), all data flows through a single temp file:
23
+ *
24
+ * - **Write channel** (attacker → target): attacker writes to temp file locally,
25
+ * then `fseek(0)` + `fread` in the target reads it into the destination address.
26
+ * - **Read channel** (target → attacker): `fseek(0)` + `fwrite` + `fflush` in
27
+ * the target dumps memory to the file, then attacker reads it locally.
28
+ *
29
+ * The file is opened once during `inject()` with `"w+b"` mode (read+write) and
30
+ * kept open for the lifetime of the proxy. `fseek(0, SEEK_SET)` resets the
31
+ * stream position before each operation.
32
+ *
33
+ * ### When to prefer NThreadFile
34
+ * - Large bulk transfers: one `fread`/`fwrite` call vs many `memset` calls
35
+ * - Stealth: avoids RPM/WPM API calls entirely
36
+ *
37
+ * ### Lifecycle
38
+ * - `inject()` opens a single temp file and configures the proxy delegates.
39
+ * - `proxy.write()` / `proxy.read()` transparently route through the file channel.
40
+ * - `proxy.close()` closes the stream, deletes the temp file, restores the thread.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const nt = new NThreadFile();
45
+ * const [proxy] = await nt.inject(tid);
46
+ *
47
+ * const ptr = await proxy.alloc(256, { fill: 0 });
48
+ * await proxy.write(ptr, myBuffer); // goes through file channel
49
+ * const data = await proxy.read(ptr); // goes through file channel
50
+ *
51
+ * await proxy.close(); // closes stream, deletes temp file, destroys heaps, restores thread
52
+ * ```
53
+ */
54
+ export declare class NThreadFile extends NThreadHeap {
55
+ constructor(heapSize?: number, maxSize?: number, processId?: number, sleepAddress?: Native.NativePointer, pushretAddress?: Native.NativePointer, regKey?: GeneralPurposeRegs);
56
+ inject(thread: Native.Thread | number): Promise<[ProxyThread, CapturedThread]>;
57
+ /**
58
+ * Closes the file channel: closes the `FILE*` stream in the target, deletes
59
+ * the temp file, then delegates to the base `threadClose` for heap destruction
60
+ * and thread restore.
61
+ */
62
+ protected fileChannelClose(proxy: ProxyThread, state: FileChannelState, captured: CapturedThread, suicide?: number): Promise<void>;
63
+ /**
64
+ * Writes data to the target process through the filesystem channel.
65
+ *
66
+ * 1. Writes `data` to the local temp file (truncates).
67
+ * 2. `fseek(stream, 0, SEEK_SET)` to reset the target's stream position.
68
+ * 3. `fread` in the target reads from the file into the destination address.
69
+ */
70
+ protected fileChannelWrite(proxy: ProxyThread, state: FileChannelState, address: Native.NativePointer, data: Buffer | Native.NativePointer, size?: number): Promise<number>;
71
+ /**
72
+ * Reads data from the target process through the filesystem channel.
73
+ *
74
+ * 1. `fseek(stream, 0, SEEK_SET)` to reset the target's stream position.
75
+ * 2. `fwrite` in the target dumps memory to the file.
76
+ * 3. `fflush` ensures data reaches disk.
77
+ * 4. Reads the temp file locally.
78
+ */
79
+ protected fileChannelRead(proxy: ProxyThread, state: FileChannelState, address: Native.NativePointer, size: number): Promise<Buffer>;
80
+ }
81
+ export {};
82
+ //# sourceMappingURL=nthread-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nthread-file.d.ts","sourceRoot":"","sources":["../src/nthread-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAavD,oCAAoC;AACpC,UAAU,gBAAgB;IACxB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAc,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,WAAY,SAAQ,WAAW;gBAExC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,CAAC,aAAa,EACnC,cAAc,CAAC,EAAE,MAAM,CAAC,aAAa,EACrC,MAAM,CAAC,EAAE,kBAAkB;IASd,MAAM,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,GAC7B,OAAO,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IA8CzC;;;;OAIG;cACa,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAgBhB;;;;;;OAMG;cACa,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,CAAC,aAAa,EAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,EACnC,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAgClB;;;;;;;OAOG;cACa,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,CAAC,aAAa,EAC7B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;CAgBnB"}
@@ -0,0 +1,164 @@
1
+ import * as Native from '@cheatron/native';
2
+ import { NThreadHeap } from './nthread-heap.js';
3
+ import { log } from './logger.js';
4
+ import { FileError, WriteSizeRequiredError } from './errors.js';
5
+ import { writeFileSync, readFileSync, unlinkSync } from 'node:fs';
6
+ import { tmpdir } from 'node:os';
7
+ import { join } from 'node:path';
8
+ import { randomBytes } from 'node:crypto';
9
+ const fileLog = log.child('File');
10
+ /** SEEK_SET constant for fseek — seek from beginning of file. */
11
+ const SEEK_SET = 0;
12
+ /**
13
+ * Default maximum bytes transferred before rotating temp file paths.
14
+ * Reserved for future path-rotation support.
15
+ */
16
+ export const DEFAULT_FILE_MAX_TRANSFER = 1024 * 1024; // 1 MiB
17
+ /**
18
+ * NThreadFile extends {@link NThreadHeap} with filesystem-based I/O channels.
19
+ *
20
+ * Instead of `ReadProcessMemory` / `WriteProcessMemory` (or the base class's
21
+ * decomposed `memset` write strategy), all data flows through a single temp file:
22
+ *
23
+ * - **Write channel** (attacker → target): attacker writes to temp file locally,
24
+ * then `fseek(0)` + `fread` in the target reads it into the destination address.
25
+ * - **Read channel** (target → attacker): `fseek(0)` + `fwrite` + `fflush` in
26
+ * the target dumps memory to the file, then attacker reads it locally.
27
+ *
28
+ * The file is opened once during `inject()` with `"w+b"` mode (read+write) and
29
+ * kept open for the lifetime of the proxy. `fseek(0, SEEK_SET)` resets the
30
+ * stream position before each operation.
31
+ *
32
+ * ### When to prefer NThreadFile
33
+ * - Large bulk transfers: one `fread`/`fwrite` call vs many `memset` calls
34
+ * - Stealth: avoids RPM/WPM API calls entirely
35
+ *
36
+ * ### Lifecycle
37
+ * - `inject()` opens a single temp file and configures the proxy delegates.
38
+ * - `proxy.write()` / `proxy.read()` transparently route through the file channel.
39
+ * - `proxy.close()` closes the stream, deletes the temp file, restores the thread.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const nt = new NThreadFile();
44
+ * const [proxy] = await nt.inject(tid);
45
+ *
46
+ * const ptr = await proxy.alloc(256, { fill: 0 });
47
+ * await proxy.write(ptr, myBuffer); // goes through file channel
48
+ * const data = await proxy.read(ptr); // goes through file channel
49
+ *
50
+ * await proxy.close(); // closes stream, deletes temp file, destroys heaps, restores thread
51
+ * ```
52
+ */
53
+ export class NThreadFile extends NThreadHeap {
54
+ constructor(heapSize, maxSize, processId, sleepAddress, pushretAddress, regKey) {
55
+ super(heapSize, maxSize, processId, sleepAddress, pushretAddress, regKey);
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // inject override
59
+ // ---------------------------------------------------------------------------
60
+ async inject(thread) {
61
+ const [proxy, captured] = await super.inject(thread);
62
+ try {
63
+ // Generate a unique temp path
64
+ const id = randomBytes(8).toString('hex');
65
+ const filePath = join(tmpdir(), `nt_${id}`);
66
+ // Open the file in the target with read+write mode (kept open for the
67
+ // proxy's lifetime); fileOpen handles remote string alloc/free internally.
68
+ const stream = await this.fileOpen(proxy, filePath, 'w+b');
69
+ if (stream.address === 0n) {
70
+ throw new FileError(`fopen("${filePath}", "w+b") returned NULL`);
71
+ }
72
+ const state = { filePath, stream };
73
+ // Replace writer: file-based attacker→target channel
74
+ proxy.setWriter((_proxy, address, data, size) => this.fileChannelWrite(_proxy, state, address, data, size));
75
+ // Replace reader: file-based target→attacker channel
76
+ proxy.setReader((_proxy, address, size) => this.fileChannelRead(_proxy, state, address, size));
77
+ // Replace closer: clean up file channel, then delegate to base
78
+ proxy.setCloser((_proxy, suicide) => this.fileChannelClose(_proxy, state, captured, suicide));
79
+ fileLog.info(`File channel established: ${filePath}`);
80
+ return [proxy, captured];
81
+ }
82
+ catch (err) {
83
+ // If file channel setup fails, clean up the base injection
84
+ await proxy.close();
85
+ throw err;
86
+ }
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // File Channel I/O
90
+ // ---------------------------------------------------------------------------
91
+ /**
92
+ * Closes the file channel: closes the `FILE*` stream in the target, deletes
93
+ * the temp file, then delegates to the base `threadClose` for heap destruction
94
+ * and thread restore.
95
+ */
96
+ async fileChannelClose(proxy, state, captured, suicide) {
97
+ // Close the FILE* stream (thread is still alive at this point;
98
+ // termination happens in the base threadClose call below).
99
+ await proxy.fclose(state.stream.address);
100
+ // Delete temp file (best-effort)
101
+ try {
102
+ unlinkSync(state.filePath);
103
+ }
104
+ catch {
105
+ /* file may not exist */
106
+ }
107
+ // Heap destruction + thread restore
108
+ await this.threadClose(proxy, captured, suicide);
109
+ }
110
+ /**
111
+ * Writes data to the target process through the filesystem channel.
112
+ *
113
+ * 1. Writes `data` to the local temp file (truncates).
114
+ * 2. `fseek(stream, 0, SEEK_SET)` to reset the target's stream position.
115
+ * 3. `fread` in the target reads from the file into the destination address.
116
+ */
117
+ async fileChannelWrite(proxy, state, address, data, size) {
118
+ let buf;
119
+ let writeSize;
120
+ if (data instanceof Native.NativePointer) {
121
+ if (!size)
122
+ throw new WriteSizeRequiredError();
123
+ buf = Native.currentProcess.memory.read(data, size);
124
+ writeSize = size;
125
+ }
126
+ else {
127
+ buf = data instanceof Buffer ? data : Buffer.from(data);
128
+ writeSize = size ?? buf.length;
129
+ if (writeSize < buf.length)
130
+ buf = buf.subarray(0, writeSize);
131
+ }
132
+ if (writeSize === 0)
133
+ return 0;
134
+ // 1. Write to local temp file
135
+ writeFileSync(state.filePath, buf);
136
+ // 2. Reset stream position in target
137
+ await proxy.fseek(state.stream, 0n, BigInt(SEEK_SET));
138
+ // 3. Read file contents into target address
139
+ const result = await proxy.fread(address.address, 1n, BigInt(writeSize), state.stream);
140
+ return Number(result.address);
141
+ }
142
+ /**
143
+ * Reads data from the target process through the filesystem channel.
144
+ *
145
+ * 1. `fseek(stream, 0, SEEK_SET)` to reset the target's stream position.
146
+ * 2. `fwrite` in the target dumps memory to the file.
147
+ * 3. `fflush` ensures data reaches disk.
148
+ * 4. Reads the temp file locally.
149
+ */
150
+ async fileChannelRead(proxy, state, address, size) {
151
+ if (size === 0)
152
+ return Buffer.alloc(0);
153
+ // 1. Reset stream position in target
154
+ await proxy.fseek(state.stream, 0n, BigInt(SEEK_SET));
155
+ // 2. Write target memory to file
156
+ await proxy.fwrite(address.address, 1n, BigInt(size), state.stream);
157
+ // 3. Flush to disk
158
+ await proxy.fflush(state.stream.address);
159
+ // 4. Read the file locally
160
+ const result = readFileSync(state.filePath);
161
+ return result.subarray(0, size);
162
+ }
163
+ }
164
+ //# sourceMappingURL=nthread-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nthread-file.js","sourceRoot":"","sources":["../src/nthread-file.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,7 @@ export declare class NThreadHeap extends NThread {
48
48
  private state;
49
49
  constructor(heapSize?: number, maxSize?: number, processId?: number, sleepAddress?: Native.NativePointer, pushretAddress?: Native.NativePointer, regKey?: GeneralPurposeRegs);
50
50
  protected threadClose(proxy: ProxyThread, captured: CapturedThread, suicide?: number): Promise<void>;
51
- protected threadAlloc(proxy: ProxyThread, size: number, opts?: AllocOptions): Promise<Native.NativePointer>;
51
+ protected threadAlloc(proxy: ProxyThread, size: number, opts?: AllocOptions): Promise<Native.NativeMemory>;
52
52
  protected threadFree(proxy: ProxyThread, ptr: Native.NativePointer): Promise<void>;
53
53
  private getState;
54
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"nthread-heap.d.ts","sourceRoot":"","sources":["../src/nthread-heap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,+CAA+C;AAC/C,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,QAAgC,CAAC;AAc3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,WAAY,SAAQ,OAAO;IACtC,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,KAAK,CAAsC;gBAGjD,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,CAAC,aAAa,EACnC,cAAc,CAAC,EAAE,MAAM,CAAC,aAAa,EACrC,MAAM,CAAC,EAAE,kBAAkB;cAWJ,WAAW,CAClC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;cAYS,WAAW,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;cAoBP,UAAU,CACjC,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,CAAC,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,QAAQ;IAShB;;;OAGG;YACW,aAAa;IA4C3B,4FAA4F;IAC5F,OAAO,CAAC,QAAQ;IAQhB,wDAAwD;IACxD,OAAO,CAAC,UAAU;YAIJ,eAAe;CA0D9B"}
1
+ {"version":3,"file":"nthread-heap.d.ts","sourceRoot":"","sources":["../src/nthread-heap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,+CAA+C;AAC/C,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,QAAgC,CAAC;AAc3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,WAAY,SAAQ,OAAO;IACtC,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,KAAK,CAAsC;gBAGjD,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,CAAC,aAAa,EACnC,cAAc,CAAC,EAAE,MAAM,CAAC,aAAa,EACrC,MAAM,CAAC,EAAE,kBAAkB;cAWJ,WAAW,CAClC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;cAYS,WAAW,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;cAoBN,UAAU,CACjC,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,CAAC,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,QAAQ;IAShB;;;OAGG;YACW,aAAa;IA4C3B,4FAA4F;IAC5F,OAAO,CAAC,QAAQ;IAQhB,wDAAwD;IACxD,OAAO,CAAC,UAAU;YAIJ,eAAe;CA0D9B"}
package/dist/nthread.d.ts CHANGED
@@ -75,7 +75,7 @@ export declare class NThread {
75
75
  * delegates to `msvcrt!realloc` when `opts.address` is provided.
76
76
  * Subclasses can override to use a pre-allocated heap instead.
77
77
  */
78
- protected threadAlloc(proxy: ProxyThread, size: number, opts?: AllocOptions): Promise<Native.NativePointer>;
78
+ protected threadAlloc(proxy: ProxyThread, size: number, opts?: AllocOptions): Promise<Native.NativeMemory>;
79
79
  /**
80
80
  * Hook: frees a pointer in the target process.
81
81
  * Default: `msvcrt!free`.
@@ -102,7 +102,7 @@ export declare class NThread {
102
102
  * Allocates a null-terminated wide string (UTF-16LE) in the target process.
103
103
  * Use `encoding` to override — e.g. `'utf8'` for ANSI (A-variant) APIs.
104
104
  */
105
- allocString(proxy: ProxyThread, str: string, opts?: AllocOptions): Promise<Native.NativePointer>;
105
+ allocString(proxy: ProxyThread, str: string, opts?: AllocOptions): Promise<Native.NativeMemory>;
106
106
  /**
107
107
  * Encodes `str` with a null terminator and writes it into an already-allocated
108
108
  * remote address. Auto-detects encoding via `resolveEncoding`
@@ -111,6 +111,49 @@ export declare class NThread {
111
111
  * @returns Number of bytes written.
112
112
  */
113
113
  writeString(proxy: ProxyThread, dest: Native.NativePointer, str: string): Promise<number>;
114
+ /**
115
+ * Opens a file in the target process via `msvcrt!fopen`.
116
+ * Both `path` and `mode` are automatically allocated as null-terminated ANSI
117
+ * strings and freed after the call.
118
+ *
119
+ * @returns `FILE*` pointer (`address === 0n` on failure).
120
+ */
121
+ fileOpen(proxy: ProxyThread, path: string | Native.NativePointer, mode: string | Native.NativePointer): Promise<Native.NativePointer>;
122
+ /**
123
+ * Writes data to an open `FILE*` stream via `msvcrt!fwrite`.
124
+ *
125
+ * **Two modes:**
126
+ * - `data: Buffer | string` — encodes locally, allocates a remote scratch buffer,
127
+ * calls `fwrite`, then frees it automatically.
128
+ * Strings are encoded as UTF-8 (raw bytes, no null terminator).
129
+ * - `data: NativeMemory` — already in the target process; byte count is taken
130
+ * from `data.size` automatically.
131
+ *
132
+ * @returns Number of bytes written.
133
+ */
134
+ fileWrite(proxy: ProxyThread, stream: Native.NativePointer, data: Buffer | string | Native.NativeMemory): Promise<number>;
135
+ /**
136
+ * Reads bytes from a `FILE*` stream via `msvcrt!fread`.
137
+ *
138
+ * **Two modes:**
139
+ * - `dest: NativeMemory` — reads directly into an existing remote buffer;
140
+ * byte count is taken from `dest.size` automatically. Returns number of bytes read.
141
+ * - `dest: number` (= byteCount) — allocates a remote scratch buffer,
142
+ * calls `fread`, copies the result back as a local `Buffer`, then frees the scratch.
143
+ *
144
+ * `size` is always `1` — byte-granular I/O.
145
+ */
146
+ fileRead(proxy: ProxyThread, stream: Native.NativePointer, dest: Native.NativeMemory | number): Promise<number | Buffer>;
147
+ /**
148
+ * Flushes a `FILE*` stream via `msvcrt!fflush`.
149
+ * Returns `0` on success, non-zero on failure (mirrors fflush).
150
+ */
151
+ fileFlush(proxy: ProxyThread, stream: Native.NativePointer): Promise<number>;
152
+ /**
153
+ * Closes a `FILE*` stream via `msvcrt!fclose`.
154
+ * Returns `0` on success, `EOF` on failure (mirrors fclose).
155
+ */
156
+ fileClose(proxy: ProxyThread, stream: Native.NativePointer): Promise<number>;
114
157
  /**
115
158
  * Executes a function call on a captured thread using the Windows x64 calling convention.
116
159
  * The thread must be parked at the sleep address (after inject()).
@@ -1 +1 @@
1
- {"version":3,"file":"nthread.d.ts","sourceRoot":"","sources":["../src/nthread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAoB7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;AAIlE;;;;;;;;;;GAUG;AACH,qBAAa,OAAO;IAClB,sDAAsD;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B,2EAA2E;IACpE,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IAE1C,6EAA6E;IACtE,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;IAE5C,gEAAgE;IACzD,MAAM,EAAE,kBAAkB,CAAC;IAElC;;;;;;OAMG;gBAED,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,CAAC,aAAa,EACnC,cAAc,CAAC,EAAE,MAAM,CAAC,aAAa,EACrC,MAAM,CAAC,EAAE,kBAAkB;IA6B7B;;;;;;;;;;;OAWG;IACG,MAAM,CACV,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,GAC7B,OAAO,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAsGzC;;;;;;;;OAQG;cACa,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,GAAG,EACf,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC,OAAO,CAAC;IAcnB,6EAA6E;YAC/D,WAAW;IAmBzB;;;;OAIG;cACa,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;OAKG;cACa,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IAqBhC;;;;OAIG;cACa,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,CAAC,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;;OAQG;IACH;;;;;OAKG;cACa,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,GAAG,EAAE,GACV,OAAO,CAAC,MAAM,EAAE,CAAC;IAepB;;;OAGG;IACG,WAAW,CACf,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IAOhC;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,aAAa,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC;IAKlB;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,CAAC,aAAa,GAAG,MAAM,EACrC,IAAI,GAAE,GAAG,EAAO,EAChB,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IA6DhC;;;;;;;;;;;OAWG;IACG,WAAW,CACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,aAAa,GAAG,MAAM,EACnC,MAAM,EAAE,MAAM,GAAG,UAAU,GAC1B,OAAO,CAAC,MAAM,CAAC;IA+ElB;;;;;;;;;;;;OAYG;IACG,sBAAsB,CAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,aAAa,GAAG,MAAM,EACnC,MAAM,EAAE,MAAM,CAAC,aAAa,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;IA6BlB;;;;;;;OAOG;IACG,eAAe,CACnB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,aAAa,EAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC;IAOlB;;;OAGG;YACW,sBAAsB;IAkCpC;;;OAGG;YACW,qBAAqB;CAiCpC"}
1
+ {"version":3,"file":"nthread.d.ts","sourceRoot":"","sources":["../src/nthread.ts"],"names":[],"mappings":"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"}
package/dist/nthread.js CHANGED
@@ -7,7 +7,7 @@ import { CapturedThread } from './thread/captured-thread.js';
7
7
  import { crt } from './crt.js';
8
8
  import { kernel32 } from './kernel32.js';
9
9
  import { GetModuleHandleExFlag } from '@cheatron/win32-ext';
10
- import { NoSleepAddressError, NoPushretAddressError, InjectTimeoutError, MsvcrtNotLoadedError, CallTooManyArgsError, CallRipMismatchError, CallTimeoutError, CallThreadDiedError, } from './errors.js';
10
+ import { NoSleepAddressError, NoPushretAddressError, InjectTimeoutError, MsvcrtNotLoadedError, CallTooManyArgsError, CallRipMismatchError, CallTimeoutError, CallThreadDiedError, WriteSizeRequiredError, ReallocNullError, } from './errors.js';
11
11
  import { findOverlappingRegion, getOverlapInfo, updateSnapshot, } from './memory/romem.js';
12
12
  export { STACK_ADD } from './thread/captured-thread.js';
13
13
  const nthreadLog = log.child('');
@@ -163,7 +163,7 @@ export class NThread {
163
163
  async threadWrite(proxy, address, data, size) {
164
164
  if (data instanceof Native.NativePointer) {
165
165
  if (!size) {
166
- throw new Error('Size must be specified when writing a pointer.');
166
+ throw new WriteSizeRequiredError();
167
167
  }
168
168
  await this.writeMemoryWithPointer(proxy, address, data, size);
169
169
  return size;
@@ -193,20 +193,22 @@ export class NThread {
193
193
  if (opts?.address) {
194
194
  const ptr = await proxy.realloc(opts.address.address, BigInt(size));
195
195
  if (ptr.address === 0n)
196
- throw new Error(`realloc(0x${opts.address.address.toString(16)}, ${size}) returned NULL`);
197
- return ptr;
196
+ throw new ReallocNullError(opts.address.address, size);
197
+ return Native.NativeMemory.createFromPointer(ptr, undefined, size);
198
198
  }
199
199
  const fill = opts?.fill;
200
200
  if (fill === undefined) {
201
- return proxy.malloc(BigInt(size));
201
+ const ptr = await proxy.malloc(BigInt(size));
202
+ return Native.NativeMemory.createFromPointer(ptr, undefined, size);
202
203
  }
203
204
  else if (fill === 0) {
204
- return proxy.calloc(1n, BigInt(size));
205
+ const ptr = await proxy.calloc(1n, BigInt(size));
206
+ return Native.NativeMemory.createFromPointer(ptr, undefined, size);
205
207
  }
206
208
  else {
207
209
  const ptr = await proxy.malloc(BigInt(size));
208
210
  await proxy.memset(ptr.address, BigInt(fill & 0xff), BigInt(size));
209
- return ptr;
211
+ return Native.NativeMemory.createFromPointer(ptr, undefined, size);
210
212
  }
211
213
  }
212
214
  /**
@@ -266,6 +268,105 @@ export class NThread {
266
268
  const [buf] = resolveEncoding(null, null, str);
267
269
  return proxy.write(dest, buf);
268
270
  }
271
+ // ─── File I/O helpers ──────────────────────────────────────────────────────
272
+ /**
273
+ * Opens a file in the target process via `msvcrt!fopen`.
274
+ * Both `path` and `mode` are automatically allocated as null-terminated ANSI
275
+ * strings and freed after the call.
276
+ *
277
+ * @returns `FILE*` pointer (`address === 0n` on failure).
278
+ */
279
+ async fileOpen(proxy, path, mode) {
280
+ const pathPtr = typeof path === 'string' ? await this.allocString(proxy, path) : null;
281
+ const modePtr = typeof mode === 'string' ? await this.allocString(proxy, mode) : null;
282
+ try {
283
+ const pathArg = pathPtr
284
+ ? pathPtr.address
285
+ : path.address;
286
+ const modeArg = modePtr
287
+ ? modePtr.address
288
+ : mode.address;
289
+ return await proxy.fopen(pathArg, modeArg);
290
+ }
291
+ finally {
292
+ if (pathPtr)
293
+ await proxy.free(pathPtr);
294
+ if (modePtr)
295
+ await proxy.free(modePtr);
296
+ }
297
+ }
298
+ /**
299
+ * Writes data to an open `FILE*` stream via `msvcrt!fwrite`.
300
+ *
301
+ * **Two modes:**
302
+ * - `data: Buffer | string` — encodes locally, allocates a remote scratch buffer,
303
+ * calls `fwrite`, then frees it automatically.
304
+ * Strings are encoded as UTF-8 (raw bytes, no null terminator).
305
+ * - `data: NativeMemory` — already in the target process; byte count is taken
306
+ * from `data.size` automatically.
307
+ *
308
+ * @returns Number of bytes written.
309
+ */
310
+ async fileWrite(proxy, stream, data) {
311
+ if (data instanceof Native.NativeMemory) {
312
+ const result = await proxy.fwrite(data.address, 1n, BigInt(data.size), stream.address);
313
+ return Number(result.address);
314
+ }
315
+ const buf = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;
316
+ const ptr = await proxy.alloc(buf.length);
317
+ try {
318
+ await proxy.write(ptr, buf);
319
+ const result = await proxy.fwrite(ptr.address, 1n, BigInt(buf.length), stream.address);
320
+ return Number(result.address);
321
+ }
322
+ finally {
323
+ await proxy.free(ptr);
324
+ }
325
+ }
326
+ /**
327
+ * Reads bytes from a `FILE*` stream via `msvcrt!fread`.
328
+ *
329
+ * **Two modes:**
330
+ * - `dest: NativeMemory` — reads directly into an existing remote buffer;
331
+ * byte count is taken from `dest.size` automatically. Returns number of bytes read.
332
+ * - `dest: number` (= byteCount) — allocates a remote scratch buffer,
333
+ * calls `fread`, copies the result back as a local `Buffer`, then frees the scratch.
334
+ *
335
+ * `size` is always `1` — byte-granular I/O.
336
+ */
337
+ async fileRead(proxy, stream, dest) {
338
+ if (dest instanceof Native.NativeMemory) {
339
+ const result = await proxy.fread(dest.address, 1n, BigInt(dest.size), stream.address);
340
+ return Number(result.address);
341
+ }
342
+ // dest is a byte count — alloc internally and return a local Buffer
343
+ const byteCount = dest;
344
+ const ptr = await proxy.alloc(byteCount);
345
+ try {
346
+ const result = await proxy.fread(ptr.address, 1n, BigInt(byteCount), stream.address);
347
+ const bytesRead = Number(result.address);
348
+ return await proxy.read(ptr.withSize(bytesRead));
349
+ }
350
+ finally {
351
+ await proxy.free(ptr);
352
+ }
353
+ }
354
+ /**
355
+ * Flushes a `FILE*` stream via `msvcrt!fflush`.
356
+ * Returns `0` on success, non-zero on failure (mirrors fflush).
357
+ */
358
+ async fileFlush(proxy, stream) {
359
+ const result = await proxy.fflush(stream.address);
360
+ return Number(result.address);
361
+ }
362
+ /**
363
+ * Closes a `FILE*` stream via `msvcrt!fclose`.
364
+ * Returns `0` on success, `EOF` on failure (mirrors fclose).
365
+ */
366
+ async fileClose(proxy, stream) {
367
+ const result = await proxy.fclose(stream.address);
368
+ return Number(result.address);
369
+ }
269
370
  /**
270
371
  * Executes a function call on a captured thread using the Windows x64 calling convention.
271
372
  * The thread must be parked at the sleep address (after inject()).
@@ -1 +1 @@
1
- {"version":3,"file":"nthread.js","sourceRoot":"","sources":["../src/nthread.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nthread.js","sourceRoot":"","sources":["../src/nthread.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"captured-thread.d.ts","sourceRoot":"","sources":["../../src/thread/captured-thread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,eAAO,MAAM,SAAS,SAAS,CAAC;AAEhC;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,MAAM,CAAC,MAAM;IAC/C,2EAA2E;IAC3E,SAAS,CAAC,YAAY,SAAK;IAE3B,iEAAiE;IAC1D,YAAY,EAAG,MAAM,CAAC,aAAa,CAAC;IAE3C,yDAAyD;IAClD,aAAa,EAAG,MAAM,CAAC,aAAa,CAAC;IAE5C,wEAAwE;IACjE,OAAO,EAAE,MAAM,CAAM;IAE5B,2EAA2E;IACpE,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IAE1C,gEAAgE;IACzD,MAAM,EAAE,kBAAkB,CAAC;IAElC;;;;;;OAMG;gBAED,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,MAAM,CAAC,aAAa;IAOpC,iEAAiE;IACjE,cAAc,CAAC,OAAO,GAAE,MAAsC,GAAG,MAAM;IAIvE,2CAA2C;IAC3C,YAAY,IAAI,MAAM,CAAC,MAAM;IAI7B,2CAA2C;IAC3C,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;IAMtC,wBAAwB;IACxB,MAAM,IAAI,MAAM,CAAC,MAAM;IAIvB,wBAAwB;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;IAMhC,wBAAwB;IACxB,MAAM,IAAI,MAAM,CAAC,MAAM;IAIvB,wBAAwB;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;IAMhC,sDAAsD;IAC7C,UAAU,IAAI,MAAM,CAAC,aAAa;IAO3C,iEAAiE;IACxD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,GAAG,IAAI;IAIpD,kEAAkE;IAClE,YAAY,IAAI,IAAI;IAIpB,4DAA4D;IAC5D,YAAY,IAAI,IAAI;IAIpB,0DAA0D;IACjD,OAAO,IAAI,MAAM;IAQ1B,yDAAyD;IAChD,MAAM,IAAI,MAAM;IAQzB,qFAAqF;IACrF,OAAO,IAAI,IAAI;IAOf,oFAAoF;IAC3E,KAAK;IAiBd;;;OAGG;IACY,IAAI,CACjB,SAAS,GAAE,MAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;CAwB9B"}
1
+ {"version":3,"file":"captured-thread.d.ts","sourceRoot":"","sources":["../../src/thread/captured-thread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,eAAO,MAAM,SAAS,SAAS,CAAC;AAEhC;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,MAAM,CAAC,MAAM;IAC/C,2EAA2E;IAC3E,SAAS,CAAC,YAAY,SAAK;IAE3B,iEAAiE;IAC1D,YAAY,EAAG,MAAM,CAAC,aAAa,CAAC;IAE3C,yDAAyD;IAClD,aAAa,EAAG,MAAM,CAAC,aAAa,CAAC;IAE5C,wEAAwE;IACjE,OAAO,EAAE,MAAM,CAAM;IAE5B,2EAA2E;IACpE,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IAE1C,gEAAgE;IACzD,MAAM,EAAE,kBAAkB,CAAC;IAElC;;;;;;OAMG;gBAED,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,MAAM,CAAC,aAAa;IAOpC,iEAAiE;IACjE,cAAc,CAAC,OAAO,GAAE,MAAsC,GAAG,MAAM;IAIvE,2CAA2C;IAC3C,YAAY,IAAI,MAAM,CAAC,MAAM;IAI7B,2CAA2C;IAC3C,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;IAMtC,wBAAwB;IACxB,MAAM,IAAI,MAAM,CAAC,MAAM;IAIvB,wBAAwB;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;IAMhC,wBAAwB;IACxB,MAAM,IAAI,MAAM,CAAC,MAAM;IAIvB,wBAAwB;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI;IAMhC,sDAAsD;IAC7C,UAAU,IAAI,MAAM,CAAC,aAAa;IAO3C,iEAAiE;IACxD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,aAAa,GAAG,IAAI;IAIpD,kEAAkE;IAClE,YAAY,IAAI,IAAI;IAIpB,4DAA4D;IAC5D,YAAY,IAAI,IAAI;IAIpB,0DAA0D;IACjD,OAAO,IAAI,MAAM;IAS1B,yDAAyD;IAChD,MAAM,IAAI,MAAM;IAQzB,qFAAqF;IACrF,OAAO,IAAI,IAAI;IAOf,oFAAoF;IAC3E,KAAK;IAiBd;;;OAGG;IACY,IAAI,CACjB,SAAS,GAAE,MAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;CAwB9B"}
@@ -28,7 +28,7 @@ export class CapturedThread extends Native.Thread {
28
28
  * @param processId Optional process ID for diagnostics and logging.
29
29
  */
30
30
  constructor(handle, threadId, regKey, sleepAddress) {
31
- super(handle, threadId, false);
31
+ super(handle, threadId);
32
32
  this.regKey = regKey;
33
33
  this.sleepAddress = sleepAddress;
34
34
  }
@@ -88,9 +88,10 @@ export class CapturedThread extends Native.Thread {
88
88
  /** Suspends the thread and increments internal counter */
89
89
  suspend() {
90
90
  const result = super.suspend();
91
- if (result) {
92
- this.suspendCount++;
93
- }
91
+ // super.suspend() throws on failure, so reaching here means success.
92
+ // SuspendThread returns the *previous* suspend count (0 when the thread
93
+ // was running), which is falsy — always increment.
94
+ this.suspendCount++;
94
95
  return result;
95
96
  }
96
97
  /** Resumes the thread and decrements internal counter */