@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/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,mBAAmB,2BAA2B,CAAC;AAE/C,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,mBAAmB,2BAA2B,CAAC;AAE/C,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
package/dist/module.d.ts
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import { type HMODULE, type INT_PTR } from '@cheatron/native-bindings';
|
|
1
|
+
import { type HMODULE, type INT_PTR, type ModuleInfo } from '@cheatron/native-bindings';
|
|
2
2
|
import { Handle } from './handle';
|
|
3
3
|
import { Pattern } from './pattern';
|
|
4
|
+
import { ScanResult } from './scan-result';
|
|
4
5
|
export declare const STATIC_MODULES: Record<string, string>;
|
|
5
6
|
/**
|
|
6
7
|
* Represents a loaded module
|
|
7
8
|
*/
|
|
8
9
|
export declare class Module extends Handle {
|
|
9
10
|
protected _name: string;
|
|
10
|
-
|
|
11
|
+
readonly base: bigint;
|
|
12
|
+
readonly size: number;
|
|
13
|
+
readonly entryPoint: bigint;
|
|
14
|
+
readonly end: bigint;
|
|
15
|
+
readonly info: ModuleInfo;
|
|
16
|
+
static readonly ntdll: Module;
|
|
11
17
|
static readonly kernel32: Module;
|
|
18
|
+
static readonly kernelbase: Module;
|
|
12
19
|
static readonly crt: Module;
|
|
13
20
|
private static _staticCache;
|
|
14
21
|
constructor(handle: HMODULE, name: string);
|
|
@@ -21,25 +28,11 @@ export declare class Module extends Handle {
|
|
|
21
28
|
getProcAddress(procName: string): INT_PTR;
|
|
22
29
|
get name(): string;
|
|
23
30
|
/**
|
|
24
|
-
*
|
|
31
|
+
* Finds pattern matches within this module.
|
|
32
|
+
* Configure limit and protect filter on the Pattern object.
|
|
33
|
+
* @returns ScanResult with each entry tagged with this module
|
|
25
34
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* Gets the size of the module image
|
|
29
|
-
*/
|
|
30
|
-
get size(): number;
|
|
31
|
-
/**
|
|
32
|
-
* Gets the entry point of the module
|
|
33
|
-
*/
|
|
34
|
-
get entryPoint(): bigint;
|
|
35
|
-
/**
|
|
36
|
-
* Finds a pattern within this module
|
|
37
|
-
* @param signature Pattern string
|
|
38
|
-
*/
|
|
39
|
-
findPattern(signature: string | Pattern): bigint | null;
|
|
40
|
-
/**
|
|
41
|
-
* Finds all matches of a pattern within this module
|
|
42
|
-
*/
|
|
43
|
-
findAllPatterns(signature: string | Pattern, limit?: number): bigint[];
|
|
35
|
+
findPattern(signature: string | Pattern): ScanResult;
|
|
36
|
+
toString(): string;
|
|
44
37
|
}
|
|
45
38
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKjD,CAAC;AAEF;;GAEG;AACH,qBAAa,MAAO,SAAQ,MAAM;IAChC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAExB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,IAAI,EAAE,UAAU,CAAC;IAGjC,gBAAwB,KAAK,EAAE,MAAM,CAAC;IACtC,gBAAwB,QAAQ,EAAE,MAAM,CAAC;IACzC,gBAAwB,UAAU,EAAE,MAAM,CAAC;IAC3C,gBAAwB,GAAG,EAAE,MAAM,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAC,YAAY,CAA8B;gBAE7C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM;IAyBzC;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA2BhC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAazC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU;IAW3C,QAAQ,IAAI,MAAM;CAG5B"}
|
package/dist/module.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { Kernel32Impl, PsapiImpl, MODULEINFO_SIZE, } from '@cheatron/native-bindings';
|
|
1
|
+
import { ffi, Kernel32Impl, PsapiImpl, MODULEINFO, MODULEINFO_SIZE, } from '@cheatron/native-bindings';
|
|
2
2
|
import { Handle } from './handle';
|
|
3
3
|
import { log } from './logger';
|
|
4
|
-
import { Scanner } from './scanner';
|
|
5
4
|
import { Pattern } from './pattern';
|
|
5
|
+
import { ScanResult } from './scan-result';
|
|
6
6
|
const moduleLog = log.child('Module');
|
|
7
7
|
export const STATIC_MODULES = {
|
|
8
|
+
ntdll: 'ntdll.dll',
|
|
8
9
|
kernel32: 'kernel32.dll',
|
|
10
|
+
kernelbase: 'kernelbase.dll',
|
|
9
11
|
crt: 'msvcrt.dll',
|
|
10
12
|
};
|
|
11
13
|
/**
|
|
@@ -13,18 +15,27 @@ export const STATIC_MODULES = {
|
|
|
13
15
|
*/
|
|
14
16
|
export class Module extends Handle {
|
|
15
17
|
_name;
|
|
16
|
-
|
|
18
|
+
base;
|
|
19
|
+
size;
|
|
20
|
+
entryPoint;
|
|
21
|
+
end;
|
|
22
|
+
info;
|
|
17
23
|
static _staticCache = {};
|
|
18
24
|
constructor(handle, name) {
|
|
19
25
|
// Module handles from GetModuleHandle should not be closed with CloseHandle
|
|
20
26
|
super(handle, false);
|
|
21
27
|
this._name = name;
|
|
22
28
|
const processHandle = Kernel32Impl.GetCurrentProcess();
|
|
23
|
-
|
|
24
|
-
const success = PsapiImpl.GetModuleInformation(processHandle, handle,
|
|
29
|
+
const moduleInfoBuffer = Buffer.alloc(MODULEINFO_SIZE);
|
|
30
|
+
const success = PsapiImpl.GetModuleInformation(processHandle, handle, moduleInfoBuffer, MODULEINFO_SIZE);
|
|
25
31
|
if (!success) {
|
|
26
32
|
throw new Error(`Failed to get module information for ${name}`);
|
|
27
33
|
}
|
|
34
|
+
this.info = ffi.decode(moduleInfoBuffer, MODULEINFO);
|
|
35
|
+
this.base = BigInt(this.info.lpBaseOfDll);
|
|
36
|
+
this.size = this.info.SizeOfImage;
|
|
37
|
+
this.entryPoint = BigInt(this.info.EntryPoint);
|
|
38
|
+
this.end = this.base + BigInt(this.size);
|
|
28
39
|
}
|
|
29
40
|
/**
|
|
30
41
|
* Gets a module handle for the specified module name
|
|
@@ -64,44 +75,17 @@ export class Module extends Handle {
|
|
|
64
75
|
return this._name;
|
|
65
76
|
}
|
|
66
77
|
/**
|
|
67
|
-
*
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return this._info.readBigUInt64LE(0);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Gets the size of the module image
|
|
74
|
-
*/
|
|
75
|
-
get size() {
|
|
76
|
-
return this._info.readUInt32LE(8);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Gets the entry point of the module
|
|
80
|
-
*/
|
|
81
|
-
get entryPoint() {
|
|
82
|
-
return this._info.readBigUInt64LE(16);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Finds a pattern within this module
|
|
86
|
-
* @param signature Pattern string
|
|
78
|
+
* Finds pattern matches within this module.
|
|
79
|
+
* Configure limit and protect filter on the Pattern object.
|
|
80
|
+
* @returns ScanResult with each entry tagged with this module
|
|
87
81
|
*/
|
|
88
82
|
findPattern(signature) {
|
|
89
|
-
|
|
90
|
-
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
84
|
+
const { CurrentProcess } = require('./process');
|
|
85
|
+
return CurrentProcess.current().findPatternInRange(signature, this.base, this.size, this);
|
|
91
86
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
*/
|
|
95
|
-
findAllPatterns(signature, limit = 0) {
|
|
96
|
-
const pattern = signature instanceof Pattern ? signature : new Pattern(signature, limit);
|
|
97
|
-
const results = [];
|
|
98
|
-
const searchLimit = limit > 0 ? limit : pattern.limit > 0 ? pattern.limit : Infinity;
|
|
99
|
-
for (const addr of Scanner.scan(this.base, this.size, pattern)) {
|
|
100
|
-
results.push(addr);
|
|
101
|
-
if (results.length >= searchLimit)
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
return results;
|
|
87
|
+
toString() {
|
|
88
|
+
return `Module(${this.name})[0x${this.base.toString(16)}-0x${this.end.toString(16)}]`;
|
|
105
89
|
}
|
|
106
90
|
}
|
|
107
91
|
// Initialize dynamic static getters for modules
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
package/dist/msvcrt-ext.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { MsvcrtImpl } from '@cheatron/native-bindings';
|
|
2
|
-
import type { LPVOID } from '@cheatron/native-bindings';
|
|
3
|
-
type MemmemFn = (haystack: LPVOID, haystackLen:
|
|
2
|
+
import type { LPVOID, SIZE_T } from '@cheatron/native-bindings';
|
|
3
|
+
type MemmemFn = (haystack: LPVOID, haystackLen: SIZE_T, needle: LPVOID, needleLen: SIZE_T) => LPVOID;
|
|
4
4
|
/**
|
|
5
5
|
* memmem - Find the first occurrence of a byte sequence in memory.
|
|
6
6
|
*/
|
|
7
|
-
export declare function memmem(haystack: LPVOID, haystackLen:
|
|
7
|
+
export declare function memmem(haystack: LPVOID, haystackLen: SIZE_T, needle: LPVOID, needleLen: SIZE_T): LPVOID;
|
|
8
8
|
/**
|
|
9
9
|
* Extended MSVCRT interface including custom assembly functions
|
|
10
10
|
*/
|
package/dist/msvcrt-ext.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msvcrt-ext.d.ts","sourceRoot":"","sources":["../src/msvcrt-ext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAO,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"msvcrt-ext.d.ts","sourceRoot":"","sources":["../src/msvcrt-ext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAO,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AA4FhE,KAAK,QAAQ,GAAG,CACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,KACd,MAAM,CAAC;AAsCZ;;GAEG;AACH,wBAAgB,MAAM,CACpB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAGR;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAOpB,OAAO,UAAU,GAAG,SAAS,CAAC"}
|
package/dist/native-fn.d.ts
CHANGED
|
@@ -14,7 +14,9 @@ export declare const ALIGN = 16;
|
|
|
14
14
|
/**
|
|
15
15
|
* Rounds a number up to the nearest multiple of 16.
|
|
16
16
|
*/
|
|
17
|
-
export declare function
|
|
17
|
+
export declare function addressAlign16(n: number): number;
|
|
18
|
+
export declare const codeAlign16: typeof addressAlign16;
|
|
19
|
+
export declare const stackAlign16: typeof addressAlign16;
|
|
18
20
|
/**
|
|
19
21
|
* Dynamically creates callable native functions from assembly or bytecode.
|
|
20
22
|
*
|
package/dist/native-fn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-fn.d.ts","sourceRoot":"","sources":["../src/native-fn.ts"],"names":[],"mappings":"AA0CA,wDAAwD;AACxD,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvC,mEAAmE;AACnE,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1C,iDAAiD;AACjD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;IAEX,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC3C;AAED,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB;;GAEG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"native-fn.d.ts","sourceRoot":"","sources":["../src/native-fn.ts"],"names":[],"mappings":"AA0CA,wDAAwD;AACxD,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvC,mEAAmE;AACnE,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1C,iDAAiD;AACjD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;IAEX,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC3C;AAED,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,eAAO,MAAM,WAAW,uBAAiB,CAAC;AAC1C,eAAO,MAAM,YAAY,uBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,SAAS,CAAyC;IAE1D,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;gBAEP,QAAQ,GAAE,MAAa;IA+BnC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAgB1C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAc7C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5C;;OAEG;IAEH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS;IAIxE;;OAEG;IACH,IAAI,IAAI,aAAa,EAAE;IAIvB;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;IA+Bf,OAAO,CAAC,aAAa;CA4DtB;AAOD,eAAO,MAAM,QAAQ,EAAE,qBAmBtB,CAAC"}
|
package/dist/native-fn.js
CHANGED
|
@@ -10,7 +10,7 @@ const registry = new FinalizationRegistry((page) => {
|
|
|
10
10
|
const { currentProcess } = require('./process');
|
|
11
11
|
// Free the allocated memory using currentProcess.free
|
|
12
12
|
try {
|
|
13
|
-
const success = currentProcess.free(page, 0, MemoryFreeType.RELEASE);
|
|
13
|
+
const success = currentProcess.memory.free(page, 0, MemoryFreeType.RELEASE);
|
|
14
14
|
if (success) {
|
|
15
15
|
nfLog.info('Garbage collection: cleaned up executable memory page');
|
|
16
16
|
}
|
|
@@ -28,9 +28,11 @@ export const ALIGN = 16;
|
|
|
28
28
|
/**
|
|
29
29
|
* Rounds a number up to the nearest multiple of 16.
|
|
30
30
|
*/
|
|
31
|
-
export function
|
|
31
|
+
export function addressAlign16(n) {
|
|
32
32
|
return (n + ALIGN - 1) & ~(ALIGN - 1);
|
|
33
33
|
}
|
|
34
|
+
export const codeAlign16 = addressAlign16;
|
|
35
|
+
export const stackAlign16 = addressAlign16;
|
|
34
36
|
/**
|
|
35
37
|
* Dynamically creates callable native functions from assembly or bytecode.
|
|
36
38
|
*
|
|
@@ -51,7 +53,7 @@ export class NativeFunctionCreator {
|
|
|
51
53
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
52
54
|
const { currentProcess } = require('./process');
|
|
53
55
|
// Allocate executable memory using currentProcess.alloc
|
|
54
|
-
this.page = currentProcess.alloc(BigInt(capacity), null, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.EXECUTE_READWRITE);
|
|
56
|
+
this.page = currentProcess.memory.alloc(BigInt(capacity), null, MemoryState.COMMIT | MemoryState.RESERVE, MemoryProtection.EXECUTE_READWRITE);
|
|
55
57
|
if (!this.page) {
|
|
56
58
|
throw new Error('VirtualAlloc failed: could not allocate executable memory');
|
|
57
59
|
}
|
|
@@ -132,7 +134,7 @@ export class NativeFunctionCreator {
|
|
|
132
134
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
133
135
|
const { currentProcess } = require('./process');
|
|
134
136
|
// Perform the actual free using currentProcess.free
|
|
135
|
-
const success = currentProcess.free(this.page, 0, MemoryFreeType.RELEASE);
|
|
137
|
+
const success = currentProcess.memory.free(this.page, 0, MemoryFreeType.RELEASE);
|
|
136
138
|
if (success) {
|
|
137
139
|
nfLog.info('NativeFunctionCreator destroyed');
|
|
138
140
|
}
|
|
@@ -148,7 +150,7 @@ export class NativeFunctionCreator {
|
|
|
148
150
|
if (this.functions.has(name)) {
|
|
149
151
|
throw new Error(`Function '${name}' already registered`);
|
|
150
152
|
}
|
|
151
|
-
const alignedSize =
|
|
153
|
+
const alignedSize = codeAlign16(bytes.length);
|
|
152
154
|
if (this.offset + alignedSize > this.capacity) {
|
|
153
155
|
throw new Error(`Not enough space: need ${alignedSize} bytes, ${this.remaining} remaining`);
|
|
154
156
|
}
|
package/dist/native-fn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-fn.js","sourceRoot":"","sources":["../src/native-fn.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,UAAU,IAAI,MAAM,EACpB,gBAAgB,EAChB,WAAW,EACX,cAAc,GAGf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAEpC,qDAAqD;AACrD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAS,CAAC,IAAI,EAAE,EAAE;IACzD,IAAI,IAAI,EAAE,CAAC;QACT,8CAA8C;QAC9C,iEAAiE;QACjE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAEhD,sDAAsD;QACtD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"native-fn.js","sourceRoot":"","sources":["../src/native-fn.ts"],"names":[],"mappings":"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"}
|
package/dist/pattern.d.ts
CHANGED
|
@@ -1,15 +1,36 @@
|
|
|
1
|
+
import { MemoryProtection } from '@cheatron/win32-ext';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* Default protection mask: all readable memory regions.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_PROTECT: number;
|
|
6
|
+
/**
|
|
7
|
+
* Pure data representation of a memory signature.
|
|
8
|
+
* Defines the bytes, mask, limits, and memory protection preferences.
|
|
3
9
|
*/
|
|
4
10
|
export declare class Pattern {
|
|
5
11
|
bytes: Buffer;
|
|
6
12
|
mask: string;
|
|
7
|
-
|
|
13
|
+
private _limit;
|
|
14
|
+
protect: number;
|
|
15
|
+
constructor(signature: string | (number | null | undefined)[]);
|
|
16
|
+
get length(): number;
|
|
17
|
+
get maxResults(): number;
|
|
18
|
+
get hasLimit(): boolean;
|
|
8
19
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @param limit Maximum number of results to find (0 = no limit)
|
|
20
|
+
* Sets a specific scan limit.
|
|
11
21
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
limit(n: number): this;
|
|
23
|
+
/**
|
|
24
|
+
* Removes any limits (scan the whole memory for matches).
|
|
25
|
+
*/
|
|
26
|
+
noLimit(): this;
|
|
27
|
+
/**
|
|
28
|
+
* Restricts scan to segments matching the given protection mask.
|
|
29
|
+
*/
|
|
30
|
+
addProtect(flag: number | MemoryProtection): this;
|
|
31
|
+
/**
|
|
32
|
+
* Automatically applies typical readable/executable filters.
|
|
33
|
+
*/
|
|
34
|
+
defaultProtect(): this;
|
|
14
35
|
}
|
|
15
36
|
//# sourceMappingURL=pattern.d.ts.map
|
package/dist/pattern.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKvD;;GAEG;AACH,eAAO,MAAM,eAAe,QAIQ,CAAC;AAErC;;;GAGG;AACH,qBAAa,OAAO;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,MAAM,CAAa;IACpB,OAAO,EAAE,MAAM,CAAK;gBAEf,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE;IAiD7D,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB;;OAEG;IACH,OAAO,IAAI,IAAI;IAKf;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAKjD;;OAEG;IACH,cAAc,IAAI,IAAI;CAIvB"}
|
package/dist/pattern.js
CHANGED
|
@@ -1,35 +1,64 @@
|
|
|
1
|
+
import { MemoryProtection } from '@cheatron/win32-ext';
|
|
1
2
|
import { log } from './logger';
|
|
2
3
|
const scanLog = log.child('Scanner');
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* Default protection mask: all readable memory regions.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_PROTECT = MemoryProtection.READONLY |
|
|
8
|
+
MemoryProtection.READWRITE |
|
|
9
|
+
MemoryProtection.EXECUTE_READ |
|
|
10
|
+
MemoryProtection.EXECUTE_READWRITE;
|
|
11
|
+
/**
|
|
12
|
+
* Pure data representation of a memory signature.
|
|
13
|
+
* Defines the bytes, mask, limits, and memory protection preferences.
|
|
5
14
|
*/
|
|
6
15
|
export class Pattern {
|
|
7
16
|
bytes;
|
|
8
17
|
mask;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* @param limit Maximum number of results to find (0 = no limit)
|
|
13
|
-
*/
|
|
14
|
-
constructor(signature, limit = 0) {
|
|
15
|
-
this.limit = limit;
|
|
16
|
-
const parts = signature.split(/\s+/).filter(Boolean);
|
|
18
|
+
_limit = 1; // Default to 1 result
|
|
19
|
+
protect = 0;
|
|
20
|
+
constructor(signature) {
|
|
17
21
|
const bytes = [];
|
|
18
22
|
let mask = '';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
if (typeof signature === 'string') {
|
|
24
|
+
// Clean up common prefixes like 0x or \x
|
|
25
|
+
let cleanSig = signature.replace(/(0x|\\x)/gi, '');
|
|
26
|
+
// If there are no spaces, assume it's a continuous hex string (e.g. DEADBEEF)
|
|
27
|
+
if (!cleanSig.includes(' ')) {
|
|
28
|
+
// Inject spaces between every 2 characters
|
|
29
|
+
cleanSig = cleanSig.replace(/(.{2})/g, '$1 ').trim();
|
|
30
|
+
}
|
|
31
|
+
const parts = cleanSig.split(/\s+/).filter(Boolean);
|
|
32
|
+
for (const part of parts) {
|
|
33
|
+
if (part === '??' || part === '?') {
|
|
34
|
+
bytes.push(0);
|
|
35
|
+
mask += '?';
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const byte = parseInt(part, 16);
|
|
39
|
+
if (isNaN(byte))
|
|
40
|
+
throw new Error(`Invalid byte in signature: ${part} (from original: ${signature})`);
|
|
41
|
+
bytes.push(byte);
|
|
42
|
+
mask += 'x';
|
|
43
|
+
}
|
|
23
44
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
45
|
+
}
|
|
46
|
+
else if (Array.isArray(signature)) {
|
|
47
|
+
for (let i = 0; i < signature.length; i++) {
|
|
48
|
+
const val = signature[i];
|
|
49
|
+
if (val == null || val < 0 || val > 255) {
|
|
50
|
+
bytes.push(0);
|
|
51
|
+
mask += '?';
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
bytes.push(val);
|
|
55
|
+
mask += 'x';
|
|
28
56
|
}
|
|
29
|
-
bytes.push(byte);
|
|
30
|
-
mask += 'x';
|
|
31
57
|
}
|
|
32
58
|
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error('Signature must be a string or an array of numbers');
|
|
61
|
+
}
|
|
33
62
|
this.bytes = Buffer.from(bytes);
|
|
34
63
|
this.mask = mask;
|
|
35
64
|
scanLog.debug(`Parsed pattern: ${signature} -> ${mask}`);
|
|
@@ -37,5 +66,39 @@ export class Pattern {
|
|
|
37
66
|
get length() {
|
|
38
67
|
return this.bytes.length;
|
|
39
68
|
}
|
|
69
|
+
get maxResults() {
|
|
70
|
+
return this._limit;
|
|
71
|
+
}
|
|
72
|
+
get hasLimit() {
|
|
73
|
+
return this._limit > 0;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sets a specific scan limit.
|
|
77
|
+
*/
|
|
78
|
+
limit(n) {
|
|
79
|
+
this._limit = n;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Removes any limits (scan the whole memory for matches).
|
|
84
|
+
*/
|
|
85
|
+
noLimit() {
|
|
86
|
+
this._limit = 0;
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Restricts scan to segments matching the given protection mask.
|
|
91
|
+
*/
|
|
92
|
+
addProtect(flag) {
|
|
93
|
+
this.protect |= flag;
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Automatically applies typical readable/executable filters.
|
|
98
|
+
*/
|
|
99
|
+
defaultProtect() {
|
|
100
|
+
this.protect = DEFAULT_PROTECT;
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
40
103
|
}
|
|
41
104
|
//# sourceMappingURL=pattern.js.map
|
package/dist/pattern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAErC;;GAEG;AACH,MAAM,OAAO,OAAO;IACX,KAAK,CAAS;IACd,IAAI,CAAS;
|
|
1
|
+
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"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"}
|