Skip to content

Commit 5bd2973

Browse files
authored
4.7 Update (v1.3.2.0) (#16)
* wip * peepoClap
1 parent dee87c7 commit 5bd2973

File tree

4 files changed

+120
-185
lines changed

4 files changed

+120
-185
lines changed

license_gen.js

+74-52
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,84 @@
1-
const crypto = require('crypto');
2-
const fs = require('node:fs');
3-
const readline = require('node:readline');
4-
const { stdin: input, stdout: output } = require('node:process');
1+
const crypto = require("crypto");
2+
const fs = require("node:fs");
3+
const readline = require("node:readline");
4+
const { stdin: input, stdout: output } = require("node:process");
55
const rl = readline.createInterface({ input, output });
66
rl.question("Enter your HWID: ", (user_input) => {
7-
hwid = user_input;
7+
// hwid = user_input;
8+
hwid = "---------Hi-Korepi-Devs---------";
89

9-
const publicKey = `-----BEGIN PUBLIC KEY-----
10-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0SxoW83nU4qAbHXqjhal
11-
MiU62ae79Ayv/EAmVfJEeCymJIpvtTqoPr99MBMDMHPxqqW1TgapD0bdAoU0vBpx
12-
G5INKIQnVi1ZE0YPP1GKUXN4nchM31a9NqG4mdWXtpD/jTt40Tpxn/zaj/5kDCuP
13-
o+iKQqwzKnE27Fyi0USLK82PfwCN0KlA4hmHUgB0UD+eG3VSlfHuU4ZITKqwEZFy
14-
wREoekljDot8noMOQiBo0NgqmkLLK2WQ2TaTSm3A/E6d7FI+HrdPdl/GmMdTF1tf
15-
lr1yMFQ1eAdOJqnmM5YxCv4FsU2qpZFFXNEbnjJ+mx549LMUWBUeRjOwZ8zXUWxd
16-
oQIDAQAB
10+
const publicKey = `-----BEGIN PUBLIC KEY-----
11+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuBti5eEFCv3+qcBnooMF
12+
vNHH2lDD/GjcgNpQNaeow7bCawpHMkyxtUUVQjuhyo5+LT7lMOJ+yoQAE5507Cvn
13+
Ep9tuSJC0qcVT4/07FLblTDJiYxFgsFd5/skmUDTmClgffr8UOPRvJp/q62GTyYa
14+
Pb63jWPHbNhqVjjWCI/ZRnfzqkadiP9uzdTVvyLkLpj6Hr/LpvHRUlK/NGhh1QU7
15+
8lIc87XmNzOVL+uzMAT00AcKzilwg0za/oG5SXeHdac53t0lN3Bge5VxVgyzh0M2
16+
/ADipBfd2JzlElNUL0y45Kx/HopT3nfwoq5PHW3JFXLxg56l3U8LqedK7Q+K7jmP
17+
/QIDAQAB
1718
-----END PUBLIC KEY-----`;
18-
const privateKey = `-----BEGIN RSA PRIVATE KEY-----
19-
MIIEowIBAAKCAQEA0SxoW83nU4qAbHXqjhalMiU62ae79Ayv/EAmVfJEeCymJIpv
20-
tTqoPr99MBMDMHPxqqW1TgapD0bdAoU0vBpxG5INKIQnVi1ZE0YPP1GKUXN4nchM
21-
31a9NqG4mdWXtpD/jTt40Tpxn/zaj/5kDCuPo+iKQqwzKnE27Fyi0USLK82PfwCN
22-
0KlA4hmHUgB0UD+eG3VSlfHuU4ZITKqwEZFywREoekljDot8noMOQiBo0NgqmkLL
23-
K2WQ2TaTSm3A/E6d7FI+HrdPdl/GmMdTF1tflr1yMFQ1eAdOJqnmM5YxCv4FsU2q
24-
pZFFXNEbnjJ+mx549LMUWBUeRjOwZ8zXUWxdoQIDAQABAoIBAD65522oWHd38D0W
25-
O0lyxwU7nuNIZpev+lJV1mktppS3JveMQCWDupJekCcLfIhaLJ105eLJIod/Q6WO
26-
1pqV/1c6PBHrV3SDUtPxzX66cBUu4HvIZi0PcNxiMN6I698Gqmvq6rcrpIlKpSxL
27-
KCtyILgRcuy9gPZ4TvUgbn785BM1Hby1LwNLPs9fhyl6QZZq4eTgyH5iGNIoDlhf
28-
DZkyj2WbqQ9tsVS/lFPV9B0eexfTLsEYT179vTyUEwJLgcteAu7c8asC+1XU3Mer
29-
HbXedC0vytNoGBCo1dg4QYeSgN6DKbhhLqrQY9ibR1LZv91j5fskUIiqQf3wgANs
30-
TilkB/ECgYEA7eLKFAXbyxs1BRV0mUcu0f1DlQJGJGZoyWMe9RMxMNwaM3PcmkAa
31-
dWE8nmLvLoMz8+5sw7BQ0ZVxgfDVVld0MnwnsJOMlLbPj3oBz0SLbZbNFrIX6jrt
32-
K2hcjVFn/YFssYAzGtUWB9TtOFdn38K5Pj0vfDOnSIj1ngNRC4WvaRUCgYEA4Rnq
33-
LE6sqMQCbChJEgkSkJedJem2jwGep7Dt/GgvJEIPjfZT+RaKpkFf6qDAPMmKi3eF
34-
1chc5SqPeJ2E7bM/3L1szytQKWTBqsVqHpyVOTe0IAAybVS4Mx3ICtjTzuKgRERY
35-
LJUVBEgWU0xnnRJqlAXIjuTkE47dDgehTafwrV0CgYBsm2tJQvd7Pluxi38lb9NX
36-
efq98EDX442ZzFBY8b82oHax4QbpwbSSvKcxZNfwc2RnzQYJPdlYJpOhELRF7D2X
37-
wwlX27WGPAR9a+WhnJjPmtbdsseqX+biN45x0qXYnptiWrZ6XKjnQHZhj75T8ZIj
38-
cUnZubd5LVZ+IuOAkDNqlQKBgH77SXiZIRlLCTrONvovmANtI79BajSd60wZqQbc
39-
FsvTYEbrEE/RgYFsG5mV+RvRbZBjamJA1vaH3ctiwJv+pCX3zavIeT4AkqetGcIO
40-
/rb6T2hF9CxswERFppVH36Qzf8lC7KKpruNtbvqqfUDEJM8/u/Wv9WF7FARYFYxj
41-
EogZAoGBAMNI6WOB/u4vm5QpJVW+p33xyJJTmVTmzCFXCRsOvC0gDwBZcKGe4BIR
42-
E7CyLasw3HG9IhZYOi/KoX+UQrcAOcRPAsJmlqiQxu2qskX81AiOkhPEBprVRhj3
43-
VqquzXQuHpi/UwwiVoBX0Qi1/bWI1t5krlF4Me17cT6hffD0N/Qr
44-
-----END RSA PRIVATE KEY-----`;
19+
const privateKey = `-----BEGIN PRIVATE KEY-----
20+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4G2Ll4QUK/f6p
21+
wGeigwW80cfaUMP8aNyA2lA1p6jDtsJrCkcyTLG1RRVCO6HKjn4tPuUw4n7KhAAT
22+
nnTsK+cSn225IkLSpxVPj/TsUtuVMMmJjEWCwV3n+ySZQNOYKWB9+vxQ49G8mn+r
23+
rYZPJho9vreNY8ds2GpWONYIj9lGd/OqRp2I/27N1NW/IuQumPoev8um8dFSUr80
24+
aGHVBTvyUhzzteY3M5Uv67MwBPTQBwrOKXCDTNr+gblJd4d1pzne3SU3cGB7lXFW
25+
DLOHQzb8AOKkF93YnOUSU1QvTLjkrH8eilPed/Cirk8dbckVcvGDnqXdTwup50rt
26+
D4ruOY/9AgMBAAECggEAAtZZNdW78Clt7UvLzRNb2UcaX2DzREaRb2Lt7YXB8hI0
27+
+NVVt467BmIkK7sjiS2dADGB8rjq31AdeC/u+VzL2NugI0RF510v1OQREDtOqwPv
28+
dzE0OQml2tdh/wKiwCuTEx31GYIJT3DKGuk3sqyRpvXzejhZcHH9YYrKsaMV5CIa
29+
bDGikaoqEBCSXHT8SL2bOgf2tTX1szwR/Yn8GQDEgHwPlw3B41jSgOvUf9L52VZy
30+
ih5QxzQPzoT7DhMZ+LzPEAbvb80dMbT0TXVXLAYyrc+UOyw1Brtx1HSCTJ9K0naQ
31+
bazm0mq//6nokJagtwUC9Zt8HlyZmE0Q+Cb2diuT+QKBgQDZbKljoDDUPYLXbpnw
32+
rx76p58h0M5i7UTjodadIfXPDxZNP40poHUGQ0QNrned6JB7HSYe6hxLqV14AO6A
33+
EaVlmQLbHJvhk+/3sohjBgYiLX1GngAB9yeId7cHgpgmFKoX47E9ZF2zqWzcnMSU
34+
/kuhQBVPO8vQbecEmbj7SwJpiwKBgQDYxXT8PckYuz+izmtcgISm2CgUgExDAL1z
35+
wDMQfRs10ly+L4I5hVQkBu5BunYaf/lhatb9EBsDRbvvZmePSfSzHEjvrzidnpxZ
36+
FzABE+a5jpNQTPPQ/z98Dx5jtOt2fIV46Wbm/4ikyiJ3cioj9UIvqdLprgD2EDzI
37+
zghWkvvNlwKBgQCztBsA68rP8RMuqgx0INmzBE4DbgjXPRJ+Lioq74GyJN8i887h
38+
w+xVQ82AnV3iVvDrwLjcPlUquA43/FUj5vHUWjZBEZFJTbO9/4K4jacOIpjzf+2z
39+
siqroX7WpzrH5rZ7TkcU3dqQfw0p/iyAlPm/ii7SsTKQz/VsGP4KPQH+ZwKBgEtO
40+
zgWTsXlWFBWLgODyBSOxlLsKl3PvneHIs/TWgc2A95dbCfLRzxl1DvDmxoEOVKTz
41+
aR0hq0DHyTKycOfm2YwgF3ateQ3JPKf21kaJk26Dicor8ch55KRE3FnnUKYpPHV1
42+
ILq/q8kUMEUu9FTpr8S/SvbD7LGPko5whZUOG0yhAoGAK4VieEUXlxQeaI2JNQE+
43+
loHWRKnvVCnFUs7qsalQB5yvs/3kr7n9usgGhAtC0IpIwyp1D7v2Om+AjAZLbvXi
44+
EO6b4mHx2yTVODNwlDr1l5yvP20gqTDLIZb/fcIRxvnZKmEn0st7d7+5/NVUsGYv
45+
JuXe/NYkDOj7sJowggbhASU=
46+
-----END PRIVATE KEY-----`;
4547

48+
// const randomBytes = crypto.randomBytes(10);
49+
const randomBytes = Buffer.from("mokPVuACUwR5Qw==", "base64");
50+
const md5 = crypto.createHash("md5").update(randomBytes).digest("hex");
51+
const encryptedMd5 = Buffer.from(randomBytes).toString("base64");
4652

47-
const randomBytes = crypto.randomBytes(10);
48-
const md5 = crypto.createHash('md5').update(randomBytes).digest('hex');
49-
const encryptedMd5 = Buffer.from(randomBytes).toString('base64');
53+
const cipher = crypto.createCipheriv(
54+
"aes-256-cbc",
55+
md5,
56+
Buffer.from("6BCDEF0123456786")
57+
);
58+
let privatekeyPkcs1PemEnc = cipher.update(privateKey, "utf8", "base64");
59+
privatekeyPkcs1PemEnc += cipher.final("base64");
5060

51-
const cipher = crypto.createCipheriv('aes-256-cbc', md5, Buffer.from('ABCDEF0123456789'));
52-
let privatekeyPkcs1PemEnc = cipher.update(privateKey, 'utf8', 'base64');
53-
privatekeyPkcs1PemEnc += cipher.final('base64');
61+
const license = {
62+
cardstr: "micah-oc-00000000000000000000000000000000",
63+
expiry_time: Math.floor((Math.pow(2, 32) - 1) / 2),
64+
hwid: hwid,
65+
role: 25,
66+
data_id: 44262,
67+
user_id: Math.floor(Math.random() * 100000),
68+
};
69+
const encryptedLicense = crypto
70+
.publicEncrypt(
71+
{ key: publicKey, padding: crypto.constants.RSA_PKCS1_PADDING },
72+
JSON.stringify(license)
73+
)
74+
.toString("base64");
75+
const packedLicense = JSON.stringify({
76+
"encrypted.dat": encryptedLicense,
77+
"Encrypted.md5": encryptedMd5,
78+
"privatekey_pkcs1.pem.enc": privatekeyPkcs1PemEnc,
79+
});
5480

55-
const license = { "cardstr": "free-korepi", "expiry_time": Math.floor((Math.pow(2, 32) - 1) / 2), "hwid": hwid, "role": 25, "data_id": Math.floor(Math.random() * 100000), "user_id": Math.floor(Math.random() * 100000) };
56-
const encryptedLicense = crypto.publicEncrypt({ key: publicKey, padding: crypto.constants.RSA_PKCS1_PADDING }, JSON.stringify(license)).toString('base64');
57-
const packedLicense = JSON.stringify({ "encrypted.dat": encryptedLicense, "Encrypted.md5": encryptedMd5, "privatekey_pkcs1.pem.enc": privatekeyPkcs1PemEnc });
81+
fs.writeFileSync("enc.json", packedLicense);
5882

59-
fs.writeFileSync('enc.json', packedLicense);
60-
61-
rl.close();
83+
rl.close();
6284
});

lol/dll.cpp

+21-95
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,6 @@
66
#include <format>
77
#include <iostream>
88

9-
typedef size_t (*copy_t)(void *, const char *);
10-
copy_t oCopy = nullptr;
11-
const auto *pubKey = "-----BEGIN PUBLIC KEY-----\n"
12-
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0SxoW83nU4qAbHXqjhal\n"
13-
"MiU62ae79Ayv/EAmVfJEeCymJIpvtTqoPr99MBMDMHPxqqW1TgapD0bdAoU0vBpx\n"
14-
"G5INKIQnVi1ZE0YPP1GKUXN4nchM31a9NqG4mdWXtpD/jTt40Tpxn/zaj/5kDCuP\n"
15-
"o+iKQqwzKnE27Fyi0USLK82PfwCN0KlA4hmHUgB0UD+eG3VSlfHuU4ZITKqwEZFy\n"
16-
"wREoekljDot8noMOQiBo0NgqmkLLK2WQ2TaTSm3A/E6d7FI+HrdPdl/GmMdTF1tf\n"
17-
"lr1yMFQ1eAdOJqnmM5YxCv4FsU2qpZFFXNEbnjJ+mx549LMUWBUeRjOwZ8zXUWxd\n"
18-
"oQIDAQAB\n"
19-
"-----END PUBLIC KEY-----";
20-
bool replacedPubKey = false;
21-
22-
size_t copy(void *a1, const char *a2) {
23-
if (memcmp(a2, "-----BEGIN PUBLIC KEY-----", 26) == 0 && replacedPubKey == false) {
24-
replacedPubKey = true;
25-
a2 = pubKey;
26-
}
27-
28-
return oCopy(a1, a2);
29-
}
30-
319
bool fakeResp = false;
3210

3311
typedef void (*options_t)(void *, size_t, void *);
@@ -46,63 +24,8 @@ void options(void *a1, size_t a2, void *a3) {
4624
typedef size_t (*respHandler_t)(void *, char *, size_t, uint64_t *, uint32_t *a5);
4725
respHandler_t oRespHandler = nullptr;
4826

49-
const auto versionInfoResp = R"|({
50-
"msg": "success",
51-
"code": 200,
52-
"data": {
53-
"announcement": "4.6 os&cn",
54-
"latest_version": "1.3.1.3",
55-
"update_required": true,
56-
"update_url": "https://github.com/Cotton-Buds/calculator/releases",
57-
"updated_at": "2024-05-16 03:21",
58-
"updated_by": "Strigger(main) & Micah(auth) & EtoShinya(tech)",
59-
"update_diff": {
60-
"added_features": [
61-
"fix all 409",
62-
"Fix camera issues"
63-
],
64-
"deleted_features": [
65-
"修复所有失效功能",
66-
"Restore all malfunctioning features."
67-
],
68-
"total_size": "78.0 MB"
69-
},
70-
"compatible_versions": [
71-
"none"
72-
]
73-
},
74-
"sign2": "LQuoFI+EQmj+ET67geipuHkfY0OlqPjefO4JftDJEIGZbKhV66kl8RGB4ANTHARYjmCo9OokSqTzkRJMVFyb2hM/ichoegIDsuEFtTlkR3uBmZUI43kyOHOfIEh3EWOY689RXKDGpjd20EIHDQUw7dRiAwUah9HjZG/hit1gM71d0Eqd2juhP2lMsvMn2R/F3xemK+DfOLvddzhosZyRF3p2oDlgWS7y821qbch1aMBNMFqajCHc/C3sxgkIEglHajep4+UhOhxHpeDHEhn+OX33ULVNu/+6S0FVi8J39L/xua/ACfA57KfWdSidwAZYU5rtB/sM6piXhbNUGK2wdA=="
75-
})|";
76-
const auto versionInfoChunkLength = std::format("{:x}", strlen(versionInfoResp));
77-
const auto versionInfoFirstChunk = std::format("{}\r\n{}\r\n", versionInfoChunkLength, versionInfoResp);
78-
const auto versionInfoSecondChunk = std::format("0\r\n\r\n");
79-
const auto versionInfoAggregated = versionInfoFirstChunk + versionInfoSecondChunk;
80-
81-
const auto resp = R"({
82-
"msg": "Hi there",
83-
"code": 200,
84-
"data": {
85-
"createBy": null,
86-
"createTime": "2024-05-25T14:06:09.662Z",
87-
"updateBy": "anonymousUser",
88-
"updateTime": "2024-05-25T14:06:09.662Z",
89-
"delFlag": 0,
90-
"remark": "Oops!",
91-
"id": 44262,
92-
"roleValue": 25,
93-
"cardKey": null,
94-
"expiryTime": "2038-01-19T03:14:07.000Z",
95-
"lastLoginTime": "2024-05-25T14:06:09.662Z",
96-
"hwid": "---------Hi-Korepi-Devs---------",
97-
"fileMd5": "mokPVuACUwR5Qw==",
98-
"resetTime": null,
99-
"resetNum": 4,
100-
"pauseTime": null,
101-
"status": 0
102-
},
103-
"signature": "a5879201e7fb4e3064390fccb0d8bbcf628c70bb237843101f314710ebfa0adc",
104-
"sign2": "coUVZrl9x43Dql30LoOOpp/U7+gVb7298CeYu6uu8gT1RRxsf4jvyz/xQckiDWd5Sj43dl5AAzdmJGPPFtyQC3haU20H6v09C6whJqSwHDuizT+SW7VFZbWT3jhc+y1bgkYEhbyxHK9hkTGF8hlMk6HSkhAg1vl8t/E7ZcScmh22ZRYXMRijZEEPCgNbDTXDwySqdRnEaLc17z4uvGG/+B2C/60T4aH4VFnFjDyCuIlxCOgMOUM3QcXj0KZakmHxddURpAULfBi00LCamJlJIeUFbnlg3vcrNoCxD/jpHmdZn0jr30jXpgljhAb5AxsX1xwdF5wYROiJTWv6U6nm0A=="
105-
})";
27+
const auto resp =
28+
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})";
10629
const auto chunkLength = std::format("{:x}", strlen(resp));
10730
const auto firstChunk = std::format("{}\r\n{}\r\n", chunkLength, resp);
10831
const auto secondChunk = std::format("0\r\n\r\n");
@@ -113,9 +36,6 @@ size_t respHandler(void *a1, char *content, size_t length, uint64_t *a4, uint32_
11336
fakeResp = false;
11437
memcpy(content, aggregated.c_str(), aggregated.size() + 1);
11538
length = aggregated.size();
116-
} else {
117-
memcpy(content, versionInfoAggregated.c_str(), versionInfoAggregated.size() + 1);
118-
length = versionInfoAggregated.size();
11939
}
12040

12141
return oRespHandler(a1, content, length, a4, a5);
@@ -124,15 +44,32 @@ size_t respHandler(void *a1, char *content, size_t length, uint64_t *a4, uint32_
12444
void start() {
12545
MH_Initialize();
12646

47+
const auto ntdll = GetModuleHandle(L"ntdll.dll");
48+
uint8_t callcode = ((uint8_t *)GetProcAddress(ntdll, "NtQuerySection"))[4] - 1;
49+
uint8_t restore[] = {0x4C, 0x8B, 0xD1, 0xB8, callcode};
50+
51+
volatile auto ntProtectVirtualMemory = (uint8_t *)GetProcAddress(ntdll, "NtProtectVirtualMemory");
52+
53+
while (true) {
54+
if (ntProtectVirtualMemory[0] != 0x4C) {
55+
DWORD oldProtect;
56+
VirtualProtect((LPVOID)ntProtectVirtualMemory, sizeof(restore), PAGE_EXECUTE_READWRITE, &oldProtect);
57+
memcpy(ntProtectVirtualMemory, restore, sizeof(restore));
58+
VirtualProtect((LPVOID)ntProtectVirtualMemory, sizeof(restore), oldProtect, nullptr);
59+
60+
break;
61+
}
62+
}
63+
12764
MEMORY_BASIC_INFORMATION mbi;
12865
bool foundBase = false;
129-
const auto expectedSize = 0x39d5000;
66+
const auto expectedRegion = 0x3c7000;
13067
char *base = nullptr;
13168

13269
while (foundBase == false) {
13370
base = nullptr;
13471
while (VirtualQuery(base, &mbi, sizeof(mbi)) == sizeof(MEMORY_BASIC_INFORMATION)) {
135-
if (mbi.RegionSize == expectedSize) {
72+
if (mbi.RegionSize == expectedRegion) {
13673
foundBase = true;
13774
break;
13875
}
@@ -141,17 +78,6 @@ void start() {
14178
}
14279
}
14380

144-
const auto expectedRegion = 0x3cc000;
145-
146-
{
147-
const void *found = Sig::find(base, expectedRegion,
148-
"40 53 48 83 EC 20 33 C0 0F 57 C0 0F 11 01 48 89 41 10 48 8B D9 48 89 41 18 "
149-
"49 C7 C0 FF FF FF FF 49 FF C0 42");
150-
151-
MH_CreateHook((LPVOID)found, (LPVOID)copy, (LPVOID *)&oCopy);
152-
MH_EnableHook((LPVOID)found);
153-
}
154-
15581
{
15682
const void *found =
15783
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");

lol/exe.cpp

+20-34
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
#include "MinHook.h"
1010
#include "Sig.hpp"
1111

12-
typedef char **(*hwid_t)(char **);
12+
typedef uintptr_t (*hwid_t)(uintptr_t, size_t, size_t, uintptr_t);
1313
hwid_t oHwid = nullptr;
14+
uintptr_t hwid(uintptr_t a1, size_t a2, size_t a3, uintptr_t a4) {
15+
if (a1 == 0x14ecf0) {
16+
const auto s = std::string("---------Hi-Korepi-Devs---------");
17+
memcpy((void *)a4, s.c_str(), s.size() + 1);
18+
}
1419

15-
char **hwid(char **ret) {
16-
oHwid(ret);
17-
const auto s = std::string("---------Hi-Korepi-Devs---------");
18-
memcpy(*ret, s.c_str(), s.size() + 1);
19-
20-
return ret;
20+
return oHwid(a1, a2, a3, a4);
2121
}
2222

2323
bool fakeResp = false;
@@ -37,42 +37,21 @@ void options(void *a1, size_t a2, void *a3) {
3737

3838
typedef size_t (*respHandler_t)(void *, char *, size_t, uint64_t *, uint32_t *a5);
3939
respHandler_t oRespHandler = nullptr;
40-
41-
const auto resp = R"({
42-
"msg": "Hi there",
43-
"code": 200,
44-
"data": {
45-
"createBy": null,
46-
"createTime": "2024-05-25T14:06:09.662Z",
47-
"updateBy": "anonymousUser",
48-
"updateTime": "2024-05-25T14:06:09.662Z",
49-
"delFlag": 0,
50-
"remark": "Oops!",
51-
"id": 44262,
52-
"roleValue": 25,
53-
"cardKey": null,
54-
"expiryTime": "2038-01-19T03:14:07.000Z",
55-
"lastLoginTime": "2024-05-25T14:06:09.662Z",
56-
"hwid": "---------Hi-Korepi-Devs---------",
57-
"fileMd5": "mokPVuACUwR5Qw==",
58-
"resetTime": null,
59-
"resetNum": 4,
60-
"pauseTime": null,
61-
"status": 0
62-
},
63-
"signature": "a5879201e7fb4e3064390fccb0d8bbcf628c70bb237843101f314710ebfa0adc",
64-
"sign2": "coUVZrl9x43Dql30LoOOpp/U7+gVb7298CeYu6uu8gT1RRxsf4jvyz/xQckiDWd5Sj43dl5AAzdmJGPPFtyQC3haU20H6v09C6whJqSwHDuizT+SW7VFZbWT3jhc+y1bgkYEhbyxHK9hkTGF8hlMk6HSkhAg1vl8t/E7ZcScmh22ZRYXMRijZEEPCgNbDTXDwySqdRnEaLc17z4uvGG/+B2C/60T4aH4VFnFjDyCuIlxCOgMOUM3QcXj0KZakmHxddURpAULfBi00LCamJlJIeUFbnlg3vcrNoCxD/jpHmdZn0jr30jXpgljhAb5AxsX1xwdF5wYROiJTWv6U6nm0A=="
65-
})";
40+
const auto resp =
41+
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})";
6642
const auto chunkLength = std::format("{:x}", strlen(resp));
6743
const auto firstChunk = std::format("{}\r\n{}\r\n", chunkLength, resp);
6844
const auto secondChunk = std::format("0\r\n\r\n");
6945
const auto aggregated = firstChunk + secondChunk;
7046

47+
bool doneMagic = false;
48+
7149
size_t respHandler(void *a1, char *content, size_t length, uint64_t *a4, uint32_t *a5) {
7250
if (fakeResp == true) {
7351
fakeResp = false;
7452
memcpy(content, aggregated.c_str(), aggregated.size() + 1);
7553
length = aggregated.size();
54+
doneMagic = true;
7655
}
7756

7857
return oRespHandler(a1, content, length, a4, a5);
@@ -149,7 +128,7 @@ void start() {
149128
{
150129
const void *found = Sig::find(
151130
exe, size,
152-
"48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 55 41 54 41 55 41 56 41 57 48 8D 6C 24 C9 48 81 EC C0");
131+
"40 53 56 41 56 41 57 48 83 EC 28 48 BB FF FF FF FF FF FF FF 7F 4D 8B F9 4C 8B F2 48 8B F1 48 3B D3");
153132

154133
if (found != nullptr) {
155134
MH_CreateHook((LPVOID)found, hwid, (LPVOID *)&oHwid);
@@ -175,6 +154,13 @@ void start() {
175154
}
176155
}
177156

157+
while (doneMagic == false) {
158+
Sleep(1);
159+
}
160+
161+
MH_DisableHook(MH_ALL_HOOKS);
162+
MH_RemoveHook(MH_ALL_HOOKS);
163+
178164
{
179165
const auto remoteThreadEx = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "CreateRemoteThreadEx");
180166
MH_CreateHook((LPVOID)remoteThreadEx, (LPVOID)createThread, (LPVOID *)&oCreateRemoteThreadEx);

0 commit comments

Comments
 (0)