@cheatron/nthread 1.0.2 → 1.0.3
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.
- package/README.md +198 -46
- package/dist/crt.d.ts +1 -0
- package/dist/crt.d.ts.map +1 -1
- package/dist/crt.js +1 -0
- package/dist/crt.js.map +1 -1
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/heap.d.ts +2 -2
- package/dist/memory/heap.d.ts.map +1 -1
- package/dist/memory/heap.js +5 -5
- package/dist/memory/heap.js.map +1 -1
- package/dist/memory/romem.d.ts +3 -3
- package/dist/memory/romem.d.ts.map +1 -1
- package/dist/memory/romem.js +2 -1
- package/dist/memory/romem.js.map +1 -1
- package/dist/nthread-file.d.ts +82 -0
- package/dist/nthread-file.d.ts.map +1 -0
- package/dist/nthread-file.js +164 -0
- package/dist/nthread-file.js.map +1 -0
- package/dist/nthread-heap.d.ts +1 -1
- package/dist/nthread-heap.d.ts.map +1 -1
- package/dist/nthread.d.ts +45 -2
- package/dist/nthread.d.ts.map +1 -1
- package/dist/nthread.js +108 -7
- package/dist/nthread.js.map +1 -1
- package/dist/thread/proxy-thread.d.ts +8 -3
- package/dist/thread/proxy-thread.d.ts.map +1 -1
- package/dist/thread/proxy-thread.js +13 -6
- package/dist/thread/proxy-thread.js.map +1 -1
- package/package.json +2 -2
|
@@ -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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"}
|
package/dist/nthread-heap.d.ts
CHANGED
|
@@ -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.
|
|
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,
|
|
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.
|
|
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.
|
|
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()).
|
package/dist/nthread.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AAsB7D,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,YAAY,CAAC;IAqB/B;;;;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,YAAY,CAAC;IAO/B;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,aAAa,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC;IAOlB;;;;;;OAMG;IACG,QAAQ,CACZ,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,EACnC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,GAClC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IAmBhC;;;;;;;;;;;OAWG;IACG,SAAS,CACb,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,CAAC,aAAa,EAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,YAAY,GAC1C,OAAO,CAAC,MAAM,CAAC;IA0BlB;;;;;;;;;;OAUG;IACG,QAAQ,CACZ,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,CAAC,aAAa,EAC5B,IAAI,EAAE,MAAM,CAAC,YAAY,GAAG,MAAM,GACjC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IA2B3B;;;OAGG;IACG,SAAS,CACb,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,CAAC,aAAa,GAC3B,OAAO,CAAC,MAAM,CAAC;IAKlB;;;OAGG;IACG,SAAS,CACb,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,CAAC,aAAa,GAC3B,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"}
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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()).
|
package/dist/nthread.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -9,7 +9,7 @@ export type ReadMemoryFn = (proxy: ProxyThread, address: Native.NativePointer, s
|
|
|
9
9
|
export type WriteMemoryFn = (proxy: ProxyThread, address: Native.NativePointer, data: Buffer | Native.NativePointer, size?: number) => Promise<number>;
|
|
10
10
|
export type CallFn = (proxy: ProxyThread, address: Native.NativePointer, ...args: Arg[]) => Promise<Native.NativePointer>;
|
|
11
11
|
export type CloseFn = (proxy: ProxyThread, suicide?: number) => Promise<void>;
|
|
12
|
-
export type AllocFn = (proxy: ProxyThread, size: number, opts?: AllocOptions) => Promise<Native.
|
|
12
|
+
export type AllocFn = (proxy: ProxyThread, size: number, opts?: AllocOptions) => Promise<Native.NativeMemory>;
|
|
13
13
|
export type FreeFn = (proxy: ProxyThread, ptr: Native.NativePointer) => Promise<void>;
|
|
14
14
|
/** Signature for a bound function on ProxyThread (e.g. proxy.malloc, proxy.memset) */
|
|
15
15
|
export type BoundCallFn = (...args: Arg[]) => Promise<Native.NativePointer>;
|
|
@@ -36,6 +36,8 @@ export declare class ProxyThread {
|
|
|
36
36
|
fread: (buffer: Arg, size: Arg, count: Arg, stream: Arg) => Promise<Native.NativePointer>;
|
|
37
37
|
/** `msvcrt!realloc(ptr, size)` */
|
|
38
38
|
realloc: (ptr: Arg, size: Arg) => Promise<Native.NativePointer>;
|
|
39
|
+
/** `msvcrt!fseek(stream, offset, origin)` — returns 0 on success */
|
|
40
|
+
fseek: (stream: Arg, offset: Arg, origin: Arg) => Promise<Native.NativePointer>;
|
|
39
41
|
private _read;
|
|
40
42
|
private _write;
|
|
41
43
|
private _call;
|
|
@@ -63,7 +65,8 @@ export declare class ProxyThread {
|
|
|
63
65
|
setAllocer(fn: AllocFn): void;
|
|
64
66
|
/** Sets the free strategy */
|
|
65
67
|
setFreer(fn: FreeFn): void;
|
|
66
|
-
/** Reads memory from the remote process */
|
|
68
|
+
/** Reads memory from the remote process. When `address` is a `NativeMemory`, `size` defaults to `address.size`. */
|
|
69
|
+
read(address: Native.NativeMemory): Promise<Buffer>;
|
|
67
70
|
read(address: Native.NativePointer, size: number): Promise<Buffer>;
|
|
68
71
|
/** Writes memory into the remote process */
|
|
69
72
|
write(address: Native.NativePointer, data: Buffer | Native.NativePointer, size?: number): Promise<number>;
|
|
@@ -82,8 +85,10 @@ export declare class ProxyThread {
|
|
|
82
85
|
* - `opts.fill > 0` → `malloc(size)` + `memset(ptr, fill, size)`
|
|
83
86
|
* - `opts.type` → zone hint for HeapPool (READONLY / READWRITE)
|
|
84
87
|
* - `opts.address` → realloc mode: resize existing allocation
|
|
88
|
+
*
|
|
89
|
+
* Returns a `NativeMemory` so callers always know the allocation size.
|
|
85
90
|
*/
|
|
86
|
-
alloc(size: number, opts?: AllocOptions): Promise<Native.
|
|
91
|
+
alloc(size: number, opts?: AllocOptions): Promise<Native.NativeMemory>;
|
|
87
92
|
/**
|
|
88
93
|
* Frees a previously allocated remote pointer.
|
|
89
94
|
*/
|