Я пытаюсь создать базовую программу с защитой от несанкционированного доступа к функции licenseCheck, однако она всегда говорит, что она правильная, даже если я не использую всю функцию licenseCheck в Ollydbg или изменяю и перестраиваю код.
Я следую книге «Тайное программное обеспечение» и написал следующую программу:
#include "stdafx.h"
#define HASH 5131241
void BEGIN() {}
const std::string correctlicense("ABC");
bool licenseCheck() {
std::cout << "Enter license: ";
std::string license;
std::cin >> license;
volatile DWORD d;
// Fingerprint
__asm {
lea ebx, d
mov ebx, 0x050b072b
}
return license.compare(correctlicense) == 0;
}
UINT hash(UINT *beginAddress, UINT *endAddress) {
UINT h = *beginAddress;
for (; beginAddress <= endAddress; beginAddress++) {
h ^= *beginAddress;
}
return h;
}
void END() {}int main()
{
UINT uHash = hash((UINT*)BEGIN, (UINT*)END);
std::cout << "[Protection checks]" << std::endl;
std::cout << "Tampering: ";
if (uHash != HASH) {
std::cout << "Tampering detected! ( " << uHash << " )" << std::endl;
system("PAUSE");
return 0;
}
else {
std::cout << "Correct" << std::endl;
}
if (licenseCheck()) {
std::cout << "Correct!" << std::endl;
}
else {
std::cout << "Failed!" << std::endl;
}system("PAUSE");
return 0;
}
Программа в основном «хеширует» код между функцией BEGIN и функцией END, но, похоже, не работает. Хеш всегда корректен даже после взлома.
Я использую Windows 7 и Visual Studio 2017 для сборки / запуска программы.
Задача ещё не решена.
Других решений пока нет …