Ja, das geht sogar extrem leicht mit
Microsoft Detours. Verwende ich unter anderem für genau diesen use-case für ein paar Modprojekte.
Du hast folgende Optionen:
1. Wenn du eine DLL statisch zur import table einer .exe hinzufügen möchtest, kannst du
DetourBinaryEditImports verwenden. Das Repository hat Beispielcode dafür, siehe
SampleSetdll. Für deinen use-case kannst du einfach den example code unverändert übernehmen und
setdll.exe verwenden um das executable zu patchen. Dann legst du einfach die gewünschte DLL in dasselbe Verzeichnis und das Programm lädt diese DLL ganz normal beim Start.
2. Wenn du aus welchem Grund auch immer das originale executable nicht on-disk modifizieren möchtest, kannst du einen kleinen Loader schreiben, der
DetourCreateProcessWithDllEx verwendet (oder einfach
SampleWithdll verwenden). Das ist im Grunde ein
CreateProcess mit
CREATE_SUSPENDED flag, welches die import table erst im RAM modifiziert.
Die andere Möglichkeit, ohne Detours, wäre die
DLL search order auszunutzen. Wenn dein executable eine DLL aus dem lokalen Verzeichnis lädt, kannst du eine Proxy DLL schreiben mit demselben Namen, welche alle exportierten Funktionen der originalen DLL implementiert (einfach über
LoadLibrary stub) plus die gewünschte Zusatzfunktionalität.