Skip to content

Commit 4ca1d30

Browse files
committed
Remove integrity watchdog
1 parent da1ce7e commit 4ca1d30

1 file changed

Lines changed: 0 additions & 47 deletions

File tree

auth.cpp

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ std::string generate_random_number();
8585
std::string curl_escape(CURL* curl, const std::string& input);
8686
auto check_section_integrity( const char *section_name, bool fix ) -> bool;
8787
void integrity_check();
88-
void integrity_watchdog();
8988
std::string extract_host(const std::string& url);
9089
bool hosts_override_present(const std::string& host);
9190
bool module_paths_ok();
@@ -114,13 +113,11 @@ std::array<uint8_t, 16> pro_verify{};
114113
std::array<uint8_t, 16> pro_checkinit{};
115114
std::array<uint8_t, 16> pro_error{};
116115
std::array<uint8_t, 16> pro_integrity{};
117-
std::array<uint8_t, 16> pro_watchdog{};
118116
std::array<uint8_t, 16> pro_section{};
119117

120118
void KeyAuth::api::init()
121119
{
122120
std::thread(runChecks).detach();
123-
std::thread(integrity_watchdog).detach();
124121
snapshot_prologues();
125122
seed = generate_random_number();
126123
std::atexit([]() { cleanUpSeedData(seed); });
@@ -2012,14 +2009,12 @@ void snapshot_prologues()
20122009
const auto check_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&checkInit));
20132010
const auto error_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&error));
20142011
const auto integ_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&integrity_check));
2015-
const auto watch_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&integrity_watchdog));
20162012
const auto section_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&check_section_integrity));
20172013
std::memcpy(pro_req.data(), req_ptr, pro_req.size());
20182014
std::memcpy(pro_verify.data(), verify_ptr, pro_verify.size());
20192015
std::memcpy(pro_checkinit.data(), check_ptr, pro_checkinit.size());
20202016
std::memcpy(pro_error.data(), error_ptr, pro_error.size());
20212017
std::memcpy(pro_integrity.data(), integ_ptr, pro_integrity.size());
2022-
std::memcpy(pro_watchdog.data(), watch_ptr, pro_watchdog.size());
20232018
std::memcpy(pro_section.data(), section_ptr, pro_section.size());
20242019
prologues_ready.store(true);
20252020
}
@@ -2033,14 +2028,12 @@ bool prologues_ok()
20332028
const auto check_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&checkInit));
20342029
const auto error_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&error));
20352030
const auto integ_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&integrity_check));
2036-
const auto watch_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&integrity_watchdog));
20372031
const auto section_ptr = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(&check_section_integrity));
20382032
return std::memcmp(pro_req.data(), req_ptr, pro_req.size()) == 0 &&
20392033
std::memcmp(pro_verify.data(), verify_ptr, pro_verify.size()) == 0 &&
20402034
std::memcmp(pro_checkinit.data(), check_ptr, pro_checkinit.size()) == 0 &&
20412035
std::memcmp(pro_error.data(), error_ptr, pro_error.size()) == 0 &&
20422036
std::memcmp(pro_integrity.data(), integ_ptr, pro_integrity.size()) == 0 &&
2043-
std::memcmp(pro_watchdog.data(), watch_ptr, pro_watchdog.size()) == 0 &&
20442037
std::memcmp(pro_section.data(), section_ptr, pro_section.size()) == 0;
20452038
}
20462039

@@ -2457,7 +2450,6 @@ void checkInit() {
24572450
!func_region_ok(reinterpret_cast<const void*>(&checkInit)) ||
24582451
!func_region_ok(reinterpret_cast<const void*>(&error)) ||
24592452
!func_region_ok(reinterpret_cast<const void*>(&integrity_check)) ||
2460-
!func_region_ok(reinterpret_cast<const void*>(&integrity_watchdog)) ||
24612453
!func_region_ok(reinterpret_cast<const void*>(&check_section_integrity))) {
24622454
error(XorStr("function region check failed, possible hook detected."));
24632455
}
@@ -2476,45 +2468,6 @@ void integrity_check() {
24762468
}
24772469
}
24782470

2479-
void integrity_watchdog() {
2480-
std::random_device rd;
2481-
std::mt19937 gen(rd());
2482-
std::uniform_int_distribution<int> sleep_seconds(20, 50);
2483-
while (true) {
2484-
Sleep(static_cast<DWORD>(sleep_seconds(gen) * 1000));
2485-
if (!initialized || !LoggedIn.load())
2486-
continue;
2487-
const auto now = std::chrono::duration_cast<std::chrono::seconds>(
2488-
std::chrono::system_clock::now().time_since_epoch()).count();
2489-
const auto last_mod = last_module_check.load();
2490-
if (now - last_mod > 120) {
2491-
last_module_check.store(now);
2492-
if (!module_paths_ok() || duplicate_system_modules_present() || user_writable_module_present() || !core_modules_signed() || hypervisor_present()) {
2493-
error(XorStr("module path check failed, possible side-load detected."));
2494-
}
2495-
}
2496-
if (!prologues_ok()) {
2497-
error(XorStr("function prologue check failed, possible inline hook detected."));
2498-
}
2499-
if (!func_region_ok(reinterpret_cast<const void*>(&KeyAuth::api::req)) ||
2500-
!func_region_ok(reinterpret_cast<const void*>(&VerifyPayload)) ||
2501-
!func_region_ok(reinterpret_cast<const void*>(&checkInit)) ||
2502-
!func_region_ok(reinterpret_cast<const void*>(&error)) ||
2503-
!func_region_ok(reinterpret_cast<const void*>(&integrity_check)) ||
2504-
!func_region_ok(reinterpret_cast<const void*>(&integrity_watchdog)) ||
2505-
!func_region_ok(reinterpret_cast<const void*>(&check_section_integrity))) {
2506-
error(XorStr("function region check failed, possible hook detected."));
2507-
}
2508-
if (check_section_integrity(XorStr(".text").c_str(), false)) {
2509-
const int streak = integrity_fail_streak.fetch_add(1) + 1;
2510-
if (streak >= 2) {
2511-
error(XorStr("check_section_integrity() failed, don't tamper with the program."));
2512-
}
2513-
} else {
2514-
integrity_fail_streak.store(0);
2515-
}
2516-
}
2517-
}
25182471
// code submitted in pull request from https://github.com/BINM7MD
25192472
BOOL bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
25202473
{

0 commit comments

Comments
 (0)