mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-04 20:57:49 +00:00
ye
This commit is contained in:
@@ -78,7 +78,7 @@ FASTFLAG(PlaceLauncherUsePOST)
|
||||
namespace RBX {
|
||||
|
||||
Application::Application()
|
||||
: logManager("Roblox", ".Client.dmp", ".Client.crashevent")
|
||||
: logManager("watrbx", ".Client.dmp", ".Client.crashevent")
|
||||
, crashReportEnabled(true)
|
||||
, hideChat(false)
|
||||
, mapFileForWnd(NULL)
|
||||
@@ -437,8 +437,8 @@ void Application::UploadSessionLogs()
|
||||
"Warning", MB_OK | MB_ICONWARNING);
|
||||
} else {
|
||||
MessageBoxA(mainWindow,
|
||||
"Logfiles will be uploaded next time you start Roblox. Please restart roblox now.",
|
||||
"ROBLOX", MB_OK);
|
||||
"Logfiles will be uploaded next time you start watrbx. Please restart watrbx now.",
|
||||
"watrbx", MB_OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -447,7 +447,7 @@ void Application::OnHelp()
|
||||
if (!DFFlag::DontOpenWikiOnClient)
|
||||
{
|
||||
ShellExecute(mainWindow, "open", "rundll32.exe",
|
||||
"url.dll,FileProtocolHandler http://wiki.roblox.com", NULL, SW_SHOWDEFAULT);
|
||||
"url.dll,FileProtocolHandler https://discord.gg/kwX8wvEFw6", NULL, SW_SHOWDEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -506,7 +506,7 @@ static void doMachineIdCheck(Application* app, FunctionMarshaller* marshaller, H
|
||||
marshaller->Execute(boost::bind(&Application::AboutToShutdown, app));
|
||||
marshaller->Execute(boost::bind(&Application::Shutdown, app));
|
||||
|
||||
MessageBoxA(hWnd, MachineIdUploader::kBannedMachineMessage, "ROBLOX", MB_OK);
|
||||
MessageBoxA(hWnd, MachineIdUploader::kBannedMachineMessage, "watrbx", MB_OK);
|
||||
PostMessage(hWnd, WM_CLOSE, 0, 0);
|
||||
}
|
||||
}
|
||||
@@ -611,8 +611,6 @@ bool Application::Initialize(HWND hWnd, HINSTANCE hInstance)
|
||||
initialProgramHash = ProgramMemoryChecker().getLastCompletedHash();
|
||||
RBX::pmcHash.nonce = initialProgramHash;
|
||||
|
||||
LuaSecureDouble::initDouble();
|
||||
|
||||
// make our code have no rwx sections (this might not work on some computers?)
|
||||
unsigned int sizeDiff = protectVmpSections();
|
||||
|
||||
@@ -652,7 +650,6 @@ bool Application::Initialize(HWND hWnd, HINSTANCE hInstance)
|
||||
}
|
||||
|
||||
#if !defined(RBX_STUDIO_BUILD)
|
||||
hookApi();
|
||||
RBX::vehHookLocationHv = reinterpret_cast<uintptr_t>(vehHookLocation);
|
||||
RBX::vehStubLocationHv = reinterpret_cast<uintptr_t>(&RtlDispatchExceptionHook);
|
||||
setupCeLogWatcher();
|
||||
@@ -994,7 +991,7 @@ bool Application::ParseArguments(const char* argv)
|
||||
{
|
||||
std::basic_stringstream<char> options;
|
||||
desc.print(options);
|
||||
MessageBoxA(NULL, options.str().c_str(), "Roblox", MB_OK);
|
||||
MessageBoxA(NULL, options.str().c_str(), "watrbx", MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1160,7 +1157,7 @@ void Application::uploadCrashData(bool userRequested)
|
||||
const int MAX_LOADSTRING = 400;
|
||||
TCHAR message[MAX_LOADSTRING];
|
||||
LoadString(GetModuleHandle(NULL), IDS_ERROR_REPORT_PROMPT, message, MAX_LOADSTRING);
|
||||
if (MessageBoxA(mainWindow, message, "ROBLOX", MB_YESNO)==IDYES)
|
||||
if (MessageBoxA(mainWindow, message, "watrbx", MB_YESNO)==IDYES)
|
||||
dumpErrorUploader->Upload(dmpHandlerUrl);
|
||||
else
|
||||
logManager.gatherCrashLogs();
|
||||
@@ -1179,14 +1176,14 @@ void Application::handleError(const std::exception& e)
|
||||
OutputDebugString(message.c_str());
|
||||
LogManager::ReportException(e);
|
||||
if (!RobloxCrashReporter::silent) {
|
||||
MessageBoxA(NULL, e.what(), "Roblox", MB_OK | MB_ICONSTOP);
|
||||
MessageBoxA(NULL, e.what(), "watrbx", MB_OK | MB_ICONSTOP);
|
||||
}
|
||||
}
|
||||
|
||||
void Application::waitForNewPlayerProcess(HWND hWnd)
|
||||
{
|
||||
static const char kPreventMultipleRobloxPlayersEventName[] = "ROBLOX_singletonEvent";
|
||||
static const char kPreventMultipleRobloxPlayersMutexName[] = "ROBLOX_singletonMutex";
|
||||
static const char kPreventMultipleRobloxPlayersEventName[] = "watrbx_singletonEvent";
|
||||
static const char kPreventMultipleRobloxPlayersMutexName[] = "watrbx_singletonMutex";
|
||||
|
||||
// Create (or open if already created) named event
|
||||
HANDLE event = CreateEventA(NULL, FALSE, FALSE, kPreventMultipleRobloxPlayersEventName);
|
||||
@@ -1340,7 +1337,7 @@ void Application::validateBootstrapperVersion()
|
||||
if (pos == std::string::npos)
|
||||
return;
|
||||
|
||||
// from www.roblox.com or www.gametest1.pizzaboxer.fun to setup.roblox.com or setup.gametest1.pizzaboxer.fun, etc...
|
||||
// from www.roblox.com or www.gametest1.watrbx.local to setup.roblox.com or setup.gametest1.watrbx.local, etc...
|
||||
installHost = "http://setup" + baseUrl.substr(pos+3);
|
||||
|
||||
{
|
||||
@@ -1554,7 +1551,7 @@ void Application::doOpenUrl(const std::string url)
|
||||
if (HWND dialog = webView->Create( mainWindow, SW_SHOWNORMAL))
|
||||
::ShowWindowAsync(dialog, SW_SHOWNORMAL);
|
||||
else
|
||||
MessageBox( mainWindow, "There was a problem opening the in-game browser.", "Roblox", MB_OK | MB_ICONSTOP);
|
||||
MessageBox( mainWindow, "There was a problem opening the in-game browser.", "watrbx", MB_OK | MB_ICONSTOP);
|
||||
}
|
||||
|
||||
void Application::openUrlInBrowserApp(const std::string url)
|
||||
|
||||
@@ -277,7 +277,7 @@ bool VerifyCryptSignature(const std::wstring& fileName)
|
||||
// signer info structure.
|
||||
if (GetProgAndPublisherInfo(pSignerInfo, &ProgPubInfo))
|
||||
{
|
||||
if (StrCmpW(ProgPubInfo.lpszProgramName, L"Roblox Application") != 0)
|
||||
if (StrCmpW(ProgPubInfo.lpszProgramName, L"watrbx application") != 0)
|
||||
{
|
||||
result = false;
|
||||
__leave;
|
||||
@@ -289,7 +289,7 @@ bool VerifyCryptSignature(const std::wstring& fileName)
|
||||
// wprintf(L"Publisher Link : %s\n", ProgPubInfo.lpszPublisherLink);
|
||||
//}
|
||||
|
||||
if (StrCmpW(ProgPubInfo.lpszMoreInfoLink, L"http://www.roblox.com ") != 0)
|
||||
if (StrCmpW(ProgPubInfo.lpszMoreInfoLink, L"http://www.watrbx.wtf ") != 0)
|
||||
{
|
||||
result = false;
|
||||
__leave;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace RBX
|
||||
{
|
||||
typedef BOOLEAN (NTAPI *RtlDispatchExceptionPfn)(PEXCEPTION_RECORD exRec, PCONTEXT ctx);
|
||||
typedef BOOLEAN(NTAPI* RtlDispatchExceptionPfn)(PEXCEPTION_RECORD exRec, PCONTEXT ctx);
|
||||
// extern RtlDispatchExceptionPfn vehHookContinue; // moved to App because this needs to be checked.
|
||||
extern DWORD* vehHookLocation;
|
||||
BOOLEAN RtlDispatchExceptionHook(PEXCEPTION_RECORD exRec, PCONTEXT ctx);
|
||||
|
||||
@@ -101,7 +101,7 @@ UserInput::UserInput(HWND wnd, shared_ptr<RBX::Game> game, View* view)
|
||||
(VOID**)&diPtr,
|
||||
NULL ) ) )
|
||||
{
|
||||
MessageBoxA(NULL, "ROBLOX could not initialize input. Please make sure you have a mouse and keyboard plugged in.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "watrbx could not initialize input. Please make sure you have a mouse and keyboard plugged in.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -172,13 +172,13 @@ void UserInput::createMouse()
|
||||
HRESULT hr;
|
||||
if (FAILED(hr = diPtr->CreateDevice( GUID_SysMouse, &diMousePtr, NULL)))
|
||||
{
|
||||
MessageBoxA(NULL, "Could not find a mouse! ROBLOX requires a mouse.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "Could not find a mouse! watrbx requires a mouse.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
if (FAILED(hr = diMousePtr->SetDataFormat(&c_dfDIMouse2)))
|
||||
{
|
||||
MessageBoxA(NULL, "Could not find a mouse (data format failed)! ROBLOX requires a mouse.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "Could not find a mouse (data format failed)! watrbx requires a mouse.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ void UserInput::createMouse()
|
||||
getDiProp(dipdw);
|
||||
if (FAILED(hr = diMousePtr->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph)))
|
||||
{
|
||||
MessageBoxA(NULL, "Could not find a mouse (set property failed)! ROBLOX requires a mouse.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "Could not find a mouse (set property failed)! watrbx requires a mouse.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -197,13 +197,13 @@ void UserInput::createKeyboard()
|
||||
|
||||
if (FAILED(hr = diPtr->CreateDevice(GUID_SysKeyboard, &diKeyboardPtr, NULL)))
|
||||
{
|
||||
MessageBoxA(NULL, "Could not find a keyboard! ROBLOX requires a keyboard.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "Could not find a keyboard! watrbx requires a keyboard.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
if (FAILED(hr = diKeyboardPtr->SetDataFormat(&c_dfDIKeyboard)))
|
||||
{
|
||||
MessageBoxA(NULL, "Could not find a keyboard (data format failed)! ROBLOX requires a keyboard.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "Could not find a keyboard (data format failed)! watrbx requires a keyboard.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ void UserInput::createKeyboard()
|
||||
getDiProp(dipdw);
|
||||
if (FAILED(hr = diKeyboardPtr->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph)))
|
||||
{
|
||||
MessageBoxA(NULL, "Could not find a keyboard (set property failed)! ROBLOX requires a keyboard.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "Could not find a keyboard (set property failed)! watrbx requires a keyboard.", "watrbx", MB_OK);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,12 +302,12 @@ DWORD ThreadDoUploadVideo(shared_ptr<RBX::DataModel> dataModel, bool siteSEO, st
|
||||
"<media:title type=\"plain\">" + videoTitle + "</media:title>\r\n"
|
||||
"<media:description type=\"plain\">\r\n"
|
||||
"" + videoSEOInfo + "\r\n"
|
||||
"For more games visit http://www.roblox.com\r\n"
|
||||
"For more games visit http://www.watrbx.wtf\r\n"
|
||||
"</media:description>\r\n"
|
||||
"<media:category\r\n"
|
||||
"scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">Games\r\n"
|
||||
"</media:category>\r\n"
|
||||
"<media:keywords>ROBLOX, video, free game, online virtual world</media:keywords>\r\n"
|
||||
"<media:keywords>watrbx, video, free game, online virtual world</media:keywords>\r\n"
|
||||
"</media:group>\r\n"
|
||||
"</entry>\r\n"
|
||||
"--f93dcbA3\r\n"
|
||||
@@ -361,7 +361,7 @@ DWORD ThreadDoUploadVideo(shared_ptr<RBX::DataModel> dataModel, bool siteSEO, st
|
||||
http.additionalHeaders["Authorization"] = "AuthSub token=\"" + youtubeToken + "\"";
|
||||
http.additionalHeaders["GData-Version"] = "2";
|
||||
http.additionalHeaders["X-GData-Key"] = "key=AI39si5sZKe6qAobFgnT9UFGXq9bBO7mUCsK3_cWy_LJmgKDtl-GOMHNNV_Bh7Jk7KqDX7vI8D30jFHwnu8RJcDmcJN47yPW7A";
|
||||
http.additionalHeaders["Slug"] = "roblox.avi";
|
||||
http.additionalHeaders["Slug"] = "watrbx.avi";
|
||||
http.additionalHeaders["Connection"] = "close";
|
||||
http.additionalHeaders["Content-Length"] = RBX::format("%d", buffer.str().length());
|
||||
|
||||
@@ -398,7 +398,7 @@ void WebBrowserAxDialog::DoUploadVideo(std::string token, std::string title, std
|
||||
siteSEO = false;
|
||||
if (placeId > 0)
|
||||
{
|
||||
videoSEOInfo = format_string("To play this game, please visit: http://www.roblox.com/item.aspx?id=%d&rbx_source=youtube&rbx_medium=uservideo", placeId);
|
||||
videoSEOInfo = format_string("To play this game, please visit: http://www.watrbx.wtf/item.aspx?id=%d&rbx_source=youtube&rbx_medium=uservideo", placeId);
|
||||
} else {
|
||||
videoSEOInfo = seostr;
|
||||
}
|
||||
@@ -411,7 +411,7 @@ void WebBrowserAxDialog::DoUploadVideo(std::string token, std::string title, std
|
||||
|
||||
videoTitle = titelString;
|
||||
if (videoTitle.length() == 0)
|
||||
videoTitle = "ROBLOX ROCKS!";
|
||||
videoTitle = "watrbx is nice.";
|
||||
|
||||
youtubeToken = token;
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v110</PlatformToolset>
|
||||
<PlatformToolset>v110_xp</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
@@ -313,6 +313,7 @@
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>$(CONTRIB_PATH)\SDL2\VisualC\Win32\Release\SDL2.lib;strmbase.lib;sensapi.lib;wmvcore.lib;DxErr9.lib;Urlmon.lib;zlib.lib;libcurl_a.lib;fmod_vc.lib;%(AdditionalDependencies);</AdditionalDependencies>
|
||||
|
||||
@@ -95,7 +95,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||
// will cause issues.
|
||||
if (!G3D::System::hasSSE2())
|
||||
{
|
||||
MessageBoxA(NULL, "This platform lacks SSE2 support.", "ROBLOX", MB_OK);
|
||||
MessageBoxA(NULL, "This platform lacks SSE2 support.", "watrbx", MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||
{
|
||||
const char* const errorMessage = e.what();
|
||||
FASTLOGS(FLog::RobloxWndInit, "Error during initialization. User message = %s", errorMessage);
|
||||
MessageBoxA(hWnd, errorMessage, "ROBLOX", MB_OK);
|
||||
MessageBoxA(hWnd, errorMessage, "watrbx", MB_OK);
|
||||
app.AboutToShutdown();
|
||||
app.Shutdown();
|
||||
return FALSE;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "functionHooks.h"
|
||||
#include "robloxHooks.h"
|
||||
#include "v8datamodel/HackDefines.h"
|
||||
@@ -12,88 +12,88 @@
|
||||
|
||||
namespace
|
||||
{
|
||||
size_t moduleStart = 0;
|
||||
size_t moduleSize = 0xFFFFFFFF;
|
||||
size_t moduleStart = 0;
|
||||
size_t moduleSize = 0xFFFFFFFF;
|
||||
|
||||
typedef HWND (WINAPI *FindWindowSplice)(LPCTSTR, LPCSTR);
|
||||
typedef HWND(WINAPI* FindWindowSplice)(LPCTSTR, LPCSTR);
|
||||
|
||||
// Can call this function.
|
||||
FindWindowSplice resumeFindWindow = 0;
|
||||
// Can call this function.
|
||||
FindWindowSplice resumeFindWindow = 0;
|
||||
|
||||
// asm stub to run when findWindowA is called.
|
||||
HWND WINAPI findWindowHook(LPCTSTR className, LPCSTR windowName)
|
||||
{
|
||||
size_t returnAddress;
|
||||
size_t argDiff;
|
||||
static const size_t kHalf = 1 << 23;
|
||||
static const size_t kFull = 1 << 24;
|
||||
VMProtectBeginMutation("35");
|
||||
returnAddress = reinterpret_cast<size_t>(_ReturnAddress());
|
||||
argDiff = (reinterpret_cast<size_t>(windowName) - returnAddress);
|
||||
|
||||
// This is an attempt at a very conservative check for the window. It looks for
|
||||
// DLLs that called out ROBLOX by name inside their code and not from some scan.
|
||||
if (windowName // user passed a windowName
|
||||
&& ((returnAddress - moduleStart) > moduleSize) // but not us
|
||||
&& ((argDiff+kHalf) < kFull) // Argument is +-8MB from call location, probably .rdata.
|
||||
&& (_strnicmp(windowName, "ROBLOX", 6) == 0)) // with roblox as argument
|
||||
// asm stub to run when findWindowA is called.
|
||||
HWND WINAPI findWindowHook(LPCTSTR className, LPCSTR windowName)
|
||||
{
|
||||
RBX::hotpatchUnhook(resumeFindWindow);
|
||||
RBX::Tokens::simpleToken |= HATE_DLL_INJECTION;
|
||||
}
|
||||
VMProtectEnd();
|
||||
return resumeFindWindow(className,windowName);
|
||||
}
|
||||
size_t returnAddress;
|
||||
size_t argDiff;
|
||||
static const size_t kHalf = 1 << 23;
|
||||
static const size_t kFull = 1 << 24;
|
||||
VMProtectBeginMutation("35");
|
||||
returnAddress = reinterpret_cast<size_t>(_ReturnAddress());
|
||||
argDiff = (reinterpret_cast<size_t>(windowName) - returnAddress);
|
||||
|
||||
// This will request a kick if a possible access violation hook is found. This will set
|
||||
// a flag and allow normal exception handling to occur. If the user was not hacking,
|
||||
// there will be a crash.
|
||||
void RtlDispatchExceptionCheck(PEXCEPTION_RECORD exRec, PCONTEXT ctx)
|
||||
{
|
||||
const DWORD code = exRec->ExceptionCode;
|
||||
const DWORD codeStart = RBX::Security::rbxTextBase;
|
||||
const DWORD codeSize = RBX::Security::rbxTextSize;
|
||||
if( code == EXCEPTION_ACCESS_VIOLATION)
|
||||
{
|
||||
const DWORD avAddr = exRec->ExceptionInformation[1];
|
||||
if ((avAddr - codeStart) <= codeSize)
|
||||
// This is an attempt at a very conservative check for the window. It looks for
|
||||
// DLLs that called out ROBLOX by name inside their code and not from some scan.
|
||||
if (windowName // user passed a windowName
|
||||
&& ((returnAddress - moduleStart) > moduleSize) // but not us
|
||||
&& ((argDiff + kHalf) < kFull) // Argument is +-8MB from call location, probably .rdata.
|
||||
&& (_strnicmp(windowName, "ROBLOX", 6) == 0)) // with roblox as argument
|
||||
{
|
||||
RBX::Security::setHackFlagVs<LINE_RAND1>(RBX::Security::hackFlag6, HATE_VEH_HOOK);
|
||||
RBX::Tokens::sendStatsToken.addFlagFast(HATE_VEH_HOOK);
|
||||
RBX::hotpatchUnhook(resumeFindWindow);
|
||||
RBX::Tokens::simpleToken |= HATE_DLL_INJECTION;
|
||||
}
|
||||
VMProtectEnd();
|
||||
return resumeFindWindow(className, windowName);
|
||||
}
|
||||
|
||||
// This will request a kick if a possible access violation hook is found. This will set
|
||||
// a flag and allow normal exception handling to occur. If the user was not hacking,
|
||||
// there will be a crash.
|
||||
void RtlDispatchExceptionCheck(PEXCEPTION_RECORD exRec, PCONTEXT ctx)
|
||||
{
|
||||
const DWORD code = exRec->ExceptionCode;
|
||||
const DWORD codeStart = RBX::Security::rbxTextBase;
|
||||
const DWORD codeSize = RBX::Security::rbxTextSize;
|
||||
if (code == EXCEPTION_ACCESS_VIOLATION)
|
||||
{
|
||||
const DWORD avAddr = exRec->ExceptionInformation[1];
|
||||
if ((avAddr - codeStart) <= codeSize)
|
||||
{
|
||||
RBX::Security::setHackFlagVs<LINE_RAND1>(RBX::Security::hackFlag6, HATE_VEH_HOOK);
|
||||
RBX::Tokens::sendStatsToken.addFlagFast(HATE_VEH_HOOK);
|
||||
}
|
||||
}
|
||||
else if ((code == EXCEPTION_BREAKPOINT) ||
|
||||
(code == EXCEPTION_SINGLE_STEP) ||
|
||||
(code == EXCEPTION_ILLEGAL_INSTRUCTION) ||
|
||||
(code == EXCEPTION_PRIV_INSTRUCTION))
|
||||
{
|
||||
const DWORD addr = reinterpret_cast<DWORD>(exRec->ExceptionAddress);
|
||||
if ((addr - codeStart) <= codeSize)
|
||||
{
|
||||
RBX::Security::setHackFlagVs<LINE_RAND1>(RBX::Security::hackFlag6, HATE_VEH_HOOK);
|
||||
RBX::Tokens::sendStatsToken.addFlagFast(HATE_VEH_HOOK);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((code == EXCEPTION_BREAKPOINT) ||
|
||||
(code == EXCEPTION_SINGLE_STEP) ||
|
||||
(code == EXCEPTION_ILLEGAL_INSTRUCTION) ||
|
||||
(code == EXCEPTION_PRIV_INSTRUCTION))
|
||||
|
||||
bool cmpKiUserExceptionDispatcher(const char* inString)
|
||||
{
|
||||
const DWORD addr = reinterpret_cast<DWORD>(exRec->ExceptionAddress);
|
||||
if ((addr - codeStart) <= codeSize)
|
||||
const unsigned char cmpString[26] = { 129, 254, 37, 162, 27, 133, 129, 157, 225, 138, 46, 157, 191, 244, 244, 153, 75, 12, 70, 220, 152, 104, 186, 244, 94, 43 };
|
||||
if (!inString) return false;
|
||||
for (int i = 0; i < 26; ++i)
|
||||
{
|
||||
RBX::Security::setHackFlagVs<LINE_RAND1>(RBX::Security::hackFlag6, HATE_VEH_HOOK);
|
||||
RBX::Tokens::sendStatsToken.addFlagFast(HATE_VEH_HOOK);
|
||||
}
|
||||
if ((unsigned char)((inString[i] + i) * 227) != cmpString[i]) return false;
|
||||
if (!inString[i]) return (i == 25);
|
||||
};
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool cmpKiUserExceptionDispatcher(const char* inString)
|
||||
{
|
||||
const unsigned char cmpString[26] = {129, 254, 37, 162, 27, 133, 129, 157, 225, 138, 46, 157, 191, 244, 244, 153, 75, 12, 70, 220, 152, 104, 186, 244, 94, 43};
|
||||
if (!inString) return false;
|
||||
for (int i = 0; i < 26; ++i)
|
||||
{
|
||||
if ((unsigned char)((inString[i]+i)*227) != cmpString[i]) return false;
|
||||
if (!inString[i]) return (i == 25);
|
||||
};
|
||||
return false;
|
||||
}
|
||||
|
||||
const unsigned char kiUserExceptionDispatcherProlog[10] =
|
||||
{0x8B, 0x4C, 0x24, 0x04, // mov ecx,dword ptr [esp+4]
|
||||
const unsigned char kiUserExceptionDispatcherProlog[10] =
|
||||
{ 0x8B, 0x4C, 0x24, 0x04, // mov ecx,dword ptr [esp+4]
|
||||
0x8B, 0x1C, 0x24, // mov ebx,dword ptr [esp]
|
||||
0x51, // push ecx
|
||||
0x53, // push ebx
|
||||
0xE8 /* XX XX XX XX */}; // call ntdll!RtlDisapatchException
|
||||
0xE8 /* XX XX XX XX */ }; // call ntdll!RtlDisapatchException
|
||||
|
||||
}
|
||||
|
||||
@@ -187,7 +187,7 @@ namespace RBX
|
||||
moduleStart = reinterpret_cast<size_t>(info.lpBaseOfDll);
|
||||
moduleSize = info.SizeOfImage;
|
||||
}
|
||||
resumeFindWindow = reinterpret_cast<FindWindowSplice>(hotpatchHook(&FindWindowA,findWindowHook));
|
||||
resumeFindWindow = reinterpret_cast<FindWindowSplice>(hotpatchHook(&FindWindowA, findWindowHook));
|
||||
hookPreVeh();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user