9 Commits

Author SHA1 Message Date
neru de561d5170 fix: commit missing stuff
Build / build (push) Failing after 20m17s
2026-06-24 02:20:21 -03:00
neru ea7529c1d7 feat: bypass xbox chat filtering
Build / build (push) Has been cancelled
2026-06-24 02:18:44 -03:00
neru 8830d1abdb Merge branch 'main' of https://git.neru.rip/neru/HexUnlocked
Build / build (push) Failing after 23m50s
2026-06-20 11:46:43 -03:00
neru 71fe1c6549 fix: icon missing from tray 2026-06-20 10:57:10 -03:00
neru e70323c86b docs: add icon to readme
Build / build (push) Has been cancelled
2026-06-20 09:21:48 -03:00
neru 9f5abefb34 docs: add images and sources
Build / build (push) Successful in 9m28s
2026-06-20 09:18:59 -03:00
neru f6ac12962d fix: remove unneeded def 2026-06-20 09:18:29 -03:00
neru 6d176c2020 build: fix weird compile bug
Build / build (push) Successful in 9m23s
2026-06-20 08:25:13 -03:00
neru 83c1fba265 build: bring back minsizerel
Build / build (push) Failing after 6m7s
2026-06-20 08:17:03 -03:00
11 changed files with 60 additions and 8 deletions
+1
View File
@@ -74,6 +74,7 @@ jobs:
- name: Configure CMake - name: Configure CMake
run: | run: |
cmake -B build -S . -G Ninja \ cmake -B build -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Windows \ -DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \ -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \ -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ \
+3
View File
@@ -147,6 +147,9 @@ set_target_properties(hex-unlocked PROPERTIES OUTPUT_NAME "${RANDOM_EXE_NAME}")
# compiler / IDE config # compiler / IDE config
if(NOT MSVC) if(NOT MSVC)
target_link_options(hex-unlocked PRIVATE -static -static-libgcc -static-libstdc++) target_link_options(hex-unlocked PRIVATE -static -static-libgcc -static-libstdc++)
if(CMAKE_BUILD_TYPE MATCHES "Release|MinSizeRel")
target_link_options(hex-unlocked PRIVATE -s)
endif()
else() else()
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT hex-unlocked) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT hex-unlocked)
endif() endif()
+2
View File
@@ -1,4 +1,6 @@
<h1 align="center"> <h1 align="center">
<img src="img/favicon.ico" height="64">
<br/>
<b>Hex: Unlocked</b> <b>Hex: Unlocked</b>
</h1> </h1>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 607 KiB

BIN
View File
Binary file not shown.
+4 -7
View File
@@ -6,6 +6,7 @@
#include "log-sink-file.h" #include "log-sink-file.h"
#include "proxy-configurator.h" #include "proxy-configurator.h"
#include "cache-cleaner.h" #include "cache-cleaner.h"
#include "xbox-fixes.h"
#include <seallib/log.h> #include <seallib/log.h>
#include <tinymitm/proxy.h> #include <tinymitm/proxy.h>
@@ -17,11 +18,6 @@
#include <processthreadsapi.h> #include <processthreadsapi.h>
#include <handleapi.h> #include <handleapi.h>
#ifndef CREATE_NO_WINDOW
// from: WinBase.h
#define CREATE_NO_WINDOW 0x08000000
#endif
bool running = true; bool running = true;
TinyMITMProxy* proxy = nullptr; TinyMITMProxy* proxy = nullptr;
ProxyConfigurator* conf = nullptr; ProxyConfigurator* conf = nullptr;
@@ -108,9 +104,11 @@ bool run()
conf = new ProxyConfigurator(); conf = new ProxyConfigurator();
conf->setProxy("127.0.0.1", 44444); conf->setProxy("127.0.0.1", 44444);
mainLog.info("Instantiating spoofer and registering proxy listeners"); mainLog.info("Instantiating and registering proxy listeners");
Spoofer* spoofer = new Spoofer(); Spoofer* spoofer = new Spoofer();
XboxFixes* xboxFix = new XboxFixes();
spoofer->registerListeners(proxy); spoofer->registerListeners(proxy);
xboxFix->registerListeners(proxy);
mainLog.info("Starting proxy"); mainLog.info("Starting proxy");
if (!proxy->init()) if (!proxy->init())
@@ -122,7 +120,6 @@ bool run()
} }
mainLog.info("Setting up system tray icon"); mainLog.info("Setting up system tray icon");
TrayIcon tray; TrayIcon tray;
tray.setExitCallback([&]() { tray.setExitCallback([&]() {
running = false; running = false;
+1
View File
@@ -54,6 +54,7 @@ Spoofer::~Spoofer()
delete _log; delete _log;
} }
void Spoofer::registerListeners(TinyMITMProxy* proxy) void Spoofer::registerListeners(TinyMITMProxy* proxy)
{ {
proxy->onClientRequest.addListener( proxy->onClientRequest.addListener(
+1 -1
View File
@@ -84,7 +84,7 @@ bool TrayIcon::init()
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_TRAYICON; nid.uCallbackMessage = WM_TRAYICON;
nid.hIcon = LoadIcon(NULL, IDI_APPLICATION); nid.hIcon = LoadIconA(GetModuleHandle(NULL), "IDI_ICON1");
strncpy_s(nid.szTip, "HexUnlocked", sizeof(nid.szTip) - 1); strncpy_s(nid.szTip, "HexUnlocked", sizeof(nid.szTip) - 1);
nid.szTip[sizeof(nid.szTip) - 1] = '\0'; nid.szTip[sizeof(nid.szTip) - 1] = '\0';
+28
View File
@@ -0,0 +1,28 @@
#include "xbox-fixes.h"
#include <tinymitm/proxy.h>
XboxFixes::XboxFixes() {}
XboxFixes::~XboxFixes() {}
void XboxFixes::registerListeners(TinyMITMProxy* proxy)
{
proxy->onServerResponse.addListener(
[this](const std::string& url, std::string& body, std::string& headers, bool wasBlocked) {
this->serverResponseHandler(url, body, headers, wasBlocked);
});
}
void XboxFixes::antiCensor(std::string& body)
{
body = R"-({"verifyStringResult":[{"resultCode":0,"offendingString":null}]})-";
}
void XboxFixes::serverResponseHandler(const std::string& url, std::string& body, std::string& /*headers*/,
bool& /*blockOutgoing*/)
{
if (url.find("xboxlive.com") == std::string::npos) return;
if (url.ends_with("/system/strings/validate")) return antiCensor(body);
}
+20
View File
@@ -0,0 +1,20 @@
#pragma once
#include <string>
class TinyMITMProxy;
class XboxFixes
{
public:
XboxFixes();
~XboxFixes();
void registerListeners(TinyMITMProxy* proxy);
private:
void antiCensor(std::string& body);
void serverResponseHandler(const std::string& url, std::string& body, std::string& headers,
bool& blockOutgoing);
};