@cheatron/native 1.2.0 → 1.2.2
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/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/module.d.ts +14 -21
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +24 -40
- package/dist/module.js.map +1 -1
- package/dist/msvcrt-ext.d.ts +3 -3
- package/dist/msvcrt-ext.d.ts.map +1 -1
- package/dist/native-fn.d.ts +3 -1
- package/dist/native-fn.d.ts.map +1 -1
- package/dist/native-fn.js +7 -5
- package/dist/native-fn.js.map +1 -1
- package/dist/pattern.d.ts +27 -6
- package/dist/pattern.d.ts.map +1 -1
- package/dist/pattern.js +82 -19
- package/dist/pattern.js.map +1 -1
- package/dist/process.d.ts +73 -41
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +292 -159
- package/dist/process.js.map +1 -1
- package/dist/scan-result.d.ts +54 -0
- package/dist/scan-result.d.ts.map +1 -0
- package/dist/scan-result.js +128 -0
- package/dist/scan-result.js.map +1 -0
- package/dist/scanner.d.ts +3 -6
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +7 -15
- package/dist/scanner.js.map +1 -1
- package/package.json +2 -2
package/dist/process.js
CHANGED
|
@@ -4,15 +4,18 @@ import { Handle } from './handle';
|
|
|
4
4
|
import { log } from './logger';
|
|
5
5
|
import { Scanner } from './scanner';
|
|
6
6
|
import { Pattern } from './pattern';
|
|
7
|
+
import { ScanResult, ScanEntry } from './scan-result';
|
|
7
8
|
const processLog = log.child('Process');
|
|
8
9
|
/**
|
|
9
10
|
* Represents a process handle
|
|
10
11
|
*/
|
|
11
12
|
export class Process extends Handle {
|
|
12
13
|
_pid;
|
|
14
|
+
memory;
|
|
13
15
|
constructor(handle, pid, autoClose = true) {
|
|
14
16
|
super(handle, autoClose);
|
|
15
17
|
this._pid = pid ?? Kernel32Impl.GetProcessId(handle);
|
|
18
|
+
this.memory = new ProcessMemory(this);
|
|
16
19
|
}
|
|
17
20
|
static open(pid, access = ProcessAccess.ALL_ACCESS) {
|
|
18
21
|
processLog.debug(`Opening process ${pid} with access ${access}`);
|
|
@@ -23,30 +26,6 @@ export class Process extends Handle {
|
|
|
23
26
|
}
|
|
24
27
|
return new Process(handle, pid);
|
|
25
28
|
}
|
|
26
|
-
readMemory(address, size) {
|
|
27
|
-
if (!this.isValid())
|
|
28
|
-
throw new Error('Process handle is closed');
|
|
29
|
-
const buf = Buffer.alloc(size);
|
|
30
|
-
const success = Kernel32Impl.ReadProcessMemory(this._handle, address, buf, size, null);
|
|
31
|
-
if (!success) {
|
|
32
|
-
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
33
|
-
processLog.error(`ReadProcessMemory failed at 0x${addrHex}`);
|
|
34
|
-
throw new Error(`ReadProcessMemory failed at 0x${addrHex}`);
|
|
35
|
-
}
|
|
36
|
-
return buf;
|
|
37
|
-
}
|
|
38
|
-
read = this.readMemory;
|
|
39
|
-
writeMemory(address, buffer) {
|
|
40
|
-
if (!this.isValid())
|
|
41
|
-
throw new Error('Process handle is closed');
|
|
42
|
-
const success = Kernel32Impl.WriteProcessMemory(this._handle, address, buffer, buffer.length, null);
|
|
43
|
-
if (!success) {
|
|
44
|
-
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
45
|
-
processLog.error(`WriteProcessMemory failed at 0x${addrHex}`);
|
|
46
|
-
throw new Error(`WriteProcessMemory failed at 0x${addrHex}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
write = this.writeMemory;
|
|
50
29
|
createThread(startAddress, parameter = null, stackSize = 0, flags = ThreadCreationFlags.IMMEDIATE, attributes = null) {
|
|
51
30
|
if (!this.isValid())
|
|
52
31
|
throw new Error('Process handle is closed');
|
|
@@ -58,106 +37,63 @@ export class Process extends Handle {
|
|
|
58
37
|
}
|
|
59
38
|
return new Thread(handle);
|
|
60
39
|
}
|
|
61
|
-
virtualQuery(address) {
|
|
62
|
-
if (!this.isValid())
|
|
63
|
-
throw new Error('Process handle is closed');
|
|
64
|
-
const buf = Buffer.alloc(MBI_SIZE);
|
|
65
|
-
const result = Kernel32Impl.VirtualQueryEx(this._handle, address, buf, MBI_SIZE);
|
|
66
|
-
if (result === 0) {
|
|
67
|
-
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
68
|
-
processLog.error(`VirtualQueryEx failed at 0x${addrHex}`);
|
|
69
|
-
throw new Error(`VirtualQueryEx failed at 0x${addrHex}`);
|
|
70
|
-
}
|
|
71
|
-
return ffi.decode(buf, MEMORY_BASIC_INFORMATION);
|
|
72
|
-
}
|
|
73
|
-
query = this.virtualQuery;
|
|
74
|
-
/**
|
|
75
|
-
* Allocates memory in the process.
|
|
76
|
-
*/
|
|
77
|
-
alloc(size, address = null, allocationType = MemoryState.COMMIT | MemoryState.RESERVE, protection = MemoryProtection.READWRITE) {
|
|
78
|
-
if (!this.isValid())
|
|
79
|
-
throw new Error('Process handle is closed');
|
|
80
|
-
const result = Kernel32Impl.VirtualAllocEx(this._handle, address, size, allocationType, protection);
|
|
81
|
-
if (!result) {
|
|
82
|
-
processLog.error(`VirtualAllocEx failed (PID: ${this._pid}, size: ${size})`);
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Frees memory in the process.
|
|
88
|
-
*/
|
|
89
|
-
free(address, size = 0, freeType = MemoryFreeType.RELEASE) {
|
|
90
|
-
if (!this.isValid())
|
|
91
|
-
throw new Error('Process handle is closed');
|
|
92
|
-
const result = Kernel32Impl.VirtualFreeEx(this._handle, address, size, freeType);
|
|
93
|
-
if (!result) {
|
|
94
|
-
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
95
|
-
processLog.error(`VirtualFreeEx failed at 0x${addrHex}`);
|
|
96
|
-
}
|
|
97
|
-
return !!result;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Finds a pattern in a specific memory range
|
|
101
|
-
* @param signature Pattern string (e.g. "55 8B EC ?? 56")
|
|
102
|
-
* @param start Start address
|
|
103
|
-
* @param size Scan size
|
|
104
|
-
*/
|
|
105
|
-
findPatternInRange(signature, start, size) {
|
|
106
|
-
const results = this.findAllPatternsInRange(signature, start, size, 1);
|
|
107
|
-
return results[0] ?? null;
|
|
108
|
-
}
|
|
109
40
|
/**
|
|
110
|
-
* Finds
|
|
41
|
+
* Finds pattern matches in a specific memory range.
|
|
42
|
+
* Configure limit on the Pattern: `.limit(1)` for first match only.
|
|
111
43
|
*/
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
44
|
+
*findPatternInRangeGenerator(pattern, start, size, module) {
|
|
45
|
+
const end = start + BigInt(size);
|
|
46
|
+
let current = start;
|
|
47
|
+
try {
|
|
48
|
+
while (current < end) {
|
|
49
|
+
const mbi = this.memory.query(current);
|
|
50
|
+
const regionBase = BigInt(mbi.BaseAddress);
|
|
51
|
+
const regionSize = BigInt(mbi.RegionSize);
|
|
52
|
+
const regionEnd = regionBase + regionSize;
|
|
53
|
+
const isReadable = mbi.State === MemoryState.COMMIT &&
|
|
54
|
+
!(mbi.Protect & MemoryProtection.GUARD) &&
|
|
55
|
+
!!(mbi.Protect & pattern.protect);
|
|
56
|
+
if (isReadable) {
|
|
57
|
+
const scanStart = current > regionBase ? current : regionBase;
|
|
58
|
+
const scanEnd = end < regionEnd ? end : regionEnd;
|
|
59
|
+
const scanSize = Number(scanEnd - scanStart);
|
|
60
|
+
if (scanSize >= pattern.length) {
|
|
61
|
+
for (const ptr of Scanner.scan(scanStart, scanSize, pattern)) {
|
|
62
|
+
yield new ScanEntry(ptr, module);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (regionEnd <= current)
|
|
67
|
+
break;
|
|
68
|
+
current = regionEnd;
|
|
69
|
+
}
|
|
115
70
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const searchLimit = limit > 0 ? limit : pattern.limit > 0 ? pattern.limit : -1;
|
|
119
|
-
const hasLimit = searchLimit !== -1;
|
|
120
|
-
for (const addr of Scanner.scan(start, size, pattern)) {
|
|
121
|
-
results.push(addr);
|
|
122
|
-
if (hasLimit && results.length >= searchLimit)
|
|
123
|
-
break;
|
|
71
|
+
catch {
|
|
72
|
+
// Range partially unmapped or error
|
|
124
73
|
}
|
|
125
|
-
return results;
|
|
126
74
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return results[0] ?? null;
|
|
75
|
+
findPatternInRange(signature, start, size, module) {
|
|
76
|
+
const pattern = signature instanceof Pattern ? signature : new Pattern(signature);
|
|
77
|
+
if (pattern.protect === 0)
|
|
78
|
+
pattern.defaultProtect();
|
|
79
|
+
return new ScanResult(this.findPatternInRangeGenerator(pattern, start, size, module), pattern);
|
|
133
80
|
}
|
|
134
81
|
/**
|
|
135
|
-
* Finds
|
|
82
|
+
* Finds pattern matches in all committed readable memory of the process.
|
|
83
|
+
* Configure limit and protect filter on the Pattern object.
|
|
136
84
|
*/
|
|
137
|
-
|
|
138
|
-
const results = [];
|
|
85
|
+
*findPatternGenerator(pattern) {
|
|
139
86
|
let address = 0n;
|
|
140
|
-
const pattern = signature instanceof Pattern ? signature : new Pattern(signature, limit);
|
|
141
|
-
const searchLimit = limit > 0 ? limit : pattern.limit > 0 ? pattern.limit : -1;
|
|
142
|
-
const hasLimit = searchLimit !== -1;
|
|
143
|
-
// Max address for x64 user-space: 0x7FFFFFFFFFFF
|
|
144
87
|
const maxAddress = 0x7fffffffffffn;
|
|
145
88
|
try {
|
|
146
89
|
while (address < maxAddress) {
|
|
147
|
-
const mbi = this.
|
|
148
|
-
// Region is committed, not guarded, and has some form of read access
|
|
90
|
+
const mbi = this.memory.query(address);
|
|
149
91
|
const isReadable = mbi.State === MemoryState.COMMIT &&
|
|
150
92
|
!(mbi.Protect & MemoryProtection.GUARD) &&
|
|
151
|
-
(mbi.Protect &
|
|
152
|
-
mbi.Protect & MemoryProtection.READWRITE ||
|
|
153
|
-
mbi.Protect & MemoryProtection.EXECUTE_READ ||
|
|
154
|
-
mbi.Protect & MemoryProtection.EXECUTE_READWRITE);
|
|
93
|
+
!!(mbi.Protect & pattern.protect);
|
|
155
94
|
if (isReadable) {
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
results.push(...regionResults);
|
|
159
|
-
if (hasLimit && results.length >= searchLimit)
|
|
160
|
-
break;
|
|
95
|
+
const regionResult = this.findPatternInRange(pattern, BigInt(mbi.BaseAddress), Number(mbi.RegionSize));
|
|
96
|
+
yield* regionResult;
|
|
161
97
|
}
|
|
162
98
|
const nextAddress = BigInt(mbi.BaseAddress) + BigInt(mbi.RegionSize);
|
|
163
99
|
if (nextAddress <= address)
|
|
@@ -168,53 +104,43 @@ export class Process extends Handle {
|
|
|
168
104
|
catch {
|
|
169
105
|
// Loop finished
|
|
170
106
|
}
|
|
171
|
-
return results;
|
|
172
107
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
*/
|
|
180
|
-
findPatternFromModules(signature, moduleNames = []) {
|
|
181
|
-
const results = this.findAllPatternsFromModules(signature, moduleNames, 1);
|
|
182
|
-
return results[0] ?? null;
|
|
108
|
+
findPattern(signature) {
|
|
109
|
+
const pattern = signature instanceof Pattern ? signature : new Pattern(signature);
|
|
110
|
+
// Ensure protect mask is set before filtering regions
|
|
111
|
+
if (pattern.protect === 0)
|
|
112
|
+
pattern.defaultProtect();
|
|
113
|
+
return new ScanResult(this.findPatternGenerator(pattern), pattern);
|
|
183
114
|
}
|
|
184
115
|
/**
|
|
185
|
-
* Finds
|
|
116
|
+
* Finds pattern matches across specified modules (default: all static modules).
|
|
117
|
+
* Each entry in the result is tagged with its source module.
|
|
118
|
+
* Configure limit and protect filter on the Pattern object.
|
|
186
119
|
*/
|
|
187
|
-
|
|
188
|
-
// Lazy load Module to prevent circular dependencies at the top level
|
|
120
|
+
*findPatternFromModulesGenerator(pattern, moduleNames) {
|
|
189
121
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
190
|
-
const { Module
|
|
191
|
-
if (this._pid !== Kernel32Impl.GetCurrentProcessId()) {
|
|
192
|
-
throw new Error('Module scanning is only supported for the current process');
|
|
193
|
-
}
|
|
194
|
-
if (moduleNames.length === 0) {
|
|
195
|
-
moduleNames = Object.values(STATIC_MODULES);
|
|
196
|
-
}
|
|
197
|
-
const pattern = signature instanceof Pattern ? signature : new Pattern(signature, limit);
|
|
198
|
-
const results = [];
|
|
199
|
-
const searchLimit = limit > 0 ? limit : pattern.limit > 0 ? pattern.limit : -1;
|
|
200
|
-
const hasLimit = searchLimit !== -1;
|
|
122
|
+
const { Module } = require('./module');
|
|
201
123
|
for (const name of moduleNames) {
|
|
202
124
|
try {
|
|
203
125
|
const mod = Module.get(name);
|
|
204
|
-
|
|
205
|
-
for (const addr of modResults) {
|
|
206
|
-
results.push(addr);
|
|
207
|
-
if (hasLimit && results.length >= searchLimit)
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
if (hasLimit && results.length >= searchLimit)
|
|
211
|
-
break;
|
|
126
|
+
yield* mod.findPattern(pattern);
|
|
212
127
|
}
|
|
213
128
|
catch (err) {
|
|
214
|
-
processLog.warn(`
|
|
129
|
+
processLog.warn(`findPatternFromModules: Failed to process module ${name}: ${err}`);
|
|
215
130
|
}
|
|
216
131
|
}
|
|
217
|
-
|
|
132
|
+
}
|
|
133
|
+
findPatternFromModules(signature, moduleNames = []) {
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
135
|
+
const { STATIC_MODULES } = require('./module');
|
|
136
|
+
if (this._pid !== Kernel32Impl.GetCurrentProcessId()) {
|
|
137
|
+
throw new Error('Module scanning is only supported for the current process');
|
|
138
|
+
}
|
|
139
|
+
if (moduleNames.length === 0) {
|
|
140
|
+
moduleNames = Object.values(STATIC_MODULES);
|
|
141
|
+
}
|
|
142
|
+
const pattern = signature instanceof Pattern ? signature : new Pattern(signature);
|
|
143
|
+
return new ScanResult(this.findPatternFromModulesGenerator(pattern, moduleNames), pattern);
|
|
218
144
|
}
|
|
219
145
|
static current() {
|
|
220
146
|
return currentProcess;
|
|
@@ -230,25 +156,11 @@ export class CurrentProcess extends Process {
|
|
|
230
156
|
constructor() {
|
|
231
157
|
// Current process uses a pseudo-handle that doesn't need closing
|
|
232
158
|
super(Kernel32Impl.GetCurrentProcess(), Kernel32Impl.GetCurrentProcessId());
|
|
159
|
+
this.memory = new CurrentProcessMemory(this);
|
|
233
160
|
}
|
|
234
161
|
createThread(startAddress, parameter, stackSize = 0, flags, attributes) {
|
|
235
162
|
return Thread.create(startAddress, parameter, stackSize, flags, attributes);
|
|
236
163
|
}
|
|
237
|
-
alloc(size, address = null, allocationType = MemoryState.COMMIT | MemoryState.RESERVE, protection = MemoryProtection.READWRITE) {
|
|
238
|
-
const result = Kernel32Impl.VirtualAlloc(address, size, allocationType, protection);
|
|
239
|
-
if (!result) {
|
|
240
|
-
processLog.error(`VirtualAlloc failed (size: ${size})`);
|
|
241
|
-
}
|
|
242
|
-
return result;
|
|
243
|
-
}
|
|
244
|
-
free(address, size = 0, freeType = MemoryFreeType.RELEASE) {
|
|
245
|
-
const result = Kernel32Impl.VirtualFree(address, size, freeType);
|
|
246
|
-
if (!result) {
|
|
247
|
-
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
248
|
-
processLog.error(`VirtualFree failed at 0x${addrHex}`);
|
|
249
|
-
}
|
|
250
|
-
return !!result;
|
|
251
|
-
}
|
|
252
164
|
close() {
|
|
253
165
|
this._handle = null;
|
|
254
166
|
}
|
|
@@ -266,4 +178,225 @@ export const currentProcess = new Proxy({}, {
|
|
|
266
178
|
return CurrentProcess.prototype;
|
|
267
179
|
},
|
|
268
180
|
});
|
|
181
|
+
/**
|
|
182
|
+
* Manages memory operations for a given process handle.
|
|
183
|
+
*/
|
|
184
|
+
export class ProcessMemory {
|
|
185
|
+
process;
|
|
186
|
+
// eslint-disable-next-line no-unused-vars
|
|
187
|
+
constructor(process) {
|
|
188
|
+
this.process = process;
|
|
189
|
+
}
|
|
190
|
+
read(address, size) {
|
|
191
|
+
if (!this.process.isValid())
|
|
192
|
+
throw new Error('Process handle is closed');
|
|
193
|
+
const buf = Buffer.alloc(size);
|
|
194
|
+
const success = Kernel32Impl.ReadProcessMemory(this.process.handle, address, buf, size, null);
|
|
195
|
+
if (!success) {
|
|
196
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
197
|
+
processLog.error(`ReadProcessMemory failed at 0x${addrHex}`);
|
|
198
|
+
throw new Error(`ReadProcessMemory failed at 0x${addrHex}`);
|
|
199
|
+
}
|
|
200
|
+
return buf;
|
|
201
|
+
}
|
|
202
|
+
readMemory = this.read;
|
|
203
|
+
write(address, buffer) {
|
|
204
|
+
if (!this.process.isValid())
|
|
205
|
+
throw new Error('Process handle is closed');
|
|
206
|
+
const success = Kernel32Impl.WriteProcessMemory(this.process.handle, address, buffer, buffer.length, null);
|
|
207
|
+
if (!success) {
|
|
208
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
209
|
+
processLog.error(`WriteProcessMemory failed at 0x${addrHex}`);
|
|
210
|
+
throw new Error(`WriteProcessMemory failed at 0x${addrHex}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
writeMemory = this.write;
|
|
214
|
+
readInt8(address) {
|
|
215
|
+
return this.read(address, 1).readInt8(0);
|
|
216
|
+
}
|
|
217
|
+
writeInt8(address, value) {
|
|
218
|
+
const buf = Buffer.alloc(1);
|
|
219
|
+
buf.writeInt8(value, 0);
|
|
220
|
+
this.write(address, buf);
|
|
221
|
+
}
|
|
222
|
+
readUInt8(address) {
|
|
223
|
+
return this.read(address, 1).readUInt8(0);
|
|
224
|
+
}
|
|
225
|
+
writeUInt8(address, value) {
|
|
226
|
+
const buf = Buffer.alloc(1);
|
|
227
|
+
buf.writeUInt8(value, 0);
|
|
228
|
+
this.write(address, buf);
|
|
229
|
+
}
|
|
230
|
+
readInt16(address) {
|
|
231
|
+
return this.read(address, 2).readInt16LE(0);
|
|
232
|
+
}
|
|
233
|
+
writeInt16(address, value) {
|
|
234
|
+
const buf = Buffer.alloc(2);
|
|
235
|
+
buf.writeInt16LE(value, 0);
|
|
236
|
+
this.write(address, buf);
|
|
237
|
+
}
|
|
238
|
+
readUInt16(address) {
|
|
239
|
+
return this.read(address, 2).readUInt16LE(0);
|
|
240
|
+
}
|
|
241
|
+
writeUInt16(address, value) {
|
|
242
|
+
const buf = Buffer.alloc(2);
|
|
243
|
+
buf.writeUInt16LE(value, 0);
|
|
244
|
+
this.write(address, buf);
|
|
245
|
+
}
|
|
246
|
+
readInt32(address) {
|
|
247
|
+
return this.read(address, 4).readInt32LE(0);
|
|
248
|
+
}
|
|
249
|
+
writeInt32(address, value) {
|
|
250
|
+
const buf = Buffer.alloc(4);
|
|
251
|
+
buf.writeInt32LE(value, 0);
|
|
252
|
+
this.write(address, buf);
|
|
253
|
+
}
|
|
254
|
+
readUInt32(address) {
|
|
255
|
+
return this.read(address, 4).readUInt32LE(0);
|
|
256
|
+
}
|
|
257
|
+
writeUInt32(address, value) {
|
|
258
|
+
const buf = Buffer.alloc(4);
|
|
259
|
+
buf.writeUInt32LE(value, 0);
|
|
260
|
+
this.write(address, buf);
|
|
261
|
+
}
|
|
262
|
+
readInt64(address) {
|
|
263
|
+
return this.read(address, 8).readBigInt64LE(0);
|
|
264
|
+
}
|
|
265
|
+
writeInt64(address, value) {
|
|
266
|
+
const buf = Buffer.alloc(8);
|
|
267
|
+
buf.writeBigInt64LE(value, 0);
|
|
268
|
+
this.write(address, buf);
|
|
269
|
+
}
|
|
270
|
+
readUInt64(address) {
|
|
271
|
+
return this.read(address, 8).readBigUInt64LE(0);
|
|
272
|
+
}
|
|
273
|
+
writeUInt64(address, value) {
|
|
274
|
+
const buf = Buffer.alloc(8);
|
|
275
|
+
buf.writeBigUInt64LE(value, 0);
|
|
276
|
+
this.write(address, buf);
|
|
277
|
+
}
|
|
278
|
+
readFloat(address) {
|
|
279
|
+
return this.read(address, 4).readFloatLE(0);
|
|
280
|
+
}
|
|
281
|
+
writeFloat(address, value) {
|
|
282
|
+
const buf = Buffer.alloc(4);
|
|
283
|
+
buf.writeFloatLE(value, 0);
|
|
284
|
+
this.write(address, buf);
|
|
285
|
+
}
|
|
286
|
+
readDouble(address) {
|
|
287
|
+
return this.read(address, 8).readDoubleLE(0);
|
|
288
|
+
}
|
|
289
|
+
writeDouble(address, value) {
|
|
290
|
+
const buf = Buffer.alloc(8);
|
|
291
|
+
buf.writeDoubleLE(value, 0);
|
|
292
|
+
this.write(address, buf);
|
|
293
|
+
}
|
|
294
|
+
readString(address, length, encoding = 'utf8') {
|
|
295
|
+
const buf = this.read(address, length);
|
|
296
|
+
// Trim null byte if exists at the end
|
|
297
|
+
const nullIdx = buf.indexOf(0);
|
|
298
|
+
if (nullIdx !== -1) {
|
|
299
|
+
return buf.toString(encoding, 0, nullIdx);
|
|
300
|
+
}
|
|
301
|
+
return buf.toString(encoding);
|
|
302
|
+
}
|
|
303
|
+
writeString(address, value, encoding = 'utf8') {
|
|
304
|
+
const buf = Buffer.from(value + '\0', encoding);
|
|
305
|
+
this.write(address, buf);
|
|
306
|
+
}
|
|
307
|
+
query(address) {
|
|
308
|
+
if (!this.process.isValid())
|
|
309
|
+
throw new Error('Process handle is closed');
|
|
310
|
+
const buf = Buffer.alloc(MBI_SIZE);
|
|
311
|
+
const result = Kernel32Impl.VirtualQueryEx(this.process.handle, address, buf, MBI_SIZE);
|
|
312
|
+
if (result === 0) {
|
|
313
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
314
|
+
processLog.error(`VirtualQueryEx failed at 0x${addrHex}`);
|
|
315
|
+
throw new Error(`VirtualQueryEx failed at 0x${addrHex}`);
|
|
316
|
+
}
|
|
317
|
+
return ffi.decode(buf, MEMORY_BASIC_INFORMATION);
|
|
318
|
+
}
|
|
319
|
+
virtualQuery = this.query;
|
|
320
|
+
/**
|
|
321
|
+
* Allocates memory in the process.
|
|
322
|
+
*/
|
|
323
|
+
alloc(size, address = null, allocationType = MemoryState.COMMIT | MemoryState.RESERVE, protection = MemoryProtection.READWRITE) {
|
|
324
|
+
if (!this.process.isValid())
|
|
325
|
+
throw new Error('Process handle is closed');
|
|
326
|
+
const result = Kernel32Impl.VirtualAllocEx(this.process.handle, address, size, allocationType, protection);
|
|
327
|
+
if (!result) {
|
|
328
|
+
processLog.error(`VirtualAllocEx failed (PID: ${this.process.pid}, size: ${size})`);
|
|
329
|
+
}
|
|
330
|
+
return result;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Frees memory in the process.
|
|
334
|
+
*/
|
|
335
|
+
free(address, size = 0, freeType = MemoryFreeType.RELEASE) {
|
|
336
|
+
if (!this.process.isValid())
|
|
337
|
+
throw new Error('Process handle is closed');
|
|
338
|
+
const result = Kernel32Impl.VirtualFreeEx(this.process.handle, address, size, freeType);
|
|
339
|
+
if (!result) {
|
|
340
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
341
|
+
processLog.error(`VirtualFreeEx failed at 0x${addrHex}`);
|
|
342
|
+
}
|
|
343
|
+
return !!result;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Changes the memory protection of a region of memory.
|
|
347
|
+
*/
|
|
348
|
+
protect(address, size, newProtect) {
|
|
349
|
+
if (!this.process.isValid())
|
|
350
|
+
throw new Error('Process handle is closed');
|
|
351
|
+
const oldProtectBuf = Buffer.alloc(4);
|
|
352
|
+
const result = Kernel32Impl.VirtualProtectEx(this.process.handle, address, size, newProtect, oldProtectBuf);
|
|
353
|
+
if (!result) {
|
|
354
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
355
|
+
processLog.error(`VirtualProtectEx failed at 0x${addrHex}`);
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
return oldProtectBuf.readUInt32LE(0);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Optimizes memory operations natively for the current running process.
|
|
363
|
+
*/
|
|
364
|
+
export class CurrentProcessMemory extends ProcessMemory {
|
|
365
|
+
alloc(size, address = null, allocationType = MemoryState.COMMIT | MemoryState.RESERVE, protection = MemoryProtection.READWRITE) {
|
|
366
|
+
const result = Kernel32Impl.VirtualAlloc(address, size, allocationType, protection);
|
|
367
|
+
if (!result) {
|
|
368
|
+
processLog.error(`VirtualAlloc failed (size: ${size})`);
|
|
369
|
+
}
|
|
370
|
+
return result;
|
|
371
|
+
}
|
|
372
|
+
free(address, size = 0, freeType = MemoryFreeType.RELEASE) {
|
|
373
|
+
const result = Kernel32Impl.VirtualFree(address, size, freeType);
|
|
374
|
+
if (!result) {
|
|
375
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
376
|
+
processLog.error(`VirtualFree failed at 0x${addrHex}`);
|
|
377
|
+
}
|
|
378
|
+
return !!result;
|
|
379
|
+
}
|
|
380
|
+
protect(address, size, newProtect) {
|
|
381
|
+
const oldProtectBuf = Buffer.alloc(4);
|
|
382
|
+
const result = Kernel32Impl.VirtualProtect(address, BigInt(size), newProtect, oldProtectBuf);
|
|
383
|
+
if (!result) {
|
|
384
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
385
|
+
processLog.error(`VirtualProtect failed at 0x${addrHex}`);
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
return oldProtectBuf.readUInt32LE(0);
|
|
389
|
+
}
|
|
390
|
+
query(address) {
|
|
391
|
+
const buf = Buffer.alloc(MBI_SIZE);
|
|
392
|
+
const result = Kernel32Impl.VirtualQuery(address, buf, MBI_SIZE);
|
|
393
|
+
if (result === 0) {
|
|
394
|
+
const addrHex = ffi.address(address).toString(16).toUpperCase();
|
|
395
|
+
processLog.error(`VirtualQuery failed at 0x${addrHex}`);
|
|
396
|
+
throw new Error(`VirtualQuery failed at 0x${addrHex}`);
|
|
397
|
+
}
|
|
398
|
+
return ffi.decode(buf, MEMORY_BASIC_INFORMATION);
|
|
399
|
+
}
|
|
400
|
+
virtualQuery = this.query;
|
|
401
|
+
}
|
|
269
402
|
//# sourceMappingURL=process.js.map
|
package/dist/process.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Pattern } from './pattern';
|
|
2
|
+
/**
|
|
3
|
+
* A single pattern match entry.
|
|
4
|
+
* Stores the decoded numeric address (bigint) of the match.
|
|
5
|
+
* Call `toAddress()` to retrieve it — consistent with how ffi.address() works.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ScanEntry {
|
|
8
|
+
readonly address: bigint;
|
|
9
|
+
readonly module?: import('./module').Module;
|
|
10
|
+
constructor(address: bigint, module?: import('./module').Module);
|
|
11
|
+
toAddress(): bigint;
|
|
12
|
+
toString(): string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result of a pattern scan operation.
|
|
16
|
+
* Lazily evaluates the underlying generator and caches findings.
|
|
17
|
+
* Supports taking matches one-by-one or materializing the full result.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const result = currentProcess.findPattern('55 8B EC');
|
|
21
|
+
* const firstMatch = result.first(); // Scans until 1 match is found
|
|
22
|
+
* const allMatches = result.all(); // Fully exhausts the generator up to pattern config limit
|
|
23
|
+
*/
|
|
24
|
+
export declare class ScanResult implements Iterable<ScanEntry> {
|
|
25
|
+
readonly pattern: Pattern;
|
|
26
|
+
private generator;
|
|
27
|
+
private _cached;
|
|
28
|
+
private _isExhausted;
|
|
29
|
+
constructor(iterable: Iterable<ScanEntry>, pattern: Pattern);
|
|
30
|
+
/**
|
|
31
|
+
* Evaluates the generator up to 'n' elements and caches them internally.
|
|
32
|
+
*/
|
|
33
|
+
private pump;
|
|
34
|
+
/** Gets the first match and stops scanning further unless requested again. */
|
|
35
|
+
first(): ScanEntry | undefined;
|
|
36
|
+
/** Gets up to N matches. Scans only as much memory as needed. */
|
|
37
|
+
take(n: number): ScanEntry[];
|
|
38
|
+
/** Evaluates the scan fully, up to the pattern's configured limit. */
|
|
39
|
+
all(): ScanEntry[];
|
|
40
|
+
/** Shortcut to strictly evaluate the scan based on the limit and return the array. */
|
|
41
|
+
get entries(): ScanEntry[];
|
|
42
|
+
/** Number of matched entries (fully evaluates scan). */
|
|
43
|
+
get length(): number;
|
|
44
|
+
/** All matched addresses directly derived from entries. */
|
|
45
|
+
get addresses(): bigint[];
|
|
46
|
+
/** Combines another ScanResult efficiently. */
|
|
47
|
+
merge(other: ScanResult): ScanResult;
|
|
48
|
+
/**
|
|
49
|
+
* Lazily iterates over available entries, fetching from the scan engine only when needed.
|
|
50
|
+
* Bound efficiently by the limit configured on the `Pattern`.
|
|
51
|
+
*/
|
|
52
|
+
[Symbol.iterator](): Iterator<ScanEntry>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=scan-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-result.d.ts","sourceRoot":"","sources":["../src/scan-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;GAIG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,UAAU,EAAE,MAAM,CAAC;gBAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,UAAU,EAAE,MAAM;IAK/D,SAAS,IAAI,MAAM;IAInB,QAAQ,IAAI,MAAM;CAMnB;AAED;;;;;;;;;GASG;AACH,qBAAa,UAAW,YAAW,QAAQ,CAAC,SAAS,CAAC;IACpD,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO;IAK3D;;OAEG;IACH,OAAO,CAAC,IAAI;IAWZ,8EAA8E;IAC9E,KAAK,IAAI,SAAS,GAAG,SAAS;IAK9B,iEAAiE;IACjE,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IAK5B,sEAAsE;IACtE,GAAG,IAAI,SAAS,EAAE;IAWlB,sFAAsF;IACtF,IAAI,OAAO,IAAI,SAAS,EAAE,CAEzB;IAED,wDAAwD;IACxD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,2DAA2D;IAC3D,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAED,+CAA+C;IAC/C,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAUpC;;;OAGG;IACF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC;CAuB1C"}
|