forked from icantstandpeople/potassium
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCSignature.cpp
More file actions
59 lines (54 loc) · 2.15 KB
/
CSignature.cpp
File metadata and controls
59 lines (54 loc) · 2.15 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "sdk.h"
#include <time.h>
#define INRANGE(x,a,b) (x >= a && x <= b)
#define getBits( x ) (INRANGE((x&(~0x20)),'A','F') ? ((x&(~0x20)) - 'A' + 0xa) : (INRANGE(x,'0','9') ? x - '0' : 0))
#define getByte( x ) (getBits(x[0]) << 4 | getBits(x[1]))
DWORD CSignature::dwFindPattern(DWORD dwAddress, DWORD dwLength, const char* szPattern)
{
const char* pat = szPattern;
DWORD firstMatch = NULL;
for (DWORD pCur = dwAddress; pCur < dwLength; pCur++)
{
if (!*pat) return firstMatch;
if (*(PBYTE)pat == '\?' || *(BYTE*)pCur == getByte(pat)) {
if (!firstMatch) firstMatch = pCur;
if (!pat[2]) return firstMatch;
if (*(PWORD)pat == '\?\?' || *(PBYTE)pat != '\?') pat += 3;
else pat += 2;
}
else {
pat = szPattern;
firstMatch = 0;
}
}
return NULL;
}
//===================================================================================
HMODULE CSignature::GetModuleHandleSafe( const char* pszModuleName )
{
HMODULE hmModuleHandle = NULL;
do
{
hmModuleHandle = GetModuleHandle( pszModuleName );
Sleep( 1 );
}
while(hmModuleHandle == NULL);
return hmModuleHandle;
}
//===================================================================================
DWORD CSignature::GetClientSignature(char* chPattern)
{
static HMODULE hmModule = GetModuleHandleSafe("client.dll");
static PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER)hmModule;
static PIMAGE_NT_HEADERS pNTHeaders = (PIMAGE_NT_HEADERS)(((DWORD)hmModule) + pDOSHeader->e_lfanew);
return dwFindPattern(((DWORD)hmModule) + pNTHeaders->OptionalHeader.BaseOfCode, ((DWORD)hmModule) + pNTHeaders->OptionalHeader.SizeOfCode, chPattern);
}
//===================================================================================
DWORD CSignature::GetEngineSignature(char* chPattern)
{
static HMODULE hmModule = GetModuleHandleSafe("engine.dll");
static PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER)hmModule;
static PIMAGE_NT_HEADERS pNTHeaders = (PIMAGE_NT_HEADERS)(((DWORD)hmModule) + pDOSHeader->e_lfanew);
return dwFindPattern(((DWORD)hmModule) + pNTHeaders->OptionalHeader.BaseOfCode, ((DWORD)hmModule) + pNTHeaders->OptionalHeader.SizeOfCode, chPattern);
}
CSignature gSignatures;