Advertisement
Hidend

Untitled

May 8th, 2024
1,132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.45 KB | None | 0 0
  1. //hidend
  2. #include <Windows.h>
  3. #include <d3d9.h>
  4. #include <cstdio>
  5. #include <iostream>
  6. #include <Windows.h>
  7. #include "MinHook.h"
  8. #if defined _M_X64
  9. #pragma comment(lib, "libMinHook.x64.lib")
  10. #elif defined _M_IX86
  11. #pragma comment(lib, "minhook.x32d.lib")
  12. #endif
  13. uint32_t samp_base = 0;
  14.  
  15. const DWORD OFFSETS[6][2]{
  16.     /*ChatInfo, AddMsg*/
  17.     {0x21A0E4, 0x645A0}, // 037-r1 - 0
  18.     {0x021A0EC, 0x64670}, // 037-r2 - 1
  19.     {0x026E8C8, 0x679F0}, // 037-r3_1 - 2
  20.     {0x026E9F8, 0x68130}, // 037-r4 - 3
  21.     {0x026E9F8, 0x68170}, // 037-r4_2 -4
  22.     {0x026EB80, 0x68170}, // 037-r5_1 - 5
  23. };
  24.  
  25. int get_samp_version_id()
  26. {
  27.     int version_current = -1;
  28.  
  29.     if (samp_base)
  30.     {
  31.         std::cout << "Dentro!" << std::endl;
  32.         int version_id = *reinterpret_cast<int*>((char*)samp_base + 0x128);
  33.         std::cout << "Version ID: " << version_id << std::endl;
  34.  
  35.         switch (version_id) {
  36.         case 0x5542F47A: // R1
  37.             version_current = 0;
  38.             break;
  39.         case 0x59C30C94: // R2
  40.             version_current = 1;
  41.             break;
  42.         default:
  43.             version_id = *reinterpret_cast<int*>((char*)samp_base + 0x120);
  44.             std::cout << "No es ni R1 ni R2, veamos las demas: " << version_id << std::endl;
  45.  
  46.             switch (version_id) {
  47.             case 0x5C0B4243: // R3
  48.                 version_current = 2;
  49.                 break;
  50.             case 0x5DD606CD: // R4 - v1
  51.                 version_current = 3;
  52.                 break;
  53.             case 0x6094ACAB: // R4 - v2
  54.                 version_current = 4;
  55.                 break;
  56.             case 0x6372C39E: // R5, ni nos interesa pero meh
  57.                 version_current = 5;
  58.                 break;
  59.             }
  60.         }
  61.     }
  62.     return version_current;
  63. }
  64.  
  65. void addMessageToChat(unsigned dwColor, const char* szMsg, ...)
  66. {
  67.     int version = get_samp_version_id();
  68.     std::cout << "Version2: " << version << std::endl;
  69.     if (version == -1)
  70.         return;
  71.  
  72.     DWORD chatInfoOffset = OFFSETS[version][0];
  73.     DWORD addMsgOffset = OFFSETS[version][1];
  74.  
  75.     std::cout << "chatInfoOffset: " << chatInfoOffset << std::endl;
  76.     std::cout << "addMsgOffset: " << addMsgOffset << std::endl;
  77.     unsigned char red = static_cast<unsigned char>(rand() % 256);
  78.     unsigned char green = static_cast<unsigned char>(rand() % 256);
  79.     unsigned char blue = static_cast<unsigned char>(rand() % 256);
  80.  
  81.     // Combine the color components into a single unsigned integer
  82.     unsigned newColor = (red << 16) | (green << 8) | blue;
  83.     auto addMessage = reinterpret_cast<void(__thiscall*)(void* pChat, unsigned color, const char* message)>(samp_base + addMsgOffset);
  84.     addMessage(*reinterpret_cast<void**>(samp_base + chatInfoOffset), newColor, szMsg);
  85. }
  86.  
  87.  
  88. typedef HMODULE(WINAPI* TYPE_LoadLibraryA)(LPCSTR);
  89. TYPE_LoadLibraryA g_loadLibraryA_original = NULL;
  90. HMODULE WINAPI LoadLibraryA_replacement(_In_ LPCTSTR lpFileName)
  91. {
  92.     if (strcmp("OPENGL32", lpFileName) != 0)
  93.     {
  94.         addMessageToChat(-1, "LoadLibraryA_replacement!");
  95.         return NULL; //devolvemos null y paramos la inyeccion
  96.     }
  97.     return g_loadLibraryA_original(lpFileName);
  98. }
  99.  
  100. typedef HMODULE(WINAPI* TYPE_LoadLibraryExA)(LPCSTR, HANDLE, DWORD);
  101. TYPE_LoadLibraryExA g_loadLibraryExA_original = NULL;
  102. HMODULE WINAPI LoadLibraryExA_replacement(_In_ LPCSTR lpLibFileName, _In_ HANDLE hFile, _In_ DWORD  dwFlags)
  103. {
  104.     addMessageToChat(-1, "LoadLibraryExA_replacement!");
  105.     return g_loadLibraryExA_original(lpLibFileName, hFile, dwFlags);
  106.  
  107. }
  108.  
  109. typedef HMODULE(WINAPI* TYPE_LoadLibraryW)(LPCWSTR);
  110. TYPE_LoadLibraryW g_loadLibraryW_original = NULL;
  111. HMODULE WINAPI LoadLibraryW_replacement(LPCWSTR lpLibFileName)
  112. {
  113.     addMessageToChat(-1, "LoadLibraryW_replacement!");
  114.     return NULL; //devolvemos null y paramos la inyeccion
  115.     return g_loadLibraryW_original(lpLibFileName);
  116. }
  117.  
  118. typedef HMODULE(WINAPI* TYPE_LoadLibraryExW)(LPCWSTR, HANDLE, DWORD);
  119. TYPE_LoadLibraryExW g_LoadLibraryExW_original = NULL;
  120. HMODULE WINAPI LoadLibraryExW_replacement(_In_ LPCWSTR  lpLibFileName, _In_ HANDLE hFile, _In_ DWORD  dwFlags)
  121. {
  122.     addMessageToChat(-1, "LoadLibraryExW_replacement!");
  123.  
  124.     return g_LoadLibraryExW_original(lpLibFileName, hFile, dwFlags);
  125. }
  126.  
  127. int init()
  128. {
  129.     std::cout << "init" << std::endl;
  130.     samp_base = (DWORD)LoadLibraryA("samp.dll");
  131.     if (MH_Initialize() != MH_OK)
  132.     {
  133.         OutputDebugString("Initialize MinHook False!");
  134.         return false;
  135.     }
  136.     if (MH_CreateHook(
  137.         &LoadLibraryA,
  138.         &LoadLibraryA_replacement,
  139.         (LPVOID*)(&g_loadLibraryA_original)
  140.     ) != MH_OK)
  141.     {
  142.         return false;
  143.     }
  144.     if (MH_EnableHook(&LoadLibraryA) != MH_OK)
  145.     {
  146.         return false;
  147.     }
  148.  
  149.     if (MH_CreateHook(
  150.         &LoadLibraryExA,
  151.         &LoadLibraryExA_replacement,
  152.         (LPVOID*)(&g_loadLibraryExA_original)
  153.     ) != MH_OK)
  154.     {
  155.         return false;
  156.     }
  157.     if (MH_EnableHook(&LoadLibraryExA) != MH_OK)
  158.     {
  159.         return false;
  160.     }
  161.  
  162.     if (MH_CreateHook(
  163.         &LoadLibraryW,
  164.         &LoadLibraryW_replacement,
  165.         (LPVOID*)(&g_loadLibraryW_original)
  166.     ) != MH_OK)
  167.     {
  168.         OutputDebugString("MH_CreateHook loadLibraryW False!");
  169.         return false;
  170.     }
  171.     if (MH_EnableHook(&LoadLibraryW) != MH_OK)
  172.     {
  173.         OutputDebugString("MH_EnableHook loadLibraryW False!");
  174.         return false;
  175.     }
  176.  
  177.     if (MH_CreateHook(
  178.         &LoadLibraryExW,
  179.         &LoadLibraryExW_replacement,
  180.         (LPVOID*)(&g_LoadLibraryExW_original)
  181.     ) != MH_OK)
  182.     {
  183.         OutputDebugString("MH_CreateHook LoadLibraryExW False!");
  184.         return false;
  185.     }
  186.     if (MH_EnableHook(&LoadLibraryExW) != MH_OK)
  187.     {
  188.         OutputDebugString("MH_EnableHook LoadLibraryExW False!");
  189.         return false;
  190.     }
  191.  
  192.     while (true)
  193.     {
  194.         addMessageToChat(-1, "Hidend // Shaarawy // <3");
  195.         Sleep(5000);
  196.     }
  197.     FreeLibraryAndExitThread(GetModuleHandle(NULL), 0);
  198.     return 0;
  199. }
  200.  
  201. BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
  202. {
  203.     switch (dwReasonForCall)
  204.     {
  205.     case DLL_PROCESS_ATTACH:
  206.         //AllocConsole();
  207.         //freopen("CONOUT$", "w", stdout);
  208.         //std::cout << "injected" << std::endl;
  209.         CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)init, NULL, NULL, NULL);
  210.         break;
  211.     case DLL_THREAD_ATTACH:
  212.     case DLL_THREAD_DETACH:
  213.     case DLL_PROCESS_DETACH:
  214.         break;
  215.     }
  216.     return TRUE;
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement