Compare commits
3 Commits
33e47e15a7
...
528f864177
| Author | SHA1 | Date | |
|---|---|---|---|
| 528f864177 | |||
| 55229222f7 | |||
| 520ce83c8d |
112
RLIdentity.cpp
112
RLIdentity.cpp
@ -1,5 +1,5 @@
|
||||
// RLIdentity.cpp
|
||||
// 1:1 Proven logic with ALL-SAFE JSON parsing (no dynamic allocations).
|
||||
// RLIdentity.cpp - v2.0.0 Bulletproof
|
||||
// 1:1 Proven logic with ALL-SAFE JSON parsing and Network Broadcast spoofing.
|
||||
|
||||
#include <Windows.h>
|
||||
#include <MinHook.h>
|
||||
@ -12,22 +12,8 @@
|
||||
#pragma comment(lib, "shell32.lib")
|
||||
|
||||
static char g_SpoofedName[256] = "Player";
|
||||
static void* g_LocalUserId = nullptr;
|
||||
|
||||
void ClearLog() {
|
||||
char path[MAX_PATH];
|
||||
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, path))) {
|
||||
char logFile[MAX_PATH];
|
||||
sprintf_s(logFile, "%s\\RLidentity\\log.txt", path);
|
||||
FILE* f = NULL;
|
||||
fopen_s(&f, logFile, "w");
|
||||
if (f) {
|
||||
fprintf(f, "[RLidentity] --- New Session Started ---\n");
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- Config Logic ---
|
||||
void LoadConfig() {
|
||||
char path[MAX_PATH];
|
||||
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, path))) {
|
||||
@ -63,82 +49,88 @@ void LoadConfig() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char tPath[MAX_PATH];
|
||||
sprintf_s(tPath, "%s\\RLidentity\\config.txt", path);
|
||||
fopen_s(&fp, tPath, "r");
|
||||
if (fp) {
|
||||
char line[256] = { 0 };
|
||||
if (fgets(line, sizeof(line), fp)) {
|
||||
line[strcspn(line, "\r\n")] = 0;
|
||||
if (strlen(line) > 0) strcpy_s(g_SpoofedName, 256, line);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- Hook Definitions ---
|
||||
|
||||
// 1. UserInfo Hook (Targets Scoreboard & Local UI)
|
||||
typedef int(__stdcall* CopyUserInfo_t)(void*, void*, void**);
|
||||
static CopyUserInfo_t oEOS_UserInfo_CopyUserInfo = nullptr;
|
||||
|
||||
typedef int(__stdcall* ToString_t)(void*, char*, int32_t*);
|
||||
static ToString_t oEOS_EpicAccountId_ToString = nullptr;
|
||||
|
||||
int __stdcall hkEOS_EpicAccountId_ToString(void* handle, char* buffer, int32_t* length) {
|
||||
if (handle && g_LocalUserId && handle == g_LocalUserId) {
|
||||
size_t spoofLen = strlen(g_SpoofedName);
|
||||
if (buffer && length && *length > (int32_t)spoofLen) {
|
||||
strcpy_s(buffer, *length, g_SpoofedName);
|
||||
*length = (int32_t)spoofLen + 1;
|
||||
return 0; // EOS_Success
|
||||
}
|
||||
}
|
||||
return oEOS_EpicAccountId_ToString(handle, buffer, length);
|
||||
}
|
||||
|
||||
int __stdcall hkEOS_UserInfo_CopyUserInfo(void* p1, void* p2, void** p3) {
|
||||
if (p2) {
|
||||
void** options = (void**)p2;
|
||||
g_LocalUserId = options[1]; // Capture LocalUserId handle
|
||||
}
|
||||
|
||||
int res = oEOS_UserInfo_CopyUserInfo(p1, p2, p3);
|
||||
|
||||
if (res == 0 && p2 && p3 && *p3) {
|
||||
void** options = (void**)p2;
|
||||
if (options[1] == options[2]) { // If targeting our own info
|
||||
if (res == 0 && p3 && *p3) {
|
||||
char** s = (char**)*p3;
|
||||
__try {
|
||||
// Offset 24: DisplayName, Offset 40: Nickname
|
||||
if (s[3]) s[3] = g_SpoofedName;
|
||||
if (s[5]) s[5] = g_SpoofedName;
|
||||
// Overwriting pointers directly at the SDK struct offsets
|
||||
if (s[3]) s[3] = g_SpoofedName; // DisplayName
|
||||
if (s[5]) s[5] = g_SpoofedName; // Nickname
|
||||
} __except (EXCEPTION_EXECUTE_HANDLER) {}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
// 2. Connect Mapping Hook (Targets Party/Invites & Offline Reverts)
|
||||
typedef int(__stdcall* GetConnectMap_t)(void*, void*, char*, int32_t*);
|
||||
static GetConnectMap_t oEOS_Connect_GetExternalAccountMapping = nullptr;
|
||||
|
||||
int __stdcall hkEOS_Connect_GetExternalAccountMapping(void* handle, void* options, char* buffer, int32_t* length) {
|
||||
int res = oEOS_Connect_GetExternalAccountMapping(handle, options, buffer, length);
|
||||
|
||||
// If the engine asks for a name mapping, we force our spoofed name into the buffer
|
||||
if (res == 0 && buffer && length) {
|
||||
strcpy_s(buffer, *length, g_SpoofedName);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
// 3. Presence Hook (Targets what friends see on their Friends List)
|
||||
typedef int(__stdcall* SetPresence_t)(void*, void*);
|
||||
static SetPresence_t oEOS_Presence_SetPresence = nullptr;
|
||||
|
||||
int __stdcall hkEOS_Presence_SetPresence(void* handle, void* options) {
|
||||
// This intercepts the packet before it is sent to Epic's Social Cloud.
|
||||
// If you wanted to spoof "Status" strings, you would modify the options struct here.
|
||||
return oEOS_Presence_SetPresence(handle, options);
|
||||
}
|
||||
|
||||
// --- Injection Logic ---
|
||||
|
||||
DWORD WINAPI HookThread(LPVOID lpParam) {
|
||||
ClearLog();
|
||||
LoadConfig();
|
||||
|
||||
if (MH_Initialize() == MH_OK) {
|
||||
HMODULE h = NULL;
|
||||
// Wait for EOS DLL (standard for RL)
|
||||
for (int i = 0; i < 100; i++) {
|
||||
h = GetModuleHandleA("EOSSDK-Win64-Shipping.dll");
|
||||
if (h) break;
|
||||
Sleep(100);
|
||||
}
|
||||
|
||||
if (h) {
|
||||
// Hook 1: Local Visibility
|
||||
LPVOID f1 = (LPVOID)GetProcAddress(h, "EOS_UserInfo_CopyUserInfo");
|
||||
if (f1 && MH_CreateHook(f1, (LPVOID)&hkEOS_UserInfo_CopyUserInfo, (LPVOID*)&oEOS_UserInfo_CopyUserInfo) == MH_OK) {
|
||||
if (f1) {
|
||||
MH_CreateHook(f1, (LPVOID)&hkEOS_UserInfo_CopyUserInfo, (LPVOID*)&oEOS_UserInfo_CopyUserInfo);
|
||||
MH_EnableHook(f1);
|
||||
}
|
||||
|
||||
LPVOID f2 = (LPVOID)GetProcAddress(h, "EOS_EpicAccountId_ToString");
|
||||
if (f2 && MH_CreateHook(f2, (LPVOID)&hkEOS_EpicAccountId_ToString, (LPVOID*)&oEOS_EpicAccountId_ToString) == MH_OK) {
|
||||
// Hook 2: Network Broadcast / Offline Revert fix
|
||||
LPVOID f2 = (LPVOID)GetProcAddress(h, "EOS_Connect_GetExternalAccountMapping");
|
||||
if (f2) {
|
||||
MH_CreateHook(f2, (LPVOID)&hkEOS_Connect_GetExternalAccountMapping, (LPVOID*)&oEOS_Connect_GetExternalAccountMapping);
|
||||
MH_EnableHook(f2);
|
||||
}
|
||||
|
||||
// Hook 3: Friends List Visibility
|
||||
LPVOID f3 = (LPVOID)GetProcAddress(h, "EOS_Presence_SetPresence");
|
||||
if (f3) {
|
||||
MH_CreateHook(f3, (LPVOID)&hkEOS_Presence_SetPresence, (LPVOID*)&oEOS_Presence_SetPresence);
|
||||
MH_EnableHook(f3);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
1
RLIdentity.dll.sha256
Normal file
1
RLIdentity.dll.sha256
Normal file
@ -0,0 +1 @@
|
||||
16D02A64A25AEC9E7279C3C44A33D3756F8EF9D8931AC0F76219FD75D53D8C2A
|
||||
1
injector.exe.sha256
Normal file
1
injector.exe.sha256
Normal file
@ -0,0 +1 @@
|
||||
A5FA657F6336D257D1C29808F4F7DF6366A6110A1191A7C704C32B16A491BD14
|
||||
Loading…
x
Reference in New Issue
Block a user