From 75454b3fa5abcdffc6aea987ecfe8739a93e5768 Mon Sep 17 00:00:00 2001 From: Akash Mozumdar Date: Fri, 11 Jan 2019 17:14:49 -0500 Subject: [PATCH] save attached games and allow launching from textractor using locale emulator --- GUI/extenwindow.cpp | 15 +++++------ GUI/main.cpp | 1 - GUI/mainwindow.cpp | 50 ++++++++++++++++++++++++++++++++++--- GUI/mainwindow.h | 3 +++ GUI/misc.cpp | 7 ++++++ GUI/misc.h | 1 + GUI/qtcommon.h | 1 + include/defs.h | 1 + include/text.h | 4 +++ release/LoaderDll.dll | Bin 0 -> 11464 bytes release/LocaleEmulator.dll | Bin 0 -> 66760 bytes 11 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 release/LoaderDll.dll create mode 100644 release/LocaleEmulator.dll diff --git a/GUI/extenwindow.cpp b/GUI/extenwindow.cpp index b36fe12..eee5402 100644 --- a/GUI/extenwindow.cpp +++ b/GUI/extenwindow.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -30,14 +29,12 @@ namespace { if (extenName == ITH_DLL) return; // Extension is dll and exports "OnNewSentence" - HMODULE module = GetModuleHandleW(S(extenName).c_str()); - if (!module) module = LoadLibraryW(S(extenName).c_str()); - if (!module) return; - FARPROC callback = GetProcAddress(module, "OnNewSentence"); - if (!callback) return; - std::scoped_lock writeLock(extenMutex); - extensions[extenName] = (wchar_t*(*)(const wchar_t*, const InfoForExtension*))callback; - extenNames.push_back(extenName); + if (FARPROC callback = GetProcAddress(LoadLibraryOnce(S(extenName)), "OnNewSentence")) + { + std::scoped_lock writeLock(extenMutex); + extensions[extenName] = (wchar_t*(*)(const wchar_t*, const InfoForExtension*))callback; + extenNames.push_back(extenName); + } } void Unload(QString extenName) diff --git a/GUI/main.cpp b/GUI/main.cpp index cd9b31a..5dbebb2 100644 --- a/GUI/main.cpp +++ b/GUI/main.cpp @@ -2,7 +2,6 @@ #include "misc.h" #include "host/util.h" #include -#include int main(int argc, char *argv[]) { diff --git a/GUI/mainwindow.cpp b/GUI/mainwindow.cpp index 0717b90..8c54689 100644 --- a/GUI/mainwindow.cpp +++ b/GUI/mainwindow.cpp @@ -11,6 +11,7 @@ #include #include #include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -20,6 +21,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); for (auto[text, slot] : Array>{ { ATTACH, &MainWindow::AttachProcess }, + { LAUNCH, &MainWindow::LaunchProcess }, { DETACH, &MainWindow::DetachProcess }, { ADD_HOOK, &MainWindow::AddHook }, { SAVE_HOOKS, &MainWindow::SaveHooks }, @@ -90,6 +92,9 @@ void MainWindow::ProcessConnected(DWORD processId) { QString process = S(Util::GetModuleFilename(processId).value_or(L"???")); ui->processCombo->addItem(QString::number(processId, 16).toUpper() + ": " + QFileInfo(process).fileName()); + if (process == "???") return; + + QTextFile(GAME_SAVE_FILE, QIODevice::WriteOnly | QIODevice::Append).write((process + "\n").toUtf8()); QStringList allProcesses = QString(QTextFile(HOOK_SAVE_FILE, QIODevice::ReadOnly).readAll()).split("\n", QString::SkipEmptyParts); // Can't use QFileInfo::absoluteFilePath since hook save file has '\\' as path separator @@ -198,13 +203,53 @@ void MainWindow::AttachProcess() QStringList processList(allProcesses.uniqueKeys()); processList.sort(Qt::CaseInsensitive); - bool ok; QString process = QInputDialog::getItem(this, SELECT_PROCESS, ATTACH_INFO, processList, 0, true, &ok, Qt::WindowCloseButtonHint); if (!ok) return; if (process.toInt(nullptr, 0)) Host::InjectProcess(process.toInt(nullptr, 0)); else for (auto processId : allProcesses.values(process)) Host::InjectProcess(processId); } +void MainWindow::LaunchProcess() +{ + QStringList savedProcesses = QString::fromUtf8(QTextFile(GAME_SAVE_FILE, QIODevice::ReadOnly).readAll()).split("\n", QString::SkipEmptyParts); + savedProcesses.removeDuplicates(); + savedProcesses.sort(Qt::CaseInsensitive); + savedProcesses.push_back(SEARCH_GAME); + std::wstring process = S(QInputDialog::getItem(this, SELECT_PROCESS, "", savedProcesses, 0, true, &ok, Qt::WindowCloseButtonHint)); + if (!ok) return; + if (S(process) == SEARCH_GAME) process = S(QDir::toNativeSeparators(QFileDialog::getOpenFileName(this, SELECT_PROCESS, "C:\\", PROCESSES))); + if (process.empty()) return; + std::wstring path = std::wstring(process).erase(process.rfind(L'\\')); + PROCESS_INFORMATION info = {}; + if (HMODULE localeEmulator = LoadLibraryOnce(L"LoaderDll")) + { + // see https://github.com/xupefei/Locale-Emulator/blob/aa99dec3b25708e676c90acf5fed9beaac319160/LEProc/LoaderWrapper.cs#L252 + struct + { + ULONG AnsiCodePage = Host::defaultCodepage; + ULONG OemCodePage = Host::defaultCodepage; + ULONG LocaleID = LANG_JAPANESE; + ULONG DefaultCharset = DEFAULT_CHARSET; + ULONG HookUiLanguageApi = FALSE; + WCHAR DefaultFaceName[LF_FACESIZE] = {}; + TIME_ZONE_INFORMATION Timezone; + ULONG64 Unused = 0; + } LEB; + GetTimeZoneInformation(&LEB.Timezone); + ((LONG(__stdcall*)(decltype(&LEB), LPCWSTR appName, LPWSTR commandLine, LPCWSTR currentDir, void*, void*, PROCESS_INFORMATION*, void*, void*, void*, void*)) + GetProcAddress(localeEmulator, "LeCreateProcess"))(&LEB, process.c_str(), NULL, path.c_str(), NULL, NULL, &info, NULL, NULL, NULL, NULL); + } + if (info.hProcess == NULL) + { + STARTUPINFOW DUMMY = { sizeof(DUMMY) }; + CreateProcessW(process.c_str(), NULL, nullptr, nullptr, FALSE, 0, nullptr, path.c_str(), &DUMMY, &info); + } + if (info.hProcess == NULL) return Host::AddConsoleOutput(LAUNCH_FAILED); + Host::InjectProcess(info.dwProcessId); + CloseHandle(info.hProcess); + CloseHandle(info.hThread); +} + void MainWindow::DetachProcess() { Host::DetachProcess(GetSelectedProcessId()); @@ -212,7 +257,6 @@ void MainWindow::DetachProcess() void MainWindow::AddHook() { - bool ok; QString hookCode = QInputDialog::getText(this, ADD_HOOK, CODE_INFODUMP, QLineEdit::Normal, "", &ok, Qt::WindowCloseButtonHint); if (!ok) return; if (auto hp = ParseCode(hookCode)) Host::InsertHook(GetSelectedProcessId(), hp.value()); @@ -233,7 +277,7 @@ void MainWindow::SaveHooks() if (!(hp.type & HOOK_ENGINE)) hookCodes[tp.addr] = GenerateCode(hp, tp.processId); } } - QTextFile(HOOK_SAVE_FILE, QIODevice::Append).write((S(processName.value()) + " , " + QStringList(hookCodes.values()).join(" , ") + "\n").toUtf8()); + QTextFile(HOOK_SAVE_FILE, QIODevice::WriteOnly | QIODevice::Append).write((S(processName.value()) + " , " + QStringList(hookCodes.values()).join(" , ") + "\n").toUtf8()); } } diff --git a/GUI/mainwindow.h b/GUI/mainwindow.h index 87a3017..97080a9 100644 --- a/GUI/mainwindow.h +++ b/GUI/mainwindow.h @@ -15,6 +15,8 @@ public: ~MainWindow(); private: + inline static thread_local bool ok = false; + void closeEvent(QCloseEvent*) override; void ProcessConnected(DWORD processId); void ProcessDisconnected(DWORD processId); @@ -26,6 +28,7 @@ private: DWORD GetSelectedProcessId(); std::unordered_map GetMiscInfo(TextThread* thread); void AttachProcess(); + void LaunchProcess(); void DetachProcess(); void AddHook(); void SaveHooks(); diff --git a/GUI/misc.cpp b/GUI/misc.cpp index 2d8a280..b508f4d 100644 --- a/GUI/misc.cpp +++ b/GUI/misc.cpp @@ -265,6 +265,13 @@ QString GenerateCode(HookParam hp, DWORD processId) else return GenerateHCode(hp, processId); } +HMODULE LoadLibraryOnce(std::wstring fileName) +{ + HMODULE module = GetModuleHandleW(fileName.c_str()); + if (!module) module = LoadLibraryW(fileName.c_str()); + return module; +} + TEST( assert(ParseCode("/HQN936#-c*C:C*1C@4AA:gdi.dll:GetTextOutA")), assert(ParseCode("HB4@0")), diff --git a/GUI/misc.h b/GUI/misc.h index d07407d..8b48496 100644 --- a/GUI/misc.h +++ b/GUI/misc.h @@ -13,3 +13,4 @@ inline std::wstring S(const QString& S) { return { S.toStdWString() }; } inline QString S(const std::wstring& S) { return QString::fromStdWString(S); } std::optional ParseCode(QString HCode); QString GenerateCode(HookParam hp, DWORD processId); +HMODULE LoadLibraryOnce(std::wstring fileName); diff --git a/GUI/qtcommon.h b/GUI/qtcommon.h index 89cee8e..91d810c 100644 --- a/GUI/qtcommon.h +++ b/GUI/qtcommon.h @@ -8,5 +8,6 @@ #include #include #include +#include #include #include diff --git a/include/defs.h b/include/defs.h index 22654e0..0adfe7d 100644 --- a/include/defs.h +++ b/include/defs.h @@ -23,6 +23,7 @@ constexpr auto ITH_HOOKMAN_MUTEX_ = L"VNR_HOOKMAN_"; // ITH_HOOKMAN_%d constexpr auto ITH_DLL = L"vnrhook"; // .dll but LoadLibrary automatically adds that constexpr auto CONFIG_FILE = u8"Textractor.ini"; constexpr auto HOOK_SAVE_FILE = u8"SavedHooks.txt"; +constexpr auto GAME_SAVE_FILE = u8"Games.txt"; constexpr auto EXTEN_SAVE_FILE = u8"Extensions.txt"; // Functions diff --git a/include/text.h b/include/text.h index 548ad8d..0fe95cb 100644 --- a/include/text.h +++ b/include/text.h @@ -5,6 +5,7 @@ #ifdef ENGLISH constexpr auto ATTACH = u8"Attach to game"; +constexpr auto LAUNCH = u8"Launch game"; constexpr auto DETACH = u8"Detach from game"; constexpr auto ADD_HOOK = u8"Add hook"; constexpr auto SAVE_HOOKS = u8"Save hook(s)"; @@ -13,6 +14,8 @@ constexpr auto EXTENSIONS = u8"Extensions"; constexpr auto SELECT_PROCESS = u8"Select Process"; constexpr auto ATTACH_INFO = u8R"(If you don't see the process you want to attach, try running with admin rights You can also type in the process id)"; +constexpr auto SEARCH_GAME = u8"Select from computer"; +constexpr auto PROCESSES = u8"Processes (*.exe)"; constexpr auto CODE_INFODUMP = u8R"(Search for text S[codepage#]text OR @@ -49,6 +52,7 @@ constexpr auto UPDATE_AVAILABLE = L"Update available: download it from https://g constexpr auto ALREADY_INJECTED = L"Textractor: already injected"; constexpr auto ARCHITECTURE_MISMATCH = L"Textractor: architecture mismatch: try 32 bit Textractor instead"; constexpr auto INJECT_FAILED = L"Textractor: couldn't inject"; +constexpr auto LAUNCH_FAILED = L"Textractor: couldn't launch"; constexpr auto INVALID_CODE = L"Textractor: invalid code"; constexpr auto INVALID_CODEPAGE = L"Textractor: couldn't convert text (invalid codepage?)"; constexpr auto PIPE_CONNECTED = u8"Textractor: pipe connected"; diff --git a/release/LoaderDll.dll b/release/LoaderDll.dll new file mode 100644 index 0000000000000000000000000000000000000000..f39bbeea9a233350d6f4367b1c4dba59afe732d2 GIT binary patch literal 11464 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 literal 0 HcmV?d00001