|
发表于 2025-3-7 00:07:53
|
显示全部楼层
山东省青岛市
使用哈希值验证
计算正版 vvv.dll 的哈希值(如 MD5、SHA - 1、SHA - 256 等),将该哈希值硬编码到 test.exe 中。在 test.exe 启动时,加载 vvv.dll 并重新计算其哈希值,将计算得到的哈希值与硬编码的哈希值进行比较,如果相同则认为是正版 DLL,主程序可以正常启动,否则拒绝启动。
1. 计算 vvv.dll 的哈希值
可以使用第三方库(如 OpenSSL)来计算 DLL 文件的哈希值。以下是一个使用 OpenSSL 计算 SHA - 256 哈希值的示例代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <openssl/sha.h>
std::string calculateSHA256(const std::string& filename) {
std::ifstream file(filename, std::ios::binary);
if (!file) {
return "";
}
SHA256_CTX sha256;
SHA256_Init(&sha256);
const int bufferSize = 32768;
char buffer[bufferSize];
while (file.read(buffer, bufferSize)) {
SHA256_Update(&sha256, buffer, bufferSize);
}
SHA256_Update(&sha256, buffer, file.gcount());
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_Final(hash, &sha256);
std::ostringstream oss;
for (int i = 0; i < SHA256_DIGEST_LENGTH; ++i) {
oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);
}
return oss.str();
}
2.在 test.exe 中验证哈希值
#include <iostream>
#include <windows.h>
// 硬编码正版 DLL 的 SHA - 256 哈希值
const std::string validHash = "your_valid_sha256_hash";
bool verifyDLL() {
std::string dllPath = "vvv.dll";
std::string calculatedHash = calculateSHA256(dllPath);
return calculatedHash == validHash;
}
int main() {
if (!verifyDLL()) {
std::cout << "Invalid DLL detected. Program will not start." << std::endl;
return 1;
}
// 加载 DLL
HINSTANCE hDLL = LoadLibrary("vvv.dll");
if (hDLL == NULL) {
std::cout << "Failed to load DLL." << std::endl;
return 1;
}
// 主程序正常启动逻辑
std::cout << "Program started successfully." << std::endl;
// 释放 DLL
FreeLibrary(hDLL);
return 0;
} |
|