根据 hash 寻找启动文件,启动前校验 system.arc 以确保是正确的游戏
This commit is contained in:
@@ -71,3 +71,4 @@ target_link_libraries(jewena_patch utils)
|
|||||||
target_link_libraries(jewena_patch zip)
|
target_link_libraries(jewena_patch zip)
|
||||||
|
|
||||||
add_executable(jewena-chs WIN32 main.cpp winres.rc jewena-chs.exe.manifest)
|
add_executable(jewena-chs WIN32 main.cpp winres.rc jewena-chs.exe.manifest)
|
||||||
|
target_link_libraries(jewena-chs utils)
|
||||||
|
|||||||
62
main.cpp
62
main.cpp
@@ -1,5 +1,53 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "hash_lib.h"
|
||||||
|
#include "wchar_util.h"
|
||||||
|
#include "str_util.h"
|
||||||
|
|
||||||
|
using namespace hash_lib;
|
||||||
|
|
||||||
|
static std::string dir;
|
||||||
|
|
||||||
|
std::wstring FindStartProcess() {
|
||||||
|
wchar_t path[MAX_PATH];
|
||||||
|
if (GetModuleFileNameW(NULL, path, MAX_PATH) == 0) {
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
std::string tPath;
|
||||||
|
if (!wchar_util::wstr_to_str(tPath, path, CP_UTF8)) {
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
dir = fileop::dirname(tPath);
|
||||||
|
dir = str_util::str_replace(dir, "/", "\\");
|
||||||
|
std::string name = fileop::join(dir, "*.exe");
|
||||||
|
std::wstring wName;
|
||||||
|
if (!wchar_util::str_to_wstr(wName, name, CP_UTF8)) {
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
WIN32_FIND_DATAW data;
|
||||||
|
auto re = FindFirstFileW(wName.c_str(), &data);
|
||||||
|
if (re == INVALID_HANDLE_VALUE) {
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
std::string tmp;
|
||||||
|
if (!wchar_util::wstr_to_str(tmp, data.cFileName, CP_UTF8)) {
|
||||||
|
FindClose(re);
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
if (hashHexFile<SHA512>(tmp) == "01bb9a1b072faa2e10e5489c624eb3b65a7304fd1e32f9015779c341102439e3ec229aa9cb4e1c1fe76e42803320a9c68cbf62cfaa8b145ac7f1481eb37185dc") {
|
||||||
|
FindClose(re);
|
||||||
|
return data.cFileName;
|
||||||
|
}
|
||||||
|
BOOL r = FindNextFileW(re, &data);
|
||||||
|
if (!r) {
|
||||||
|
FindClose(re);
|
||||||
|
if (GetLastError() == ERROR_NO_MORE_FILES) break;
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
} while (1);
|
||||||
|
return L"";
|
||||||
|
}
|
||||||
|
|
||||||
void ShowErrorMsg(LPCWSTR text) {
|
void ShowErrorMsg(LPCWSTR text) {
|
||||||
wchar_t* buf[1024];
|
wchar_t* buf[1024];
|
||||||
@@ -9,7 +57,7 @@ void ShowErrorMsg(LPCWSTR text) {
|
|||||||
|
|
||||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
|
||||||
// 要启动的进程名
|
// 要启动的进程名
|
||||||
const wchar_t* processName = L"jewena.exe";
|
auto processName = FindStartProcess();
|
||||||
// 要注入的 DLL 路径
|
// 要注入的 DLL 路径
|
||||||
const wchar_t* dllPath = L"jewena_patch.dll";
|
const wchar_t* dllPath = L"jewena_patch.dll";
|
||||||
|
|
||||||
@@ -21,8 +69,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||||||
|
|
||||||
si.cb = sizeof(si);
|
si.cb = sizeof(si);
|
||||||
|
|
||||||
|
if (processName.empty()) {
|
||||||
|
MessageBoxW(nullptr, L"无法找到游戏的启动文件。", L"错误", MB_ICONERROR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hashHexFile<SHA512>(fileop::join(dir, "system.arc")) != "c69925d1016d1a4b327193bf97c6ac5d1940da0a5c5c28bd693d5655c33a6e0ea7c85e5fa057b98d9dde885f8bca320dee3e46f8b79913dc7a03cebddd1ac771") {
|
||||||
|
MessageBoxW(nullptr, L"system.arc 校验失败。请检查游戏是否正确。", L"错误", MB_ICONERROR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// 创建新进程
|
// 创建新进程
|
||||||
if (!CreateProcessW((LPCWSTR)processName, nullptr, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) {
|
if (!CreateProcessW(processName.c_str(), nullptr, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)) {
|
||||||
ShowErrorMsg(L"CreateProcessW failed: ");
|
ShowErrorMsg(L"CreateProcessW failed: ");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
2
utils
2
utils
Submodule utils updated: 252c20d068...eeeedae697
Reference in New Issue
Block a user