-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDisabler.cpp
74 lines (53 loc) · 2.43 KB
/
Disabler.cpp
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "Disabler.h"
Disabler::Disabler() : AbstractModule("Disabler", Category::World) {
EventManager::getInstance().reg(Event::EventRenderOverlay, MakeHandler(this, &Disabler::onRenderOverlay));
}
Disabler* Disabler::getInstance() {
static Disabler* inst = new Disabler();
return inst;
}
void Disabler::onEnabled() {
}
void Disabler::onDisabled() {
}
void bypass(int* wndACAddr) {
Disabler* disabler = Disabler::getInstance();
DWORD EnumWindowsaddr = (DWORD)GetProcAddress(GetModuleHandleA("user32.dll"), "EnumWindows");
unsigned char data[5] = { 0x33 ,0xC0,0xC2,0x08,0x00 };
WriteProcessMemory(GetCurrentProcess(), reinterpret_cast<LPVOID>(EnumWindowsaddr), data, 5, nullptr);
DWORD EnumProcessesaddr = (DWORD)GetProcAddress(GetModuleHandleA("user32.dll"), "EnumProcesses");
WriteProcessMemory(GetCurrentProcess(), reinterpret_cast<LPVOID>(EnumProcessesaddr), data, 5, nullptr);
//BYTE data1[6] = { 0x90, 0x90, 0x90, 0x90 ,0x90 ,0x90 };
//WriteProcessMemory(GetCurrentProcess(), reinterpret_cast<LPVOID>(Client::hWorld + Offsets::CloudServerBypass), data1, 6, nullptr);
NotificationManager::getInstance().makeNotification("Anti-Cheat Bypassed!", Type::SUCCESS);
//Sleep(1000);
//if (disabler->startBypass()) {
// Sleep(10000);
// disabler->endBypass();
// Sleep(9000);
// *wndACAddr = 16777216;
//}
//else {
// disabler->bypassError();
//}
}
void Disabler::onRenderOverlay() {
}
void Disabler::bypassError() {
Utility::notice("Disabler没能成功绕过反作弊,但是这并不影响Hanabi Client正常工作,您可以继续使用Hanabi Client(如果您愿意承担相应的风险),但是还是建议您暂时不要再继续使用Hanabi Client,应等候开发者修复该错误!", Level::ERR);
NotificationManager::getInstance().makeNotification("Disabler Error!", Type::EXCEPTION);
this->disable();
}
bool Disabler::startBypass() {
DWORD oldProtect = 0;
VirtualProtect(ToPointer(Client::hWorld + Offsets::AntiCrash, void), 1, PAGE_EXECUTE_READWRITE, &oldProtect);
bool res = Memory::write<unsigned char>(Client::hWorld + Offsets::AntiCrash, 0x74);
VirtualProtect(ToPointer(Client::hWorld + Offsets::AntiCrash, void), 1, oldProtect, nullptr);
return res;
}
void Disabler::endBypass() {
DWORD oldProtect = 0;
VirtualProtect(ToPointer(Client::hWorld + Offsets::AntiCrash, void), 1, PAGE_EXECUTE_READWRITE, &oldProtect);
Memory::write<unsigned char>(Client::hWorld + Offsets::AntiCrash, 0x75);
VirtualProtect(ToPointer(Client::hWorld + Offsets::AntiCrash, void), 1, oldProtect, nullptr);
}