Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
axstin
GitHub Repository: axstin/rbxfpsunlocker
Path: blob/master/Source/sigscan.cpp
259 views
1
#include "sigscan.h"
2
3
#include <Windows.h>
4
#include <Psapi.h>
5
#pragma comment(lib, "Psapi.lib")
6
7
namespace sigscan
8
{
9
bool compare(const char *location, const char *aob, const char *mask)
10
{
11
for (; *mask; ++aob, ++mask, ++location)
12
{
13
if (*mask == 'x' && *location != *aob)
14
{
15
return false;
16
}
17
}
18
19
return true;
20
}
21
22
bool compare_reverse(const char *location, const char *aob, const char *mask)
23
{
24
const char* mask_iter = mask + strlen(mask) - 1;
25
for (; mask_iter >= mask; --aob, --mask_iter, --location)
26
{
27
if (*mask_iter == 'x' && *location != *aob)
28
{
29
return false;
30
}
31
}
32
33
return true;
34
}
35
36
uint8_t *scan(const char *aob, const char *mask, uintptr_t start, uintptr_t end)
37
{
38
if (start <= end)
39
{
40
for (; start < end - strlen(mask); ++start)
41
{
42
if (compare((char *)start, (char *)aob, mask))
43
{
44
return (uint8_t *)start;
45
}
46
}
47
}
48
else
49
{
50
for (; start >= end; --start)
51
{
52
if (compare_reverse((char*)start, (char*)aob, mask))
53
{
54
return (uint8_t *)start - strlen(mask) - 1;
55
}
56
}
57
}
58
59
return 0;
60
};
61
62
uint8_t *scan(const char *module, const char *aob, const char *mask)
63
{
64
MODULEINFO info;
65
if (GetModuleInformation(GetCurrentProcess(), GetModuleHandle(module), &info, sizeof(info)))
66
return scan(aob, mask, (uintptr_t)info.lpBaseOfDll, (uintptr_t)info.lpBaseOfDll + info.SizeOfImage);
67
68
return 0;
69
}
70
}
71