-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathHooks.h
40 lines (28 loc) · 1.42 KB
/
Hooks.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//https://github.com/nizikawa-worms/wkJellyWorm/blob/master/src/Hooks.h
#pragma once
#include <string>
#include <map>
typedef struct IUnknown IUnknown;
#include <Windows.h>
class Hooks
{
private:
static inline std::map<std::string, DWORD> hookNameToAddr;
static inline std::map<DWORD, std::string> hookAddrToName;
static inline std::map<std::string, DWORD> scanNameToAddr;
static inline std::map<DWORD, std::string> scanAddrToName;
static inline bool scanFoundNew = false;
//Worms development tools by StepS
template<typename VT>
static BOOL __stdcall PatchMemVal(PVOID pAddr, VT newValue) { return PatchMemData(pAddr, sizeof(VT), &newValue, sizeof(VT)); }
template<typename VT>
static BOOL __stdcall PatchMemVal(ULONG_PTR pAddr, VT newValue) { return PatchMemData((PVOID)pAddr, sizeof(VT), &newValue, sizeof(VT)); }
static BOOL PatchMemData(PVOID pAddr, size_t buf_len, PVOID pNewData, size_t data_len);
static BOOL InsertJump(PVOID pDest, size_t dwPatchSize, PVOID pCallee, DWORD dwJumpType);
public:
static void minhook(std::string name, DWORD pTarget, DWORD* pDetour, DWORD* ppOriginal);
static void hookAsm(DWORD startAddr, DWORD hookAddr);
static void hookVtable(const char* classname, int offset, DWORD addr, DWORD hookAddr, DWORD* original);
static void patchAsm(DWORD addr, unsigned char* op, size_t opsize);
static DWORD scanPattern(const char* name, const char* pattern, const char* mask, DWORD expected = 0);
};