mirror of
https://github.com/HolographicHat/Yae.git
synced 2026-03-21 03:49:48 +08:00
update
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
using namespace Genshin;
|
||||
|
||||
DO_APP_FUNC(0x02BC1930, ByteArray*, MessageExtensions_ToByteArray, (IMessage msg, MethodInfo* method));
|
||||
DO_APP_FUNC(0x04E9B3F0, String*, Convert_ToBase64String, (ByteArray* arr, MethodInfo* method));
|
||||
DO_APP_FUNC(0x01591250, void, Packet_SetDispstchData, (ByteArray* data, MethodInfo* method));
|
||||
DO_APP_FUNC(0x04E9B3F0, String*, Convert_ToBase64String, (ByteArray* value, MethodInfo* method));
|
||||
DO_APP_FUNC(0x0517DD30, String*, BitConverter_ToString, (ByteArray* value, INT32 start, INT32 length, MethodInfo* method));
|
||||
DO_APP_FUNC(0x015913C0, void, Packet_Xor, (ByteArray** data, INT32 length, MethodInfo* method));
|
||||
|
||||
@@ -14,32 +14,18 @@ namespace Genshin {
|
||||
|
||||
using std::string;
|
||||
|
||||
ull GetAddressByExports(HMODULE base, const char* name) {
|
||||
ull funcAddr = reinterpret_cast<ull>(GetProcAddress(base, name));
|
||||
UINT64 GetAddressByExports(HMODULE base, const char* name) {
|
||||
UINT64 funcAddr = reinterpret_cast<UINT64>(GetProcAddress(base, name));
|
||||
return funcAddr == 0 ? 0 : funcAddr;
|
||||
}
|
||||
|
||||
ull milliseconds_now() {
|
||||
static LARGE_INTEGER s_frequency;
|
||||
static BOOL s_use_qpc = QueryPerformanceFrequency(&s_frequency);
|
||||
if (s_use_qpc) {
|
||||
LARGE_INTEGER now;
|
||||
QueryPerformanceCounter(&now);
|
||||
return (1000LL * now.QuadPart) / s_frequency.QuadPart;
|
||||
} else {
|
||||
return GetTickCount64();
|
||||
}
|
||||
}
|
||||
|
||||
void InitIL2CPP() {
|
||||
auto start = milliseconds_now();
|
||||
auto hBase = GetModuleHandle("UserAssembly.dll");
|
||||
auto bAddr = (ull)hBase;
|
||||
auto bAddr = (UINT64)hBase;
|
||||
#define DO_API(r, n, p) n = (r (*) p) GetAddressByExports(hBase, #n);
|
||||
#include "il2cpp-api-functions.h"
|
||||
#undef DO_API
|
||||
#define DO_APP_FUNC(a, r, n, p) n = (r (*) p)(bAddr + a)
|
||||
#include "il2cpp-functions.h"
|
||||
#undef DO_APP_FUNC
|
||||
printf("Initialized in %llu ms.\n", milliseconds_now() - start);
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
|
||||
// 添加要在此处预编译的标头
|
||||
|
||||
typedef unsigned long long ull;
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <codecvt>
|
||||
|
||||
@@ -1,6 +1,26 @@
|
||||
#include "pch.h"
|
||||
#include "util.h"
|
||||
|
||||
#pragma region StringConvert
|
||||
|
||||
string IlStringToString(Il2CppString* str, UINT codePage) {
|
||||
auto chars = reinterpret_cast<const wchar_t*>(str->chars);
|
||||
auto len = WideCharToMultiByte(codePage, 0, chars, -1, nullptr, 0, nullptr, nullptr);
|
||||
auto buffer = new char[len];
|
||||
WideCharToMultiByte(codePage, 0, chars, -1, buffer, len, nullptr, nullptr);
|
||||
return string(buffer);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region ByteUtils
|
||||
bool IsLittleEndian() {
|
||||
UINT i = 1;
|
||||
char* c = (char*)&i;
|
||||
return (*c);
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
#pragma region FindMainWindowByPID
|
||||
|
||||
struct HandleData {
|
||||
|
||||
@@ -1,6 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
using std::string;
|
||||
|
||||
bool IsLittleEndian();
|
||||
HWND FindMainWindowByPID(DWORD pid);
|
||||
string IlStringToString(Il2CppString* str, UINT codePage = CP_ACP);
|
||||
|
||||
#define ErrorDialogT(title, msg) MessageBox(unityWnd, msg, title, MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
|
||||
#define ErrorDialog(msg) ErrorDialogT("YaeAchievement", msg)
|
||||
|
||||
template<class T>
|
||||
static T ReadMapped(void* data, int offset, bool littleEndian = false) {
|
||||
char* cData = (char*)data;
|
||||
T result = {};
|
||||
if (IsLittleEndian() != littleEndian) {
|
||||
for (int i = 0; i < sizeof(T); i++)
|
||||
((char*)&result)[i] = cData[offset + sizeof(T) - i - 1];
|
||||
return result;
|
||||
}
|
||||
memcpy(&result, cData + offset, sizeof(result));
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user