diff --git a/package.json b/package.json index 3c64be9..a2a78ab 100644 --- a/package.json +++ b/package.json @@ -36,5 +36,9 @@ "eslint": "^8.5.0", "eslint-config-airbnb-base": "^12.1.0", "node-addon-api": "^3.2.1" + }, + "types": "types", + "devDependencies": { + "@types/node": "^18.6.3" } } diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..55f22b4 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,79 @@ +import type { Process } from "./models/Process"; +import type { Module } from "./models/Module"; +import type { Callback } from "./models/Callback"; +import type { DataTypeBoolean, DataTypeNumber, DataTypeString, DataTypeVector3, DataTypeVector4 } from "./models/enums/DataType"; +import type { Vector3, Vector4 } from './models/Vector'; +import type { ProtectionType } from "./models/enums/ProtectionType"; +import type { SignatureType } from "./models/enums/SignatureType"; +import type { FunctionArg } from "./models/FunctionArg"; +import type { ReturnTypeBoolean, ReturnTypeNumber, ReturnTypeString, ReturnTypeVoid } from "./models/enums/ReturnType"; +import type { ReturnObject } from "./models/ReturnObject"; +import type { TriggerType } from "./models/enums/TriggerType.d."; + +declare namespace MemoryJs { + + function openProcess(pid: number): Process; + function openProcess(pid: number, callback: Callback): void; + + function getProcesses(): Process[]; + function getProcesses(callback: Callback): void; + + function findModule(moduleName: string, pid: number): Module; + function findModule(moduleName: string, callback: Callback): void; + + function getModules(pid: number): Module[]; + function getModules(pid: number, callbacK: Callback): void; + + function readMemory(handle: number, address: number, dataType: DataTypeNumber): number; + function readMemory(handle: number, address: number, dataType: DataTypeString): string; + function readMemory(handle: number, address: number, dataType: DataTypeBoolean): boolean; + function readMemory(handle: number, address: number, dataType: DataTypeVector3): Vector3; + function readMemory(handle: number, address: number, dataType: DataTypeVector4): Vector4; + + function readMemory(handle: number, address: number, dataType: DataTypeNumber, callback: Callback): void; + function readMemory(handle: number, address: number, dataType: DataTypeString, callback: Callback): void; + function readMemory(handle: number, address: number, dataType: DataTypeBoolean, callback: Callback): void; + function readMemory(handle: number, address: number, dataType: DataTypeVector3, callback: Callback): void; + function readMemory(handle: number, address: number, dataType: DataTypeVector4, callback: Callback): void; + + function readBuffer(handlle: number, address: number, size: number): Buffer; + function readBuffer(handlle: number, address: number, size: number, callback: Callback): void; + + function writeMemory(handle: number, address: number, value: number, dataType: DataTypeNumber): void; + function writeMemory(handle: number, address: number, value: string, dataType: DataTypeString): void; + function writeMemory(handle: number, address: number, value: boolean, dataType: DataTypeBoolean): void; + function writeMemory(handle: number, address: number, value: Vector3, dataType: DataTypeVector3): void; + function writeMemory(handle: number, address: number, value: Vector4, dataType: DataTypeVector4): void; + + function writeBuffer(handle: number, address: number, buffer: Buffer): void; + + function getRegions(handle: number): any; + function getRegions(handle: number, callback: Callback): any; + + function virtualProtectEx(handle: number, address: number, size: number, protection: ProtectionType): ProtectionType; + + function findPattern(handle: number, moduleName: string, signature: any, signatureType?: SignatureType, patternOffset?: number, addressOffset?: number): number; + function findPattern(handle: number, moduleName: string, signature: any, signatureType: SignatureType, patternOffset: number, addressOffset: number, callback: Callback): void; + + + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeBoolean, address: number): ReturnObject; + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeNumber, address: number): ReturnObject; + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeString, address: number): ReturnObject; + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeVoid, address: number): ReturnObject; + + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeBoolean, address: number, callback: Callback>): void; + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeNumber, address: number, callback: Callback>): void; + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeString, address: number, callback: Callback>): void; + function callFunction(handle: number, args: FunctionArg[], returnType: ReturnTypeVoid, address: number, callback: Callback>): void; + + function attackDebugger(pid: number, exitOnDetatch: boolean): any; + function detatchDebugger(pid: number): any; + + function handleDebugEvent(pid: number, threadId: number); + function setHardwareBreakpoint(pid: number, address: number, hardwareRegister, trigger: TriggerType, length: number); + + function removeHardwareBreakpoint(pid: number, hardwareRegister); + +} + +export = MemoryJs; \ No newline at end of file diff --git a/types/models/Callback.d.ts b/types/models/Callback.d.ts new file mode 100644 index 0000000..51eccdd --- /dev/null +++ b/types/models/Callback.d.ts @@ -0,0 +1,2 @@ + +export declare type Callback = (error: any, data: T) => any; \ No newline at end of file diff --git a/types/models/FunctionArg.d.ts b/types/models/FunctionArg.d.ts new file mode 100644 index 0000000..e1308f4 --- /dev/null +++ b/types/models/FunctionArg.d.ts @@ -0,0 +1,8 @@ +import type { ReturnTypeBoolean, ReturnTypeNumber, ReturnTypeString, ReturnTypeVoid } from "./enums/ReturnType"; + +declare interface FunctionArgNumber { type: ReturnTypeNumber, value: number } +declare interface FunctionArgBoolean { type: ReturnTypeBoolean, value: boolean } +declare interface FunctionArgString { type: ReturnTypeString, value: string } +declare interface FunctionArgVoid { type: ReturnTypeVoid } + +export declare type FunctionArg = FunctionArgNumber | FunctionArgBoolean | FunctionArgString | FunctionArgVoid; \ No newline at end of file diff --git a/types/models/Module.d.ts b/types/models/Module.d.ts new file mode 100644 index 0000000..d9f988c --- /dev/null +++ b/types/models/Module.d.ts @@ -0,0 +1,7 @@ +export declare interface Module { + modBaseAddr: number; + modBaseSize: number; + szExePath: string; + szModule: string; + th32ProcessID: number; +} \ No newline at end of file diff --git a/types/models/Process.d.ts b/types/models/Process.d.ts new file mode 100644 index 0000000..6076dc8 --- /dev/null +++ b/types/models/Process.d.ts @@ -0,0 +1,10 @@ +export declare interface Process { + dwSize: number; + th32ProcessID: number; + cntThreads: number; + th32ParentProcessID: number; + pcPriClassBase: number; + szExeFile: string; + modBaseAddr: number; + handle: number; +} \ No newline at end of file diff --git a/types/models/ReturnObject.d.ts b/types/models/ReturnObject.d.ts new file mode 100644 index 0000000..c2b04e3 --- /dev/null +++ b/types/models/ReturnObject.d.ts @@ -0,0 +1,4 @@ +export declare interface ReturnObject { + returnValue: T, + exitCode: number +} \ No newline at end of file diff --git a/types/models/Vector.d.ts b/types/models/Vector.d.ts new file mode 100644 index 0000000..e802473 --- /dev/null +++ b/types/models/Vector.d.ts @@ -0,0 +1,13 @@ + +export declare interface Vector3 { + x: number, + y: number, + z: number +} + +export declare interface Vector4 { + x: number, + y: number, + z: number, + w: number +} \ No newline at end of file diff --git a/types/models/enums/DataType.d.ts b/types/models/enums/DataType.d.ts new file mode 100644 index 0000000..5e8eaaa --- /dev/null +++ b/types/models/enums/DataType.d.ts @@ -0,0 +1,38 @@ + +export declare enum DataType { + BYTE = "byte", + INT = "int", + INT32 = "int32", + UINT32 = "uint32", + INT64 = "int64", + UINT64 = "uint64", + DWORD = "dword", + SHORT = "short", + LONG = "long", + FLOAT = "float", + DOUBLE = "double", + BOOL = "bool", + BOOLEAN = "boolean", + PTR = "ptr", + POINTER = "pointer", + STR = "str", + STRING = "string", + VEC3 = "vec3", + VECTOR3 = "vector3", + VEC4 = "vec4", + VECTOR4 = "vector4" +} + +export declare type DataTypeNumber = DataType.BYTE | + DataType.INT | DataType.INT32 | + DataType.UINT32 | DataType.UINT32 | + DataType.INT64 | DataType.UINT64 | + DataType.DWORD | DataType.SHORT | + DataType.LONG | DataType.FLOAT | DataType.DOUBLE | + DataType.PTR | DataType.POINTER; +export declare type DataTypeBoolean = DataType.BOOL | DataType.BOOLEAN; +export declare type DataTypeString = DataType.STR | DataType.STRING; +export declare type DataTypeVector3 = DataType.VEC3 | DataType.VECTOR3; +export declare type DataTypeVector4 = DataType.VEC4 | DataType.VECTOR4; + + diff --git a/types/models/enums/MemoryAllocationType.d.ts b/types/models/enums/MemoryAllocationType.d.ts new file mode 100644 index 0000000..6d7d25e --- /dev/null +++ b/types/models/enums/MemoryAllocationType.d.ts @@ -0,0 +1,6 @@ +export declare enum MemoryAllocationType { + MEM_COMMIT, + MEM_RESERVE, + MEM_RESET, + MEM_RESET_UNDO +} \ No newline at end of file diff --git a/types/models/enums/ProtectionType.d.ts b/types/models/enums/ProtectionType.d.ts new file mode 100644 index 0000000..f842793 --- /dev/null +++ b/types/models/enums/ProtectionType.d.ts @@ -0,0 +1,17 @@ +export declare enum ProtectionType { + PAGE_NOACCESS, + PAGE_READONLY, + PAGE_READWRITE, + PAGE_WRITECOPY, + PAGE_EXECUTE, + PAGE_EXECUTE_READ, + PAGE_EXECUTE_READWRITE, + PAGE_EXECUTE_WRITECOPY, + PAGE_GUARD, + PAGE_NOCACHE, + PAGE_WRITECOMBINE, + PAGE_ENCLAVE_THREAD_CONTROL, + PAGE_TARGETS_NO_UPDATE, + PAGE_TARGETS_INVALID, + PAGE_ENCLAVE_UNVALIDATED +} \ No newline at end of file diff --git a/types/models/enums/ReturnType.d.ts b/types/models/enums/ReturnType.d.ts new file mode 100644 index 0000000..d199ef2 --- /dev/null +++ b/types/models/enums/ReturnType.d.ts @@ -0,0 +1,14 @@ +declare enum ReturnType { + T_VOID = 0x0, + T_STRING = 0x1, + T_CHAR = 0x2, + T_BOOL = 0x3, + T_INT = 0x4, + T_DOUBLE = 0x5, + T_FLOAT = 0x6 +} + +export declare type ReturnTypeNumber = ReturnType.T_INT | ReturnType.T_DOUBLE | ReturnType.T_FLOAT; +export declare type ReturnTypeBoolean = ReturnType.T_BOOL; +export declare type ReturnTypeString = ReturnType.T_CHAR | ReturnType.T_STRING; +export declare type ReturnTypeVoid = ReturnType.T_VOID; \ No newline at end of file diff --git a/types/models/enums/SignatureType.ts b/types/models/enums/SignatureType.ts new file mode 100644 index 0000000..6d651cd --- /dev/null +++ b/types/models/enums/SignatureType.ts @@ -0,0 +1,6 @@ + +export declare enum SignatureType { + NORMAL, + READ, + SUBTRACT +} diff --git a/types/models/enums/TriggerType.d..ts b/types/models/enums/TriggerType.d..ts new file mode 100644 index 0000000..cee5265 --- /dev/null +++ b/types/models/enums/TriggerType.d..ts @@ -0,0 +1,5 @@ + +export declare enum TriggerType { + TRIGGER_ACCESS, + TRIGGER_WRITE, +}