image.png

generate EXE

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. int main(void) {
  6. printf("RT Operator, here I come!\n");
  7. getchar();
  8. return 0;
  9. }
  1. @ECHO OFF
  2. //编译
  3. cl.exe /nologo /Ox /MT /W0 /GS- /DNDEBUG /Tcimplant.cpp /link /OUT:implant.exe /SUBSYSTEM:CONSOLE /MACHINE:x64

generate dll

当系统启动或终止进程或线程时,它会使用进程的第一个线程为每个加载的 DLL 调用入口点函数。 当 DLL 使用 LoadLibrary 和 FreeLibrary 函数加载或卸载 DLL 时,系统还会调用该函数的入口点函数。
https://learn.microsoft.com/zh-cn/windows/win32/dlls/dllmain

  1. #include <Windows.h>
  2. #pragma comment (lib, "user32.lib")
  3. BOOL WINAPI DllMain(
  4. HINSTANCE hinstDLL, // handle to DLL module
  5. DWORD fdwReason, // reason for calling function
  6. LPVOID lpvReserved ) // reserved
  7. {
  8. // Perform actions based on the reason for calling.
  9. switch( fdwReason )
  10. {
  11. case DLL_PROCESS_ATTACH:
  12. //由于启动进程或调用 LoadLibrary,DLL 正在加载到当前进程的虚拟地址空间中。
  13. // Initialize once for each new process.
  14. // Return FALSE to fail DLL load.
  15. break;
  16. case DLL_THREAD_ATTACH://当前进程正在创建新线程。
  17. // Do thread-specific initialization.
  18. break;
  19. case DLL_THREAD_DETACH://线程正在完全退出。
  20. // Do thread-specific cleanup.
  21. break;
  22. case DLL_PROCESS_DETACH:
  23. //DLL 正从调用进程的虚拟地址空间中卸载,因为它加载失败,或者引用计数已达到零,
  24. // (进程每次调用 LoadLibrary) 时,都会终止或调用 FreeLibrary 。
  25. if (lpvReserved != nullptr)
  26. {
  27. break; // do not do cleanup if process termination scenario
  28. }
  29. // Perform any necessary cleanup.
  30. break;
  31. }
  32. return TRUE; // Successful DLL_PROCESS_ATTACH.
  33. }
  34. extern "C" {
  35. //导出函数
  36. __declspec(dllexport) BOOL WINAPI RunME(void) {
  37. MessageBox(
  38. NULL,
  39. "RT Operator, here I come!",
  40. "RTO",
  41. MB_OK
  42. );
  43. return TRUE;
  44. }
  45. }
  1. @ECHO OFF
  2. cl.exe /D_USRDLL /D_WINDLL implantDLL.cpp /MT /link /DLL /OUT:implant.dll