Compare commits

...

3 Commits

Author SHA1 Message Date
528f864177 Update RLIdentity.cpp 2026-04-27 10:13:08 +00:00
55229222f7 add sha256 for RLIdentity.dll 2026-03-18 04:53:20 +00:00
520ce83c8d add sha256 for injector.exe 2026-03-18 04:52:43 +00:00
3 changed files with 57 additions and 63 deletions

View File

@ -1,5 +1,5 @@
// RLIdentity.cpp // RLIdentity.cpp - v2.0.0 Bulletproof
// 1:1 Proven logic with ALL-SAFE JSON parsing (no dynamic allocations). // 1:1 Proven logic with ALL-SAFE JSON parsing and Network Broadcast spoofing.
#include <Windows.h> #include <Windows.h>
#include <MinHook.h> #include <MinHook.h>
@ -12,22 +12,8 @@
#pragma comment(lib, "shell32.lib") #pragma comment(lib, "shell32.lib")
static char g_SpoofedName[256] = "Player"; 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() { void LoadConfig() {
char path[MAX_PATH]; char path[MAX_PATH];
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, 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**); typedef int(__stdcall* CopyUserInfo_t)(void*, void*, void**);
static CopyUserInfo_t oEOS_UserInfo_CopyUserInfo = nullptr; 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) { 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); int res = oEOS_UserInfo_CopyUserInfo(p1, p2, p3);
if (res == 0 && p2 && p3 && *p3) { if (res == 0 && p3 && *p3) {
void** options = (void**)p2;
if (options[1] == options[2]) { // If targeting our own info
char** s = (char**)*p3; char** s = (char**)*p3;
__try { __try {
// Offset 24: DisplayName, Offset 40: Nickname // Overwriting pointers directly at the SDK struct offsets
if (s[3]) s[3] = g_SpoofedName; if (s[3]) s[3] = g_SpoofedName; // DisplayName
if (s[5]) s[5] = g_SpoofedName; if (s[5]) s[5] = g_SpoofedName; // Nickname
} __except (EXCEPTION_EXECUTE_HANDLER) {} } __except (EXCEPTION_EXECUTE_HANDLER) {}
} }
}
return res; 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) { DWORD WINAPI HookThread(LPVOID lpParam) {
ClearLog();
LoadConfig(); LoadConfig();
if (MH_Initialize() == MH_OK) { if (MH_Initialize() == MH_OK) {
HMODULE h = NULL; HMODULE h = NULL;
// Wait for EOS DLL (standard for RL)
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
h = GetModuleHandleA("EOSSDK-Win64-Shipping.dll"); h = GetModuleHandleA("EOSSDK-Win64-Shipping.dll");
if (h) break; if (h) break;
Sleep(100); Sleep(100);
} }
if (h) { if (h) {
// Hook 1: Local Visibility
LPVOID f1 = (LPVOID)GetProcAddress(h, "EOS_UserInfo_CopyUserInfo"); 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); MH_EnableHook(f1);
} }
LPVOID f2 = (LPVOID)GetProcAddress(h, "EOS_EpicAccountId_ToString"); // Hook 2: Network Broadcast / Offline Revert fix
if (f2 && MH_CreateHook(f2, (LPVOID)&hkEOS_EpicAccountId_ToString, (LPVOID*)&oEOS_EpicAccountId_ToString) == MH_OK) { LPVOID f2 = (LPVOID)GetProcAddress(h, "EOS_Connect_GetExternalAccountMapping");
if (f2) {
MH_CreateHook(f2, (LPVOID)&hkEOS_Connect_GetExternalAccountMapping, (LPVOID*)&oEOS_Connect_GetExternalAccountMapping);
MH_EnableHook(f2); 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; return 0;

1
RLIdentity.dll.sha256 Normal file
View File

@ -0,0 +1 @@
16D02A64A25AEC9E7279C3C44A33D3756F8EF9D8931AC0F76219FD75D53D8C2A

1
injector.exe.sha256 Normal file
View File

@ -0,0 +1 @@
A5FA657F6336D257D1C29808F4F7DF6366A6110A1191A7C704C32B16A491BD14