4
4
#include " MinHook.h"
5
5
#include " Sig.hpp"
6
6
#include < format>
7
+ #include < inttypes.h>
7
8
#include < iostream>
8
9
9
10
bool fakeResp = false ;
@@ -14,6 +15,9 @@ callback_t callback = nullptr;
14
15
typedef void (*options_t )(void *, size_t , void *);
15
16
options_t oOptions = nullptr ;
16
17
18
+ typedef intmax_t (*strtoimax_t )(const char *nptr, char **endptr, int base);
19
+ strtoimax_t oStrtoimax = nullptr ;
20
+
17
21
void options (void *a1, size_t a2, void *a3) {
18
22
if (a2 == 10002 ) {
19
23
if (memcmp (a3, " https://md5c." , 13 ) == 0 ) {
@@ -33,7 +37,7 @@ void options(void *a1, size_t a2, void *a3) {
33
37
}
34
38
35
39
const std::string resp =
36
- R"( {"msg": "vpJSftgQ2noDAZR3Iri/ForvdhDZvxwlJCXowV9TgKSs+BoMyBMOIuxjpDcMTSov1thaXhg/d9aAKcpxOP6glQ3bSd8bHIGMku3Ck/33VdYhtzx4HwC4Lel5mVGZ9+2jffsIgHyIwxMl+8kYwh/QGQRlkC8zFfyNaMszsZiOxIJCy/RMYfI3buvCDPH/4D1/VxysPnaX+QtrVrs7Bt74byqnd38bi0GhpllEWL7CO+7fI+vMe2OSv6s0CUaOqzhDC5N8wIkHsthyVyP+GYoltTov3Bu5iaxmgZc/eYQPTkTWQ759pIVNjKJwnQI3EtOEdrRog6LAkA/CMGwMwBkScvY508Z3KhnNqqIIF9RpYLI6rdST+o2t5gIK4sElQg/2wHZT6wSm23t7YdxnwzEFZysv/H0y63iI4NMUmyZIkRvCyxlWVMpTt/rV9qubdbCjGDxG7A/0LbxCJBfBgEWu4Krpp1S+hk4qgIB+2apCh5sxU76mLzQdFLzNrgmbQADapyDO6rWw777F9FKlo/r9II8kISi/+2FxXp7TZE3ALbcyUo7zKucahsq7u9ucENm64D3PKV4YZCHchQY7xyYI4DaC1PQzleJxGaGbCoBQ0PZK7f33d3N3qB10OaEfe2de4uTcOKbVAjtjSLrlZcMGiZd40Bho76xCtcgAKG2FDxbH/PJo4BoIYwqiDzqpmxXBOsn0JqKLGLaAyU840GAgyLO62lE7/A26w+B9q7hkOIcKlfXZpdwjsll/dADe2U/uF5nrLxEOUGDx9gbUoB95KLD1S3KCCyaLuv8j4imt2E9EgDzk/1XdIwnbPGAECajV5z4yTpMuyD9XBhmJQIFutw= =", "code": 200})" ;
40
+ R"( {"msg": "AtZAfcAb+qtSipkXI9CP8u5XUYPGyCbGq5C/VYyt6tcelFYehMuYs0q8m/q+RwGx0/jOB3jDRAqjcqmunJpoKrIFV9W/YC9wzY+GaSU2L8oNQHlpx9KgJ0K50aqwxQD0dKiWmd16b76sLCn8GvpVrSk1k6SoFtUtPe30Cf1BkOsFD2oxSGBioUK22MkPFO2uj5xIXfZ5tC1dB4cS5ttzVlDiLPXY1hlJBqgFpZTj8znRz5qpMhflK5euefmKRPTKzwt+JHFF2YImsmDf49bMCgS6ZIwHL/jbK8dRJwFRjfkZjvpw2XxrL3wKubLqZKjUG3lHP6oKijmcWFTeu68xHphRKmqy43Gg3MZ1wCoYwcQL6tPPoqMy6TJwJdt/mBfhklPRq0XcTAjpnTIJeIo7zH/L1kFaGRAVFtqbwGLIIN08bb+7/tV3MOOc8BEp4RCb721hakBRNFqJAeYrt7yzr/VeK2igLuByrTcBkd0SOIB5LgI5K/qrMf/90bB8sfcicIgJXSVxyuuov45UXM2Rdo4YiL5M8b4LCJwhEkmplS8 =", "code": 200})" ;
37
41
38
42
typedef size_t (*perform_t )(void *);
39
43
perform_t oPerform = nullptr ;
@@ -48,6 +52,25 @@ size_t perform(void *a1) {
48
52
return oPerform (a1);
49
53
}
50
54
55
+ intmax_t strtoint (const char *nptr, char **endptr, int base) {
56
+ if (memcmp (nptr, " 1721968703399" , 13 ) == 0 ) {
57
+ return 0x1f0ed5537a7 ;
58
+ }
59
+
60
+ return oStrtoimax (nptr, endptr, base);
61
+ }
62
+
63
+ char *base = nullptr ;
64
+ const auto expectedRegion = 0x3d3000 ;
65
+
66
+ void initWrapper () {
67
+ const void *init = Sig::find (base, expectedRegion,
68
+ " 48 89 5C 24 08 48 89 74 24 10 48 89 7C 24 18 4C 89 74 24 20 55 48 8D AC 24 10" );
69
+
70
+ CreateThread (nullptr , 0 , (LPTHREAD_START_ROUTINE)init, nullptr , 0 , nullptr );
71
+ ExitThread (0 );
72
+ }
73
+
51
74
void start () {
52
75
MH_Initialize ();
53
76
@@ -72,8 +95,6 @@ void start() {
72
95
73
96
MEMORY_BASIC_INFORMATION mbi;
74
97
bool foundBase = false ;
75
- const auto expectedRegion = 0x3c7000 ;
76
- char *base = nullptr ;
77
98
78
99
while (foundBase == false ) {
79
100
base = nullptr ;
@@ -87,21 +108,46 @@ void start() {
87
108
}
88
109
}
89
110
111
+ // {
112
+ // const void *found =
113
+ // Sig::find(base, expectedRegion, "89 54 24 10 4C 89 44 24 18 4C 89 4C 24 20 48 83 EC 28 48 85 C9");
114
+
115
+ // if (found != nullptr) {
116
+ // MH_CreateHook((LPVOID)found, (LPVOID)options, (LPVOID *)&oOptions);
117
+ // MH_EnableHook((LPVOID)found);
118
+ // }
119
+ // }
120
+
121
+ // {
122
+ // const void *found = Sig::find(base, expectedRegion, "40 55 56 48 83 EC 38 48 8B F1 48 85 C9 75 0A 8D");
123
+
124
+ // if (found != nullptr) {
125
+ // MH_CreateHook((LPVOID)found, perform, (LPVOID *)&oPerform);
126
+ // MH_EnableHook((LPVOID)found);
127
+ // }
128
+ // }
129
+
130
+ // {
131
+ // MH_CreateHook((LPVOID)strtoimax, (LPVOID)strtoint, (LPVOID *)&oStrtoimax);
132
+ // MH_EnableHook((LPVOID)strtoimax);
133
+ // }
134
+
90
135
{
91
- const void *found =
92
- Sig::find (base, expectedRegion, " 89 54 24 10 4C 89 44 24 18 4C 89 4C 24 20 48 83 EC 28 48 85 C9" );
136
+ const void *found = Sig::find (base, expectedRegion, " 83 3D ? ? ? ? 00 75 04 33 C9 CD 29" );
93
137
94
138
if (found != nullptr ) {
95
- MH_CreateHook ((LPVOID)found, (LPVOID)options, (LPVOID *)&oOptions);
96
- MH_EnableHook ((LPVOID)found);
139
+ const auto relative = *(int32_t *)((uintptr_t )found + 2 );
140
+ int32_t *role = (int32_t *)((uintptr_t )found + relative + 7 );
141
+ *role = 31 ;
97
142
}
98
143
}
99
144
100
145
{
101
- const void *found = Sig::find (base, expectedRegion, " 40 55 56 48 83 EC 38 48 8B F1 48 85 C9 75 0A 8D" );
146
+ const void *found =
147
+ Sig::find (base, expectedRegion, " 48 89 5C 24 ? 48 89 7C 24 ? 55 48 8D 6C 24 ? 48 81 EC C0 00 00 00" );
102
148
103
149
if (found != nullptr ) {
104
- MH_CreateHook ((LPVOID)found, perform, (LPVOID *)&oPerform );
150
+ MH_CreateHook ((LPVOID)found, (LPVOID)initWrapper, nullptr );
105
151
MH_EnableHook ((LPVOID)found);
106
152
}
107
153
}
0 commit comments