From 86f8dbe99a7ef2dd4d681154450651f94858ec28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=88=9A=28noham=29=C2=B2?=
<100566912+NohamR@users.noreply.github.com>
Date: Thu, 7 May 2026 15:12:05 +0200
Subject: [PATCH] First hook
---
.gitignore | 3 +
README.md | 9 +
paho-mqtt3as-proxy.slnx | 8 +
paho-mqtt3as-proxy/common.h | 59 +++++
paho-mqtt3as-proxy/exports.cpp | 59 +++++
paho-mqtt3as-proxy/main.cpp | 89 +++++++
paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj | 229 ++++++++++++++++++
.../paho-mqtt3as-proxy.vcxproj.filters | 40 +++
.../paho-mqtt3as-proxy.vcxproj.user | 6 +
paho-mqtt3as-proxy/paho-mqtt3as.asm | 7 +
paho-mqtt3as-proxy/paho-mqtt3as.def | 52 ++++
scripts/install-hook.bat | 10 +
scripts/install-hook.ps1 | 122 ++++++++++
13 files changed, 693 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 paho-mqtt3as-proxy.slnx
create mode 100644 paho-mqtt3as-proxy/common.h
create mode 100644 paho-mqtt3as-proxy/exports.cpp
create mode 100644 paho-mqtt3as-proxy/main.cpp
create mode 100644 paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj
create mode 100644 paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.filters
create mode 100644 paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.user
create mode 100644 paho-mqtt3as-proxy/paho-mqtt3as.asm
create mode 100644 paho-mqtt3as-proxy/paho-mqtt3as.def
create mode 100644 scripts/install-hook.bat
create mode 100644 scripts/install-hook.ps1
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..26b49c7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/.vs
+/paho-mqtt3as-proxy/x64
+/x64
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e3b298e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+Set-ExecutionPolicy
+Run from an elevated PowerShell (script will attempt to relaunch elevated if not already) or right-click -> Run with PowerShell.
+Example: .\scripts\install-hook.ps1 -Action install
+To use a specific DLL: .\scripts\install-hook.ps1 -Action install -SourcePath "C:\path\to\your.dll"
+To restore original: .\scripts\install-hook.ps1 -Action restore
+
+
+install-hook.bat -Action install
+install-hook.bat -Action restore
\ No newline at end of file
diff --git a/paho-mqtt3as-proxy.slnx b/paho-mqtt3as-proxy.slnx
new file mode 100644
index 0000000..3430391
--- /dev/null
+++ b/paho-mqtt3as-proxy.slnx
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/paho-mqtt3as-proxy/common.h b/paho-mqtt3as-proxy/common.h
new file mode 100644
index 0000000..3fa028c
--- /dev/null
+++ b/paho-mqtt3as-proxy/common.h
@@ -0,0 +1,59 @@
+#pragma once
+#include
+
+struct paho_mqtt3as_dll {
+ HMODULE dll;
+ FARPROC OrignalMQTTAsync_connect;
+ FARPROC OrignalMQTTAsync_create;
+ FARPROC OrignalMQTTAsync_createWithOptions;
+ FARPROC OrignalMQTTAsync_destroy;
+ FARPROC OrignalMQTTAsync_disconnect;
+ FARPROC OrignalMQTTAsync_free;
+ FARPROC OrignalMQTTAsync_freeMessage;
+ FARPROC OrignalMQTTAsync_getPendingTokens;
+ FARPROC OrignalMQTTAsync_getVersionInfo;
+ FARPROC OrignalMQTTAsync_global_init;
+ FARPROC OrignalMQTTAsync_isComplete;
+ FARPROC OrignalMQTTAsync_isConnected;
+ FARPROC OrignalMQTTAsync_malloc;
+ FARPROC OrignalMQTTAsync_reconnect;
+ FARPROC OrignalMQTTAsync_send;
+ FARPROC OrignalMQTTAsync_sendMessage;
+ FARPROC OrignalMQTTAsync_setAfterPersistenceRead;
+ FARPROC OrignalMQTTAsync_setBeforePersistenceWrite;
+ FARPROC OrignalMQTTAsync_setCallbacks;
+ FARPROC OrignalMQTTAsync_setConnected;
+ FARPROC OrignalMQTTAsync_setConnectionLostCallback;
+ FARPROC OrignalMQTTAsync_setDeliveryCompleteCallback;
+ FARPROC OrignalMQTTAsync_setDisconnected;
+ FARPROC OrignalMQTTAsync_setMessageArrivedCallback;
+ FARPROC OrignalMQTTAsync_setTraceCallback;
+ FARPROC OrignalMQTTAsync_setTraceLevel;
+ FARPROC OrignalMQTTAsync_setUpdateConnectOptions;
+ FARPROC OrignalMQTTAsync_strerror;
+ FARPROC OrignalMQTTAsync_subscribe;
+ FARPROC OrignalMQTTAsync_subscribeMany;
+ FARPROC OrignalMQTTAsync_unsubscribe;
+ FARPROC OrignalMQTTAsync_unsubscribeMany;
+ FARPROC OrignalMQTTAsync_waitForCompletion;
+ FARPROC OrignalMQTTProperties_add;
+ FARPROC OrignalMQTTProperties_copy;
+ FARPROC OrignalMQTTProperties_free;
+ FARPROC OrignalMQTTProperties_getNumericValue;
+ FARPROC OrignalMQTTProperties_getNumericValueAt;
+ FARPROC OrignalMQTTProperties_getProperty;
+ FARPROC OrignalMQTTProperties_getPropertyAt;
+ FARPROC OrignalMQTTProperties_hasProperty;
+ FARPROC OrignalMQTTProperties_propertyCount;
+ FARPROC OrignalMQTTPropertyName;
+ FARPROC OrignalMQTTProperty_getType;
+ FARPROC OrignalMQTTReasonCode_toString;
+ FARPROC OrignalThread_create_mutex;
+ FARPROC OrignalThread_getid;
+ FARPROC OrignalThread_lock_mutex;
+ FARPROC OrignalThread_start;
+ FARPROC OrignalThread_unlock_mutex;
+};
+
+extern paho_mqtt3as_dll paho_mqtt3as;
+extern "C" FARPROC PA;
diff --git a/paho-mqtt3as-proxy/exports.cpp b/paho-mqtt3as-proxy/exports.cpp
new file mode 100644
index 0000000..ef90bf0
--- /dev/null
+++ b/paho-mqtt3as-proxy/exports.cpp
@@ -0,0 +1,59 @@
+#include "common.h"
+
+paho_mqtt3as_dll paho_mqtt3as;
+extern "C" FARPROC PA = NULL;
+
+extern "C"
+{
+ extern "C" void FakeMQTTAsync_connect() {}
+ extern "C" void FakeMQTTAsync_create() {}
+ extern "C" void FakeMQTTAsync_createWithOptions() {}
+ extern "C" void FakeMQTTAsync_destroy() {}
+ extern "C" void FakeMQTTAsync_disconnect() {}
+ extern "C" void FakeMQTTAsync_free() {}
+ extern "C" void FakeMQTTAsync_freeMessage() {}
+ extern "C" void FakeMQTTAsync_getPendingTokens() {}
+ extern "C" void FakeMQTTAsync_getVersionInfo() {}
+ extern "C" void FakeMQTTAsync_global_init() {}
+ extern "C" void FakeMQTTAsync_isComplete() {}
+ extern "C" void FakeMQTTAsync_isConnected() {}
+ extern "C" void FakeMQTTAsync_malloc() {}
+ extern "C" void FakeMQTTAsync_reconnect() {}
+ extern "C" void FakeMQTTAsync_send() {}
+ extern "C" void FakeMQTTAsync_sendMessage() {}
+ extern "C" void FakeMQTTAsync_setAfterPersistenceRead() {}
+ extern "C" void FakeMQTTAsync_setBeforePersistenceWrite() {}
+ extern "C" void FakeMQTTAsync_setCallbacks() {}
+ extern "C" void FakeMQTTAsync_setConnected() {}
+ extern "C" void FakeMQTTAsync_setConnectionLostCallback() {}
+ extern "C" void FakeMQTTAsync_setDeliveryCompleteCallback() {}
+ extern "C" void FakeMQTTAsync_setDisconnected() {}
+ extern "C" void FakeMQTTAsync_setMessageArrivedCallback() {}
+ extern "C" void FakeMQTTAsync_setTraceCallback() {}
+ extern "C" void FakeMQTTAsync_setTraceLevel() {}
+ extern "C" void FakeMQTTAsync_setUpdateConnectOptions() {}
+ extern "C" void FakeMQTTAsync_strerror() {}
+ extern "C" void FakeMQTTAsync_subscribe() {}
+ extern "C" void FakeMQTTAsync_subscribeMany() {}
+ extern "C" void FakeMQTTAsync_unsubscribe() {}
+ extern "C" void FakeMQTTAsync_unsubscribeMany() {}
+ extern "C" void FakeMQTTAsync_waitForCompletion() {}
+ extern "C" void FakeMQTTProperties_add() {}
+ extern "C" void FakeMQTTProperties_copy() {}
+ extern "C" void FakeMQTTProperties_free() {}
+ extern "C" void FakeMQTTProperties_getNumericValue() {}
+ extern "C" void FakeMQTTProperties_getNumericValueAt() {}
+ extern "C" void FakeMQTTProperties_getProperty() {}
+ extern "C" void FakeMQTTProperties_getPropertyAt() {}
+ extern "C" void FakeMQTTProperties_hasProperty() {}
+ extern "C" void FakeMQTTProperties_propertyCount() {}
+ extern "C" void FakeMQTTPropertyName() {}
+ extern "C" void FakeMQTTProperty_getType() {}
+ extern "C" void FakeMQTTReasonCode_toString() {}
+ extern "C" void FakeThread_create_mutex() {}
+ extern "C" void FakeThread_getid() {}
+ extern "C" void FakeThread_lock_mutex() {}
+ extern "C" void FakeThread_start() {}
+ extern "C" void FakeThread_unlock_mutex() {}
+}
+
diff --git a/paho-mqtt3as-proxy/main.cpp b/paho-mqtt3as-proxy/main.cpp
new file mode 100644
index 0000000..200dcfc
--- /dev/null
+++ b/paho-mqtt3as-proxy/main.cpp
@@ -0,0 +1,89 @@
+#include "common.h"
+
+DWORD WINAPI DelayedHelloThread(LPVOID lpParam)
+{
+ Sleep(10000); // 10 seconds
+ MessageBox(0, "Hello :)", "Proxy", MB_OK | MB_ICONINFORMATION);
+ return 0;
+}
+
+void LoadOriginalDllFunctions() {
+ paho_mqtt3as.OrignalMQTTAsync_connect = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_connect");
+ paho_mqtt3as.OrignalMQTTAsync_create = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_create");
+ paho_mqtt3as.OrignalMQTTAsync_createWithOptions = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_createWithOptions");
+ paho_mqtt3as.OrignalMQTTAsync_destroy = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_destroy");
+ paho_mqtt3as.OrignalMQTTAsync_disconnect = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_disconnect");
+ paho_mqtt3as.OrignalMQTTAsync_free = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_free");
+ paho_mqtt3as.OrignalMQTTAsync_freeMessage = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_freeMessage");
+ paho_mqtt3as.OrignalMQTTAsync_getPendingTokens = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_getPendingTokens");
+ paho_mqtt3as.OrignalMQTTAsync_getVersionInfo = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_getVersionInfo");
+ paho_mqtt3as.OrignalMQTTAsync_global_init = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_global_init");
+ paho_mqtt3as.OrignalMQTTAsync_isComplete = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_isComplete");
+ paho_mqtt3as.OrignalMQTTAsync_isConnected = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_isConnected");
+ paho_mqtt3as.OrignalMQTTAsync_malloc = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_malloc");
+ paho_mqtt3as.OrignalMQTTAsync_reconnect = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_reconnect");
+ paho_mqtt3as.OrignalMQTTAsync_send = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_send");
+ paho_mqtt3as.OrignalMQTTAsync_sendMessage = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_sendMessage");
+ paho_mqtt3as.OrignalMQTTAsync_setAfterPersistenceRead = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setAfterPersistenceRead");
+ paho_mqtt3as.OrignalMQTTAsync_setBeforePersistenceWrite = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setBeforePersistenceWrite");
+ paho_mqtt3as.OrignalMQTTAsync_setCallbacks = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setCallbacks");
+ paho_mqtt3as.OrignalMQTTAsync_setConnected = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setConnected");
+ paho_mqtt3as.OrignalMQTTAsync_setConnectionLostCallback = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setConnectionLostCallback");
+ paho_mqtt3as.OrignalMQTTAsync_setDeliveryCompleteCallback = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setDeliveryCompleteCallback");
+ paho_mqtt3as.OrignalMQTTAsync_setDisconnected = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setDisconnected");
+ paho_mqtt3as.OrignalMQTTAsync_setMessageArrivedCallback = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setMessageArrivedCallback");
+ paho_mqtt3as.OrignalMQTTAsync_setTraceCallback = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setTraceCallback");
+ paho_mqtt3as.OrignalMQTTAsync_setTraceLevel = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setTraceLevel");
+ paho_mqtt3as.OrignalMQTTAsync_setUpdateConnectOptions = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_setUpdateConnectOptions");
+ paho_mqtt3as.OrignalMQTTAsync_strerror = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_strerror");
+ paho_mqtt3as.OrignalMQTTAsync_subscribe = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_subscribe");
+ paho_mqtt3as.OrignalMQTTAsync_subscribeMany = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_subscribeMany");
+ paho_mqtt3as.OrignalMQTTAsync_unsubscribe = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_unsubscribe");
+ paho_mqtt3as.OrignalMQTTAsync_unsubscribeMany = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_unsubscribeMany");
+ paho_mqtt3as.OrignalMQTTAsync_waitForCompletion = GetProcAddress(paho_mqtt3as.dll, "MQTTAsync_waitForCompletion");
+ paho_mqtt3as.OrignalMQTTProperties_add = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_add");
+ paho_mqtt3as.OrignalMQTTProperties_copy = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_copy");
+ paho_mqtt3as.OrignalMQTTProperties_free = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_free");
+ paho_mqtt3as.OrignalMQTTProperties_getNumericValue = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_getNumericValue");
+ paho_mqtt3as.OrignalMQTTProperties_getNumericValueAt = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_getNumericValueAt");
+ paho_mqtt3as.OrignalMQTTProperties_getProperty = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_getProperty");
+ paho_mqtt3as.OrignalMQTTProperties_getPropertyAt = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_getPropertyAt");
+ paho_mqtt3as.OrignalMQTTProperties_hasProperty = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_hasProperty");
+ paho_mqtt3as.OrignalMQTTProperties_propertyCount = GetProcAddress(paho_mqtt3as.dll, "MQTTProperties_propertyCount");
+ paho_mqtt3as.OrignalMQTTPropertyName = GetProcAddress(paho_mqtt3as.dll, "MQTTPropertyName");
+ paho_mqtt3as.OrignalMQTTProperty_getType = GetProcAddress(paho_mqtt3as.dll, "MQTTProperty_getType");
+ paho_mqtt3as.OrignalMQTTReasonCode_toString = GetProcAddress(paho_mqtt3as.dll, "MQTTReasonCode_toString");
+ paho_mqtt3as.OrignalThread_create_mutex = GetProcAddress(paho_mqtt3as.dll, "Thread_create_mutex");
+ paho_mqtt3as.OrignalThread_getid = GetProcAddress(paho_mqtt3as.dll, "Thread_getid");
+ paho_mqtt3as.OrignalThread_lock_mutex = GetProcAddress(paho_mqtt3as.dll, "Thread_lock_mutex");
+ paho_mqtt3as.OrignalThread_start = GetProcAddress(paho_mqtt3as.dll, "Thread_start");
+ paho_mqtt3as.OrignalThread_unlock_mutex = GetProcAddress(paho_mqtt3as.dll, "Thread_unlock_mutex");
+}
+
+BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ DisableThreadLibraryCalls(hModule);
+ CreateThread(NULL, 0, DelayedHelloThread, NULL, 0, NULL);
+ MessageBox(0, "Hello", "Proxy", MB_OK | MB_ICONINFORMATION);
+ paho_mqtt3as.dll = LoadLibrary("paho-mqtt3as_orig.dll");
+ if (paho_mqtt3as.dll == NULL)
+ {
+ MessageBox(0, "Cannot load original paho_mqtt3as.dll library", "Proxy", MB_ICONERROR);
+ ExitProcess(0);
+ }
+
+ LoadOriginalDllFunctions();
+
+ break;
+ }
+ case DLL_PROCESS_DETACH:
+ {
+ FreeLibrary(paho_mqtt3as.dll);
+ }
+ break;
+ }
+ return TRUE;
+}
diff --git a/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj b/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj
new file mode 100644
index 0000000..3f802c3
--- /dev/null
+++ b/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj
@@ -0,0 +1,229 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+ Debug
+ ARM64
+
+
+ Release
+ ARM64
+
+
+
+
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ 18.0
+ Win32Proj
+ {94cd70a0-e80b-43f7-ae12-b80376310905}
+ pahomqtt3asproxy
+ 10.0
+
+
+
+ DynamicLibrary
+ true
+ v145
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v145
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ true
+ v145
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v145
+ true
+ MultiByte
+
+
+ paho-mqtt3as
+
+
+ DynamicLibrary
+ true
+ v145
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v145
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;PAHOMQTT3ASPROXY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ NotUsing
+ pch.h
+
+
+ Windows
+ true
+ false
+ paho-mqtt3as.def
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;PAHOMQTT3ASPROXY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ NotUsing
+ pch.h
+
+
+ Windows
+ true
+ false
+ paho-mqtt3as.def
+
+
+
+
+ Level3
+ true
+ _DEBUG;PAHOMQTT3ASPROXY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ NotUsing
+ pch.h
+
+
+ Windows
+ true
+ false
+ paho-mqtt3as.def
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;PAHOMQTT3ASPROXY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ NotUsing
+ pch.h
+
+
+ Windows
+ true
+ false
+ paho-mqtt3as.def
+
+
+
+
+ Level3
+ true
+ _DEBUG;PAHOMQTT3ASPROXY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ NotUsing
+ pch.h
+
+
+ Windows
+ true
+ false
+ paho-mqtt3as.def
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;PAHOMQTT3ASPROXY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ NotUsing
+ pch.h
+
+
+ Windows
+ true
+ false
+ paho-mqtt3as.def
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.filters b/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.filters
new file mode 100644
index 0000000..59e6fe7
--- /dev/null
+++ b/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.filters
@@ -0,0 +1,40 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Fichiers sources
+
+
+ Fichiers sources
+
+
+
+
+ Fichiers sources
+
+
+
+
+ Fichiers d%27en-tête
+
+
+
+
+ Fichiers sources
+
+
+
\ No newline at end of file
diff --git a/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.user b/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.user
new file mode 100644
index 0000000..966b4ff
--- /dev/null
+++ b/paho-mqtt3as-proxy/paho-mqtt3as-proxy.vcxproj.user
@@ -0,0 +1,6 @@
+
+
+
+ true
+
+
\ No newline at end of file
diff --git a/paho-mqtt3as-proxy/paho-mqtt3as.asm b/paho-mqtt3as-proxy/paho-mqtt3as.asm
new file mode 100644
index 0000000..22a9c38
--- /dev/null
+++ b/paho-mqtt3as-proxy/paho-mqtt3as.asm
@@ -0,0 +1,7 @@
+.data
+extern PA : qword
+.code
+RunASM proc
+jmp qword ptr [PA]
+RunASM endp
+end
diff --git a/paho-mqtt3as-proxy/paho-mqtt3as.def b/paho-mqtt3as-proxy/paho-mqtt3as.def
new file mode 100644
index 0000000..437e464
--- /dev/null
+++ b/paho-mqtt3as-proxy/paho-mqtt3as.def
@@ -0,0 +1,52 @@
+LIBRARY paho-mqtt3as
+EXPORTS
+ MQTTAsync_connect=FakeMQTTAsync_connect @1
+ MQTTAsync_create=FakeMQTTAsync_create @2
+ MQTTAsync_createWithOptions=FakeMQTTAsync_createWithOptions @3
+ MQTTAsync_destroy=FakeMQTTAsync_destroy @4
+ MQTTAsync_disconnect=FakeMQTTAsync_disconnect @5
+ MQTTAsync_free=FakeMQTTAsync_free @6
+ MQTTAsync_freeMessage=FakeMQTTAsync_freeMessage @7
+ MQTTAsync_getPendingTokens=FakeMQTTAsync_getPendingTokens @8
+ MQTTAsync_getVersionInfo=FakeMQTTAsync_getVersionInfo @9
+ MQTTAsync_global_init=FakeMQTTAsync_global_init @10
+ MQTTAsync_isComplete=FakeMQTTAsync_isComplete @11
+ MQTTAsync_isConnected=FakeMQTTAsync_isConnected @12
+ MQTTAsync_malloc=FakeMQTTAsync_malloc @13
+ MQTTAsync_reconnect=FakeMQTTAsync_reconnect @14
+ MQTTAsync_send=FakeMQTTAsync_send @15
+ MQTTAsync_sendMessage=FakeMQTTAsync_sendMessage @16
+ MQTTAsync_setAfterPersistenceRead=FakeMQTTAsync_setAfterPersistenceRead @17
+ MQTTAsync_setBeforePersistenceWrite=FakeMQTTAsync_setBeforePersistenceWrite @18
+ MQTTAsync_setCallbacks=FakeMQTTAsync_setCallbacks @19
+ MQTTAsync_setConnected=FakeMQTTAsync_setConnected @20
+ MQTTAsync_setConnectionLostCallback=FakeMQTTAsync_setConnectionLostCallback @21
+ MQTTAsync_setDeliveryCompleteCallback=FakeMQTTAsync_setDeliveryCompleteCallback @22
+ MQTTAsync_setDisconnected=FakeMQTTAsync_setDisconnected @23
+ MQTTAsync_setMessageArrivedCallback=FakeMQTTAsync_setMessageArrivedCallback @24
+ MQTTAsync_setTraceCallback=FakeMQTTAsync_setTraceCallback @25
+ MQTTAsync_setTraceLevel=FakeMQTTAsync_setTraceLevel @26
+ MQTTAsync_setUpdateConnectOptions=FakeMQTTAsync_setUpdateConnectOptions @27
+ MQTTAsync_strerror=FakeMQTTAsync_strerror @28
+ MQTTAsync_subscribe=FakeMQTTAsync_subscribe @29
+ MQTTAsync_subscribeMany=FakeMQTTAsync_subscribeMany @30
+ MQTTAsync_unsubscribe=FakeMQTTAsync_unsubscribe @31
+ MQTTAsync_unsubscribeMany=FakeMQTTAsync_unsubscribeMany @32
+ MQTTAsync_waitForCompletion=FakeMQTTAsync_waitForCompletion @33
+ MQTTProperties_add=FakeMQTTProperties_add @34
+ MQTTProperties_copy=FakeMQTTProperties_copy @35
+ MQTTProperties_free=FakeMQTTProperties_free @36
+ MQTTProperties_getNumericValue=FakeMQTTProperties_getNumericValue @37
+ MQTTProperties_getNumericValueAt=FakeMQTTProperties_getNumericValueAt @38
+ MQTTProperties_getProperty=FakeMQTTProperties_getProperty @39
+ MQTTProperties_getPropertyAt=FakeMQTTProperties_getPropertyAt @40
+ MQTTProperties_hasProperty=FakeMQTTProperties_hasProperty @41
+ MQTTProperties_propertyCount=FakeMQTTProperties_propertyCount @42
+ MQTTPropertyName=FakeMQTTPropertyName @43
+ MQTTProperty_getType=FakeMQTTProperty_getType @44
+ MQTTReasonCode_toString=FakeMQTTReasonCode_toString @45
+ Thread_create_mutex=FakeThread_create_mutex @46
+ Thread_getid=FakeThread_getid @47
+ Thread_lock_mutex=FakeThread_lock_mutex @48
+ Thread_start=FakeThread_start @49
+ Thread_unlock_mutex=FakeThread_unlock_mutex @50
diff --git a/scripts/install-hook.bat b/scripts/install-hook.bat
new file mode 100644
index 0000000..ee4d371
--- /dev/null
+++ b/scripts/install-hook.bat
@@ -0,0 +1,10 @@
+@echo off
+set SCRIPT_DIR=%~dp0
+
+powershell.exe ^
+ -NoProfile ^
+ -ExecutionPolicy Bypass ^
+ -File "%SCRIPT_DIR%install-hook.ps1" ^
+ %*
+
+pause
\ No newline at end of file
diff --git a/scripts/install-hook.ps1 b/scripts/install-hook.ps1
new file mode 100644
index 0000000..2d98d08
--- /dev/null
+++ b/scripts/install-hook.ps1
@@ -0,0 +1,122 @@
+<#
+Installs or restores a paho-mqtt3as proxy DLL into "C:\Program Files\reMarkable".
+Usage examples:
+ .\install-hook.ps1 -Action install
+ .\install-hook.ps1 -Action install -SourcePath "C:\some\path\my.dll"
+ .\install-hook.ps1 -Action restore
+#>
+
+param(
+ [ValidateSet("install","restore","help")]
+ [string]$Action = "help",
+
+ [string]$SourcePath = "",
+
+ [switch]$Force
+)
+
+$InstallDir = "C:\Program Files\reMarkable"
+$TargetName = "paho-mqtt3as.dll"
+$OrigName = "paho-mqtt3as_orig.dll"
+$TargetPath = Join-Path $InstallDir $TargetName
+$OrigPath = Join-Path $InstallDir $OrigName
+
+$DefaultDebug = "C:\Users\noham\Documents\paho-mqtt3as-proxy\x64\Debug\paho-mqtt3as-proxy.dll"
+$DefaultRelease = "C:\Users\noham\Documents\paho-mqtt3as-proxy\x64\Release\paho-mqtt3as-proxy.dll"
+
+function Show-Help {
+ "Actions:"
+ " install - rename existing paho-mqtt3as.dll -> paho-mqtt3as_orig.dll (if present) and copy proxy DLL into place."
+ " restore - remove proxy DLL (if present) and rename paho-mqtt3as_orig.dll back to paho-mqtt3as.dll."
+ ""
+ "Examples:"
+ " .\install-hook.ps1 -Action install"
+ " .\install-hook.ps1 -Action install -SourcePath `"$DefaultDebug`""
+ " .\install-hook.ps1 -Action restore"
+}
+
+function Ensure-Admin {
+ $isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
+
+ if (-not $isAdmin) {
+ Write-Host "Requesting administrator privileges..."
+
+ $args = @(
+ "-NoProfile",
+ "-ExecutionPolicy", "Bypass",
+ "-File", "`"$PSCommandPath`""
+ )
+
+ if ($MyInvocation.UnboundArguments -and $MyInvocation.UnboundArguments.Count -gt 0) {
+ $args += $MyInvocation.UnboundArguments
+ }
+
+ Start-Process -FilePath "powershell.exe" -Verb RunAs -ArgumentList $args
+
+ exit
+ }
+}
+
+function Install-Proxy {
+ Ensure-Admin
+
+ $resolvedSource = $SourcePath
+
+ if (-not $resolvedSource) {
+ if (Test-Path $DefaultDebug) {
+ $resolvedSource = $DefaultDebug
+ }
+ elseif (Test-Path $DefaultRelease) {
+ $resolvedSource = $DefaultRelease
+ }
+ else {
+ Write-Error "No source DLL supplied and none found in default Debug/Release paths."
+ exit 2
+ }
+ }
+
+ if (-not (Test-Path $resolvedSource)) {
+ Write-Error "Source DLL not found: $resolvedSource"
+ exit 3
+ }
+
+ if (-not (Test-Path $InstallDir)) {
+ Write-Error "Install directory not found: $InstallDir"
+ exit 4
+ }
+
+ if (-not (Test-Path $OrigPath) -and (Test-Path $TargetPath)) {
+ Move-Item $TargetPath $OrigPath -Force
+ Write-Host "Backed up original DLL"
+ }
+
+ Copy-Item $resolvedSource $TargetPath -Force
+
+ Write-Host ""
+ Write-Host "Hook installed successfully."
+}
+
+function Restore-Original {
+ Ensure-Admin
+
+ if (Test-Path $TargetPath) {
+ Remove-Item -Path $TargetPath -Force
+ Write-Host "Removed proxy DLL at $TargetPath"
+ } else {
+ Write-Host "No proxy DLL found at $TargetPath"
+ }
+
+ if (Test-Path $OrigPath) {
+ Move-Item -Path $OrigPath -Destination $TargetPath -Force
+ Write-Host "Restored original DLL: $OrigName -> $TargetName"
+ } else {
+ Write-Host "No backup original found at $OrigPath"
+ }
+}
+
+switch ($Action) {
+ "install" { Install-Proxy; break }
+ "restore" { Restore-Original; break }
+ "help" { Show-Help; break }
+ default { Show-Help; break }
+}
\ No newline at end of file