Sobre la segunda opción, has de escribir el binario original como recurso embebido Después, al ejecutar el binario infectado, tendrás que cargar el binario original mediante un loader PE (runPE). Hay tropecientos en internet. Es decir binario_infectado > realizas X acciones maliciosas > cargas la imagen PE original en runtime > se ejecuta el binario original.
3. Voy a buscar por mi cuenta, si tenes alguna documentación de dllhijacking estaría agradecido.
Esta técnica es conocida por el problema del árbol de dependencias. No es algo que yo haya estudiado a fondo pero si practicado. El problema es el siguiente, el OS Windows tiene una whitelist de las DLLs conocidas, por lo tanto si incluyo por ejemplo USER32.DLL en la carpeta del binario no va a llamar a esa DLL sino la que está en system32. En cambio, si la DLL no esta whitelisteada en el registro (regedit, clave KnownDLLs creo recordar) entonces TODO DEPENDE de como se haya programado la aplicación.
Si el binario tiene LoadLibrary("xxx.dll") y esa DLL está en otro directorio por ejemplo system32 si insterto una dll que se llame xxx.dll en el directorio del binario primero cargará la del WorkingDirectory, es decir la maliciosa. En cambio si hace LoadLibrary("C:\\Windows\\System32\\xxx.dll") va directamente al directorio system32 y escoge la .dll original.
Espero se entienda. Saludos.