Базовая защита от несанкционированного доступа

Я пытаюсь создать базовую программу с защитой от несанкционированного доступа к функции 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 для сборки / запуска программы.

0 ответов

Другие вопросы по тегам