JAVA 152
Untitled Guest on 11th February 2020 07:58:47 PM
  1. #include <winsock2.h>
  2. #include <windows.h>
  3. #include <iphlpapi.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6. #include <tlhelp32.h>
  7. #include <psapi.h>
  8. #include <icmpapi.h>
  9. #include <io.h>
  10.  
  11. #include "hook.h"
  12. #include "blowfish.h"
  13. #include "resource.h"
  14. #include "Obfuscator.h"
  15.  
  16. #include "stdafx.h"
  17. #include "ThemidaSDK.h"
  18. #include "splash.h"
  19.  
  20. #pragma comment(lib, "User32.lib")
  21. #pragma comment(lib, "ws2_32.lib")
  22. #pragma comment(lib, "iphlpapi.lib")
  23. #pragma comment(lib, "psapi.lib")
  24.  
  25. struct TFontDrawInfo
  26. {
  27.         int font;
  28.         unsigned int color, u1, u2, u3, u4;
  29. };
  30.  
  31. struct TNetworkPacket
  32. {
  33.     unsigned char id, p1;
  34.     unsigned short int subid, size, p2;
  35.     unsigned char *data;
  36. };
  37.  
  38. struct TSpecialString
  39. {
  40.         bool isDraw;
  41.         TFontDrawInfo FontDrawInfo;
  42.         int x, y;
  43.         wchar_t text[64];
  44. };
  45.  
  46. #pragma pack(1)
  47. typedef struct _IDENTIFY_DATA
  48. {
  49.         USHORT GeneralConfiguration;
  50.     USHORT NumberOfCylinders;
  51.     USHORT Reserved1;
  52.     USHORT NumberOfHeads;
  53.     USHORT UnformattedBytesPerTrack;
  54.     USHORT UnformattedBytesPerSector;
  55.     USHORT SectorsPerTrack;
  56.     USHORT VendorUnique1[3];
  57.     USHORT SerialNumber[10];
  58.     USHORT BufferType;
  59.     USHORT BufferSectorSize;
  60.     USHORT NumberOfEccBytes;
  61.     USHORT FirmwareRevision[4];
  62.     USHORT ModelNumber[20];
  63.     UCHAR  MaximumBlockTransfer;
  64.     UCHAR  VendorUnique2;
  65.     USHORT DoubleWordIo;
  66.     USHORT Capabilities;
  67.     USHORT Reserved2;
  68.     UCHAR  VendorUnique3;
  69.     UCHAR  PioCycleTimingMode;
  70.     UCHAR  VendorUnique4;
  71.     UCHAR  DmaCycleTimingMode;
  72.     USHORT TranslationFieldsValid:1;
  73.     USHORT Reserved3:15;
  74.     USHORT NumberOfCurrentCylinders;
  75.     USHORT NumberOfCurrentHeads;
  76.     USHORT CurrentSectorsPerTrack;
  77.     ULONG  CurrentSectorCapacity;
  78.     USHORT CurrentMultiSectorSetting;
  79.     ULONG  UserAddressableSectors;
  80.     USHORT SingleWordDMASupport : 8;
  81.     USHORT SingleWordDMAActive : 8;
  82.     USHORT MultiWordDMASupport : 8;
  83.     USHORT MultiWordDMAActive : 8;
  84.     USHORT AdvancedPIOModes : 8;
  85.     USHORT Reserved4 : 8;
  86.     USHORT MinimumMWXferCycleTime;
  87.     USHORT RecommendedMWXferCycleTime;
  88.     USHORT MinimumPIOCycleTime;
  89.     USHORT MinimumPIOCycleTimeIORDY;
  90.     USHORT Reserved5[2];
  91.     USHORT ReleaseTimeOverlapped;
  92.     USHORT ReleaseTimeServiceCommand;
  93.     USHORT MajorRevision;
  94.     USHORT MinorRevision;
  95.     USHORT Reserved6[50];
  96.     USHORT SpecialFunctionsEnabled;
  97.     USHORT Reserved7[128];
  98. } IDENTIFY_DATA, *PIDENTIFY_DATA;
  99. #pragma pack()
  100.  
  101. typedef int (__stdcall *_connect) (SOCKET s, const struct sockaddr *name, int namelen);
  102. _connect true_connect;
  103.  
  104. typedef int (__fastcall *_AddNetworkQueue) (unsigned int This, unsigned int EDX, TNetworkPacket *NetworkPacket);
  105. _AddNetworkQueue true_AddNetworkQueue;
  106.  
  107. typedef void (__cdecl *_SendPacket) (unsigned int This, char *Format, ...);
  108. _SendPacket true_SendPacket;
  109.  
  110.  
  111. unsigned int _clientSocket = NULL;
  112.  
  113.  
  114. typedef void (_fastcall *_MasterProcessPreRender) (unsigned int This, unsigned int EDX, unsigned int UCanvas);
  115. _MasterProcessPreRender true_MasterProcessPreRender;
  116.  
  117. typedef int (_fastcall *_DrawTextTTFToCanvas) (unsigned int This, unsigned int EDX, int X, int Y, wchar_t *text, TFontDrawInfo *FontDrawInfo, unsigned char, int, int, unsigned int FontDrawInfoSection);
  118. _DrawTextTTFToCanvas true_DrawTextTTFToCanvas;
  119.  
  120. typedef void (_fastcall *_Render) (unsigned int This, unsigned int EDX, unsigned int FRenderInterface);
  121. _Render true_Render;
  122.  
  123. RECT rc;
  124. HWND hWND;
  125. TSpecialString SpecialStrings[16];
  126. unsigned int Canvas, hEngineStart, hEngineEnd, mainThread, lastPing = 0, KiUserExceptDispADR, hNtDllStart, hNtDllEnd;
  127. HANDLE ghMutex;
  128.  
  129. void ErrorExit(char *msg)
  130. {
  131.         FILE *f;
  132.        
  133.         fopen_s(&f, "Protection.log", "a+");
  134.  
  135.         if (f != 0)
  136.         {
  137.                 fprintf(f, "%s\n", msg);
  138.                 fclose(f);
  139.         }
  140.  
  141.         ExitProcess(0);
  142. }
  143.  
  144. void Logger(char *msg)
  145. {
  146.         FILE *f;
  147.        
  148.         fopen_s(&f, "Debug.log", "a+");
  149.  
  150.         if (f != 0)
  151.         {
  152.                 fprintf(f, "%s\n", msg);
  153.                 fclose(f);
  154.         }
  155. }
  156.  
  157. bool SetPrivileges(HANDLE hProcess, DWORD dwPrivilegeCount, LPCTSTR *ppPrivilegeName)
  158. {
  159.         HANDLE hToken = 0;
  160.         if(!::OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken))
  161.                 return false;
  162.  
  163.         PTOKEN_PRIVILEGES Privileges = (PTOKEN_PRIVILEGES)
  164.                 new char[sizeof(DWORD) + sizeof(LUID_AND_ATTRIBUTES) * dwPrivilegeCount];
  165.  
  166.         LUID_AND_ATTRIBUTES *LuidAndAttr = (LUID_AND_ATTRIBUTES *)(((char *)Privileges) + sizeof(DWORD));
  167.  
  168.         Privileges->PrivilegeCount = dwPrivilegeCount;
  169.  
  170.         for(DWORD i = 0; i < dwPrivilegeCount; i++)
  171.         {
  172.                 if(!::LookupPrivilegeValue(0,
  173.                         ppPrivilegeName[i],
  174.                         &LuidAndAttr[i].Luid))
  175.                 {
  176.                         ::CloseHandle(hToken);
  177.                         delete[]Privileges;
  178.                         return false;
  179.                 }
  180.  
  181.                 LuidAndAttr[i].Attributes = SE_PRIVILEGE_ENABLED;
  182.         }
  183.         if(!::AdjustTokenPrivileges(hToken, FALSE, Privileges, 0, 0, 0))
  184.         {
  185.                 ::CloseHandle(hToken);
  186.                 delete[]Privileges;
  187.                 return false;
  188.         }
  189.         ::CloseHandle(hToken);
  190.         delete[]Privileges;
  191.         return true;
  192. }
  193.  
  194. bool checkRun(char* NAmePorc)
  195. {
  196.     HANDLE hProcessSnap = NULL;
  197.     PROCESSENTRY32 pe32;
  198.     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  199.     if(hProcessSnap == INVALID_HANDLE_VALUE)
  200.         {
  201.                 return true;
  202.         }
  203.     pe32.dwSize = sizeof(PROCESSENTRY32);
  204.     if(Process32First(hProcessSnap, &pe32))
  205.     {
  206.         while(Process32Next(hProcessSnap, &pe32));
  207.                 {
  208.                         if(strstr(NAmePorc, (char*)pe32.szExeFile))
  209.                         {
  210.                                 CloseHandle (hProcessSnap);
  211.                                 return true;
  212.                         }
  213.                 }
  214.     }
  215.     CloseHandle(hProcessSnap);
  216.     return false;
  217. }
  218.  
  219. int __stdcall new_connect(SOCKET s, const struct sockaddr *name, int namelen)
  220. {
  221.         struct sockaddr_in *name_in = (struct sockaddr_in*) name;
  222.         if (name_in->sin_port == htons(2106))
  223.         {
  224.                 name_in->sin_port = htons(2106);
  225.                 name_in->sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  226.         }
  227.  
  228.         if (name_in->sin_port == htons(7777))
  229.         {
  230.                 name_in->sin_port = htons(7777);
  231.                 name_in->sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  232.         }
  233.         return true_connect(s, name, namelen);
  234. }
  235.  
  236. void decodeKey(unsigned char *buf)
  237. {
  238.         unsigned char bfkey[16] =  {110, 36, 2, 15, -5, 17, 24, 23, 18, 45, 1, 21, 122, 16, -5, 12}; //STATIC KEY
  239.         unsigned char tmp[24];
  240.         Blowfish_CTX ctx;
  241.  
  242.         memcpy(tmp, buf, 16);
  243.  
  244.         Blowfish_Init(&ctx, bfkey, 16);
  245.         Blowfish_Decrypt(&ctx, tmp, 16);
  246.  
  247.         memcpy(buf, tmp, 16);
  248. }
  249. int __fastcall new_AddNetworkQueue(unsigned int This, unsigned int EDX, TNetworkPacket *NetworkPacket)
  250. {
  251. //      if ((*(unsigned int*) (KiUserExceptDispADR + 10) + KiUserExceptDispADR < hNtDllStart) || (*(unsigned int*) (KiUserExceptDispADR + 10) + KiUserExceptDispADR > hNtDllEnd))
  252. //              ErrorExit("Bot Program Detected #0!");
  253.  
  254.         unsigned int retAddr = *((unsigned int*) &NetworkPacket - 1);
  255.  
  256.         if ((retAddr < hEngineStart) || (retAddr > hEngineEnd))
  257.                 ErrorExit("Bot Program Detected #1!");
  258.  
  259.         if (NetworkPacket->subid == 0xFFFF)
  260.         {
  261.                 switch (NetworkPacket->id)
  262.                 {
  263.                         case 0xF6: //case 0x74:
  264.                                 true_SendPacket(_clientSocket, "cd", 0xcb, 104);
  265.                                 break;
  266.                         case 0x2E:
  267.                         //      decodeKey(NetworkPacket->data + 1);
  268.                                 break;
  269.                         case 0xB0:
  270.                                 memset(&SpecialStrings[NetworkPacket->data[0]].FontDrawInfo, 0, sizeof(TFontDrawInfo));
  271.                                 SpecialStrings[NetworkPacket->data[0]].isDraw = (NetworkPacket->data[1] == 1) ? true : false;
  272.                                 SpecialStrings[NetworkPacket->data[0]].FontDrawInfo.font = (char) NetworkPacket->data[2];
  273.                                 SpecialStrings[NetworkPacket->data[0]].x = *(int*) (NetworkPacket->data + 3);
  274.                                 SpecialStrings[NetworkPacket->data[0]].y = *(int*) (NetworkPacket->data + 7);
  275.                                 SpecialStrings[NetworkPacket->data[0]].FontDrawInfo.color = *(unsigned int*) (NetworkPacket->data + 11);
  276.                                 wcscpy_s(SpecialStrings[NetworkPacket->data[0]].text, (wchar_t*) (NetworkPacket->data + 15));
  277.                                 if (NetworkPacket->data[0] == 14)
  278.                                 {
  279.                                         HANDLE hIcmpFile = IcmpCreateFile();
  280.                                         ICMP_ECHO_REPLY Reply;
  281.                                         if (hIcmpFile != 0)
  282.                                         {
  283.                                                 if (IcmpSendEcho(hIcmpFile, inet_addr("127.0.0.1"), 0, 0, 0, &Reply, sizeof(ICMP_ECHO_REPLY), 500) != 0)
  284.                                                         lastPing = Reply.RoundTripTime;
  285.                                                 IcmpCloseHandle(hIcmpFile);
  286.                                         }
  287.                                         wsprintf(SpecialStrings[NetworkPacket->data[0]].text, L"%ls%d", (wchar_t*) (NetworkPacket->data + 15), lastPing);
  288.                                 }
  289.                                 break;
  290.                 }
  291.         }
  292.  
  293.         return true_AddNetworkQueue(This, EDX, NetworkPacket);
  294. }
  295.  
  296. bool getHWID(wchar_t *str)
  297. {
  298.         HW_PROFILE_INFO   HwProfInfo;
  299.         char HWID[1024];
  300.  
  301.         if (!GetCurrentHwProfile(&HwProfInfo))
  302.         {
  303.                 return false;
  304.         }
  305.         sprintf_s(HWID, 1000, "%02X%02X%02X%02X", HwProfInfo.szHwProfileGuid);
  306.         mbstowcs_s(0, str, 1000, HWID, 1000);
  307.  
  308.         return true;
  309. }
  310.  
  311. bool getMAC(wchar_t *str)
  312. {
  313.         IP_ADAPTER_INFO AdapterInfo[16];
  314.         PIP_ADAPTER_INFO pAdapterInfo;
  315.         unsigned long dwBufLen;
  316.         char MAC[1024];
  317.  
  318.         dwBufLen = sizeof(AdapterInfo);
  319.  
  320.         if (GetAdaptersInfo(AdapterInfo, &dwBufLen) != ERROR_SUCCESS)
  321.                 return false;
  322.  
  323.         pAdapterInfo = AdapterInfo;
  324.  
  325.         while ((pAdapterInfo->Address[0] == 0) && (pAdapterInfo->Address[1] == 0) && (pAdapterInfo->Address[2] == 0) &&(pAdapterInfo->Address[3] == 0) && (pAdapterInfo->Address[4] == 0) && (pAdapterInfo->Address[5] == 0))
  326.                 pAdapterInfo = pAdapterInfo->Next;
  327.  
  328.         sprintf_s(MAC, 1000, "%02X%02X%02X%02X%02X%02X", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
  329.  
  330.         mbstowcs_s(0, str, 1000, MAC, 1000);
  331.  
  332.         return true;
  333. }
  334.  
  335. char *flipAndCodeBytes (const char *str, int pos, int flip, char *buf)
  336. {
  337.         int i;
  338.         int j = 0;
  339.         int k = 0;
  340.  
  341.         buf[0] = '\0';
  342.  
  343.         if (pos <= 0)
  344.                 return buf;
  345.  
  346.         if (!j)
  347.         {
  348.                 char p = 0;
  349.  
  350.                 j = 1;
  351.                 k = 0;
  352.                 buf[k] = 0;
  353.  
  354.                 for (i = pos; j && str[i] != '\0'; ++i)
  355.                 {
  356.                         char c = tolower(str[i]);
  357.  
  358.                         if (isspace(c))
  359.                                 c = '0';
  360.  
  361.                         ++p;
  362.                         buf[k] <<= 4;
  363.  
  364.                         if (c >= '0' && c <= '9')
  365.                                 buf[k] |= (unsigned char) (c - '0');
  366.                         else if (c >= 'a' && c <= 'f')
  367.                                 buf[k] |= (unsigned char) (c - 'a' + 10);
  368.                         else
  369.                         {
  370.                                 j = 0;
  371.                                 break;
  372.                         }
  373.  
  374.                         if (p == 2)
  375.                         {
  376.                                 if (buf[k] != '\0' && ! isprint(buf[k]))
  377.                                 {
  378.                                         j = 0;
  379.                                         break;
  380.                                 }
  381.  
  382.                                 ++k;
  383.                                 p = 0;
  384.                                 buf[k] = 0;
  385.                         }
  386.                 }
  387.         }
  388.  
  389.         if (!j)
  390.         {
  391.                 j = 1;
  392.                 k = 0;
  393.  
  394.                 for (i = pos; j && str[i] != '\0'; ++i)
  395.                 {
  396.                         char c = str[i];
  397.  
  398.                         if ( ! isprint(c))
  399.                         {
  400.                                 j = 0;
  401.                                 break;
  402.                         }
  403.  
  404.                         buf[k++] = c;
  405.                 }
  406.         }
  407.  
  408.         if (!j)
  409.         {
  410.                 k = 0;
  411.         }
  412.  
  413.         buf[k] = '\0';
  414.  
  415.         if (flip)
  416.                 for (j = 0; j < k; j += 2)
  417.                 {
  418.                         char t = buf[j];
  419.                         buf[j] = buf[j + 1];
  420.                         buf[j + 1] = t;
  421.                 }
  422.  
  423.                 i = j = -1;
  424.  
  425.                 for (k = 0; buf[k] != '\0'; ++k)
  426.                 {
  427.                         if (! isspace(buf[k]))
  428.                         {
  429.                                 if (i < 0)
  430.                                         i = k;
  431.  
  432.                                 j = k;
  433.                         }
  434.                 }
  435.  
  436.                 if ((i >= 0) && (j >= 0))
  437.                 {
  438.                         for (k = i; (k <= j) && (buf[k] != '\0'); ++k)
  439.                                 buf[k - i] = buf[k];
  440.  
  441.                         buf[k - i] = '\0';
  442.                 }
  443.  
  444.                 return buf;
  445. }
  446.  
  447. bool getHDDSerialNumber(wchar_t *str)
  448. {
  449.         HANDLE hPhysicalDriveIOCTL = 0;
  450.         char serialNumber[1024], windir[256], filename[256];
  451.  
  452.         if (GetWindowsDirectoryA(windir, 256) == 0)
  453.                 return false;
  454.  
  455.         memset(filename, 0, 256);
  456.  
  457.         strcpy_s(filename, "\\\\.\\\\");
  458.         windir[2] = 0;
  459.         strcat_s(filename, windir);
  460.  
  461.         hPhysicalDriveIOCTL = CreateFileA(filename, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  462.  
  463.         if (hPhysicalDriveIOCTL == INVALID_HANDLE_VALUE)
  464.                 return false;
  465.  
  466.         STORAGE_PROPERTY_QUERY query;
  467.         unsigned long cbBytesReturned = 0;
  468.         char buffer[10000];
  469.  
  470.         memset ((void *) &query, 0, sizeof (query));
  471.         query.PropertyId = StorageDeviceProperty;
  472.         query.QueryType = PropertyStandardQuery;
  473.  
  474.         memset (buffer, 0, sizeof (buffer));
  475.  
  476.         if (!(DeviceIoControl(hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &buffer, sizeof(buffer), &cbBytesReturned, 0)))
  477.         {
  478.                 CloseHandle(hPhysicalDriveIOCTL);
  479.                 return false;
  480.         }
  481.  
  482.         STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer;
  483.  
  484.         sprintf_s(serialNumber, 1000, "%02X%02X", flipAndCodeBytes(buffer, descrip->SerialNumberOffset, 1, serialNumber));
  485.  
  486.         mbstowcs_s(0, str, 1000, serialNumber, 1000);
  487.  
  488.         return true;
  489. }
  490.  
  491. bool getHwGuid(wchar_t *str)
  492. {
  493.         HW_PROFILE_INFOA HwProfInfo;
  494.         char HWID[1024];
  495.  
  496.         if (GetCurrentHwProfileA(&HwProfInfo) == 0)
  497.                 return false;
  498.  
  499.         sprintf_s(HWID, 1000, "%02X%02X", HwProfInfo.szHwProfileGuid);
  500.  
  501.         mbstowcs_s(0, str, 1000, HWID, 1000);
  502.  
  503.         return true;
  504. }
  505.  
  506. void __cdecl new_SendPacket(unsigned int This, char *Format, ...)
  507. {
  508. //      if ((*(unsigned int*) (KiUserExceptDispADR + 10) + KiUserExceptDispADR < hNtDllStart) || (*(unsigned int*) (KiUserExceptDispADR + 10) + KiUserExceptDispADR > hNtDllEnd))
  509. //              ErrorExit("Bot Program Detected #2!");
  510.  
  511.         if(_clientSocket==NULL){
  512.         _clientSocket = This;
  513.         }
  514.         unsigned int retAddr = *((unsigned int*) &This - 1);
  515.  
  516.         if ((retAddr < hEngineStart) || (retAddr > hEngineEnd))
  517.         {
  518.                 true_SendPacket(This, "cc", 0xA1, 0x01);
  519.                 ErrorExit("Bot Program Detected #3!");
  520.         }
  521.  
  522.         if (((unsigned int) Format < hEngineStart) || ( (unsigned int) Format > hEngineEnd))
  523.         {
  524.                 true_SendPacket(This, "cc", 0xA1, 0x02);
  525.                 ErrorExit("Bot Program Detected #4!");
  526.         }
  527.  
  528.         if (GetCurrentThreadId() != mainThread)
  529.         {
  530.                 true_SendPacket(This, "cc", 0xA1, 0x03);
  531.                 ErrorExit("Bot Program Detected #5!");
  532.         }
  533.        
  534.         unsigned char buf[10240];
  535.         int size = 0, len;
  536.         wchar_t *wstr;
  537.  
  538.     va_list args;
  539.         va_start(args, Format);
  540.  
  541.         while (*Format != 0)
  542.         {
  543.                 switch (*Format)
  544.                 {
  545.                         case 'c':
  546.                                 *(unsigned char*) (buf + size) = va_arg(args, unsigned char);
  547.                                 size++;
  548.                                 break;
  549.                         case 'h':
  550.                                 *(unsigned short int*) (buf + size) = va_arg(args, unsigned short int);
  551.                                 size += 2;
  552.                                 break;
  553.                         case 'd':
  554.                                 *(unsigned int*) (buf + size) = va_arg(args, unsigned int);
  555.                                 size += 4;
  556.                                 break;
  557.                         case 'Q':
  558.                                 *(unsigned __int64*) (buf + size) = va_arg(args, unsigned __int64);
  559.                                 size += 8;
  560.                                 break;
  561.                         case 'b':
  562.                                 len = va_arg(args, unsigned int);
  563.                                 memcpy(buf + size, va_arg(args, void*), len);
  564.                                 size += len;
  565.                                 break;                 
  566.                         case 'S':
  567.                                 wstr = va_arg(args, wchar_t*);
  568.                                 if (wstr == 0)
  569.                                 {
  570.                                         len = 2;
  571.                                         *(unsigned short int*) (buf + size) = 0;
  572.                                 }
  573.                                 else
  574.                                 {
  575.                                         len = wcslen(wstr) * 2 + 2;
  576.                                         memcpy(buf + size, wstr, len);
  577.                                 }
  578.                                 size += len;
  579.                                 break;
  580.                         default:
  581.                                 true_SendPacket(This, "cc", 0xA1, 0x04);
  582.                                 ErrorExit("Send Packet Unknown Format!");
  583.                                 break;
  584.                 }
  585.                 Format++;      
  586.         }
  587.  
  588.         va_end(args);
  589.  
  590.         switch(buf[0])
  591.         {
  592.                 case 0x0E:
  593.                         wchar_t serialNumber[1024], MAC[1024], HwGuid[1024];
  594.                         memset(serialNumber, 0, 1024 * 2);
  595.                         memset(MAC, 0, 1024 * 2);
  596.                         if (!getHDDSerialNumber(serialNumber))
  597.                         {
  598.                                 true_SendPacket(This, "cc", 0xA1, 0x05);
  599.                                 ErrorExit("Get HDD Serial Number Fail!");
  600.                                 return;
  601.                         }
  602.                         if (!getMAC(MAC))
  603.                         {
  604.                                 true_SendPacket(This, "cc", 0xA1, 0x06);
  605.                                 ErrorExit("Get MAC Fail!");
  606.                                 return;
  607.                         }
  608.                         if (!getHwGuid(HwGuid))
  609.                         {
  610.                                 true_SendPacket(This, "cc", 0xA1, 0x07);
  611.                                 ErrorExit("Get HWID Fail!\n");
  612.                         }
  613.                         if ((wcslen(MAC) == 0) || (wcslen(serialNumber) == 0) || (wcslen(HwGuid) == 0))
  614.                         {
  615.                                 true_SendPacket(This, "cc", 0xA1, 0x08);
  616.                                 ErrorExit("Wrong MAC / Serial Number / HWID!");
  617.                                 return;
  618.                         }
  619.  
  620.                         memcpy(buf + size, serialNumber, wcslen(serialNumber) * 2 + 2);
  621.                         size += wcslen(serialNumber) * 2 + 2;
  622.                         memcpy(buf + size, MAC, wcslen(MAC) * 2 + 2);
  623.                         size += wcslen(MAC) * 2 + 2;
  624.                         memcpy(buf + size, HwGuid, wcslen(HwGuid) * 2 + 2);
  625.                         size += wcslen(HwGuid) * 2 + 2;
  626.                         break;
  627.         }
  628.         true_SendPacket(This, "b", size, (int)buf);
  629. }
  630.  
  631.  
  632. void _fastcall new_Render(unsigned int This, unsigned int EDX, unsigned int FRenderInterface)
  633. {
  634.         mainThread = GetCurrentThreadId();
  635.  
  636.         RECT L2Rect;
  637.         HWND *L2hWND = (HWND*) GetProcAddress(LoadLibraryA("core.dll"), "?GTopWnd@@3PAUHWND__@@A");
  638.  
  639.         true_Render(This, EDX, FRenderInterface);
  640.  
  641.         GetClientRect(*L2hWND, &L2Rect);
  642.  
  643.         for (int i = 0; i < 16; i++)
  644.         {
  645.                 if (SpecialStrings[i].isDraw)
  646.                 {
  647.                         if (i == 15)
  648.                         {
  649.                                 time_t rawtime;
  650.                                 struct tm timeinfo;
  651.                                 wchar_t exstr[16], newstr[64];
  652.  
  653.                                 time(&rawtime);
  654.                                 localtime_s(&timeinfo, &rawtime);
  655.                                 wcsftime(exstr, 15, L"%H:%M", &timeinfo);
  656.                                 wcscpy_s(newstr, SpecialStrings[i].text);
  657.                                 wcscat_s(newstr, exstr);
  658.  
  659.                                 true_DrawTextTTFToCanvas(Canvas, 0, L2Rect.right - SpecialStrings[i].x, L2Rect.top + SpecialStrings[i].y, newstr, &SpecialStrings[i].FontDrawInfo, 0xFF, 0, 0, 0);
  660.                         }
  661.                         else
  662.                                 true_DrawTextTTFToCanvas(Canvas, 0, L2Rect.right - SpecialStrings[i].x, L2Rect.top + SpecialStrings[i].y, SpecialStrings[i].text, &SpecialStrings[i].FontDrawInfo, 0xFF, 0, 0, 0);
  663.                 }
  664.         }
  665. }
  666.  
  667. void _fastcall new_MasterProcessPreRender(unsigned int This, unsigned int EDX, unsigned int UCanvas)
  668. {
  669.         Canvas = UCanvas;
  670.  
  671.         true_MasterProcessPreRender(This, EDX, UCanvas);
  672. }
  673.  
  674. bool DisableGameGuard(void)
  675. {
  676.         unsigned long oldProtect;
  677.         unsigned char *GL2UseGameGuard;
  678.  
  679.         GL2UseGameGuard = (unsigned char *) GetProcAddress(LoadLibraryA("core.dll"), "?GL2UseGameGuard@@3HA");
  680.  
  681.         if(GL2UseGameGuard == 0)
  682.                 return false;
  683.        
  684.         if(!VirtualProtect(GL2UseGameGuard, 1, PAGE_READWRITE, &oldProtect))
  685.                 return false;
  686.  
  687.         *GL2UseGameGuard = 0;
  688.  
  689.         if(!VirtualProtect(GL2UseGameGuard, 1, oldProtect, &oldProtect))
  690.                 return false;
  691.  
  692.         return true;
  693. }
  694.  
  695. unsigned int GetSendPacketAddress(void)
  696. {
  697.         HMODULE hEngine = LoadLibraryA("engine.dll");
  698.  
  699.         unsigned int startVMT = (unsigned int) hEngine + 0x51F658;
  700.         unsigned int AddNetworkQueue = (unsigned int) GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z");
  701.         unsigned int currVMT = startVMT;
  702.  
  703.         if (AddNetworkQueue == 0)
  704.         {
  705.                 return 0;
  706.         }
  707.  
  708.         while (true)
  709.         {
  710.                 if (*(unsigned int*) currVMT == AddNetworkQueue)
  711.                 {
  712.                         return *(unsigned int*) (currVMT - 0xA4);
  713.                 }
  714.  
  715.                 currVMT++;
  716.                 if (currVMT - startVMT > 10000)
  717.                 {
  718.                         return 0;
  719.                 }
  720.         }
  721.         return 0;
  722. }
  723.  
  724. void TitleReplaceHookThread(void *param)
  725. {
  726.         while(true)
  727.         {
  728.                 Sleep(50);
  729.                 HWND hWnd = FindWindow(NULL, L"Lineage II");
  730.                 if(hWnd)
  731.                 {
  732.                         SetWindowText(hWnd, L" ");
  733.                         break;
  734.                 }
  735.         }
  736. }
  737.  
  738. void TitleReplaceHook()
  739. {
  740.         _beginthread(TitleReplaceHookThread, 0, NULL);
  741.         CloseHandle(TitleReplaceHookThread);
  742. }
  743.  
  744. bool SetHooks(void)
  745. {
  746.         FARPROC addr;
  747.         HMODULE hEngine = LoadLibraryA("engine.dll"), hNtDlll = LoadLibraryA("ntdll.dll");
  748.         MODULEINFO modinfo;
  749.  
  750.         GetModuleInformation(GetCurrentProcess(), hEngine, &modinfo, sizeof(MODULEINFO));
  751.  
  752.         hEngineStart = (unsigned int) hEngine;
  753.         hEngineEnd = hEngineStart + modinfo.SizeOfImage - 1;
  754.  
  755.         GetModuleInformation(GetCurrentProcess(), hNtDlll, &modinfo, sizeof(MODULEINFO));
  756.  
  757.         hNtDllStart = (unsigned int) hNtDlll;
  758.         hNtDllEnd = hNtDllStart + modinfo.SizeOfImage - 1;
  759.  
  760.         if ((KiUserExceptDispADR = (unsigned int) GetProcAddress(LoadLibraryA("ntdll.dll"), "KiUserExceptionDispatcher")) == 0)
  761.                 return false;
  762.  
  763.         if (*(unsigned char*) (KiUserExceptDispADR) == 0xFC)
  764.                 KiUserExceptDispADR++;
  765.  
  766.         if ((addr = GetProcAddress(LoadLibraryA("ws2_32.dll"), "connect")) == 0)
  767.                 return false;
  768.  
  769.         true_connect = (_connect) splice((unsigned char*) addr, new_connect);
  770.  
  771.         if ((addr = GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z")) == 0)
  772.                 return false;
  773.  
  774.         true_AddNetworkQueue = (_AddNetworkQueue) splice((unsigned char*) addr, new_AddNetworkQueue);
  775.  
  776.         if ((addr = (FARPROC) GetSendPacketAddress()) == 0)
  777.                 return false;
  778.  
  779.         true_SendPacket = (_SendPacket) splice((unsigned char*) addr, new_SendPacket);
  780.  
  781.         if ((addr = GetProcAddress(hEngine, "?MasterProcessPreRender@UInteractionMaster@@QAEXPAVUCanvas@@@Z")) == 0)
  782.                 return false;
  783.  
  784.         true_MasterProcessPreRender = (_MasterProcessPreRender) splice((unsigned char*) addr, new_MasterProcessPreRender);
  785.  
  786.         if ((addr = GetProcAddress(hEngine, "?DrawTextTTFToCanvas@UCanvas@@QAEHHHPB_WPBVFontDrawInfo@@EHHPBV?$TArray@PAVFontDrawInfoSection@@@@@Z")) == 0)
  787.                 return false;
  788.  
  789.         true_DrawTextTTFToCanvas = (_DrawTextTTFToCanvas) addr;
  790.  
  791.         if ((addr = GetProcAddress(hEngine, "?Render@FPlayerSceneNode@@UAEXPAVFRenderInterface@@@Z")) == 0)
  792.                 return false;
  793.  
  794.         true_Render = (_Render) splice((unsigned char*) addr, new_Render);
  795.  
  796.         TitleReplaceHook();
  797.         return true;
  798. }
  799.  
  800. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  801. {
  802.         return DefWindowProc(hWnd, uMsg, wParam, lParam);
  803. }
  804.  
  805. DWORD GetCurrentIP()
  806. {
  807.         WSADATA wsaData;
  808.         WSAStartup(MAKEWORD(1,1), &wsaData);
  809.  
  810.         char HostName[1024];
  811.         DWORD m_HostIP = 0;
  812.  
  813.         if(!gethostname(HostName, 1024))
  814.         {
  815.                 if(LPHOSTENT lphost = gethostbyname(HostName))
  816.                         m_HostIP = ((LPIN_ADDR)lphost->h_addr)->s_addr;
  817.         }
  818.         WSACleanup();
  819.         return m_HostIP;
  820. }
  821. bool LoadTrayIcon(HINSTANCE hInst, unsigned int ID)
  822. {
  823.         ghMutex = CreateMutexA(0, false, "Protected on "/*+GetCurrentIP()*/);
  824.         if (GetLastError() == ERROR_ALREADY_EXISTS)
  825.         {
  826.                 CloseHandle(ghMutex);
  827.                 return true;
  828.         }
  829.  
  830.         WNDCLASSEXA wcx;
  831.         NOTIFYICONDATAA niData;
  832.  
  833.         memset(&wcx, 0, sizeof(WNDCLASSEXA));
  834.  
  835.         wcx.cbSize = sizeof(wcx);
  836.         wcx.lpfnWndProc = WndProc;
  837.         wcx.hInstance = hInst;
  838.         wcx.lpszClassName = "tray_icon";
  839.         if ((RegisterClassExA(&wcx) == 0) && (GetLastError() != ERROR_CLASS_ALREADY_EXISTS))
  840.                 return false;
  841.  
  842.         if ((hWND = CreateWindowExA(0, "tray_icon", 0, 0, 0, 0, 0, 0, 0, 0, hInst, 0)) == 0)
  843.                 return false;
  844.  
  845.         memset(&niData, 0, sizeof(NOTIFYICONDATAA));
  846.  
  847.         niData.cbSize = sizeof(NOTIFYICONDATAA);
  848.         niData.uID = ID;
  849.         niData.uFlags = NIF_ICON | NIF_TIP;
  850.         niData.hWnd = hWND;
  851.         strcpy_s(niData.szTip, "Protected on "/*+GetCurrentIP()*/);
  852.         niData.hIcon = (HICON) LoadImageA(hInst, MAKEINTRESOURCEA(IDI_TRAYICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
  853.         if (!Shell_NotifyIconA(NIM_ADD, &niData))
  854.                 return false;
  855.  
  856.         return true;
  857. }
  858.  
  859. void FreeTrayIcon(unsigned int ID)
  860. {
  861.         NOTIFYICONDATAA niData;
  862.  
  863.         memset(&niData, 0, sizeof(NOTIFYICONDATAA));
  864.         niData.cbSize = sizeof(NOTIFYICONDATAA);
  865.         niData.hWnd = hWND;
  866.         niData.uID = ID;
  867.  
  868.         Shell_NotifyIconA(NIM_DELETE, &niData);
  869.  
  870.         CloseHandle(ghMutex);
  871. }
  872.  
  873. int DirectXSetupGetVersion(void)
  874. {
  875.         return 0;
  876. }
  877.  
  878. void InitConsole(void)
  879. {
  880.         AllocConsole();
  881.  
  882.         HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
  883.         int hCrt = _open_osfhandle((long)handle_out, 0);
  884.         FILE* hf_out = _fdopen(hCrt, "w");
  885.         setvbuf(hf_out, NULL, _IONBF, 1);
  886.         *stdout = *hf_out;
  887.  
  888.         HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
  889.         hCrt = _open_osfhandle((long)handle_in, 0);
  890.         FILE* hf_in = _fdopen(hCrt, "r");
  891.         setvbuf(hf_in, NULL, _IONBF, 128);
  892.         *stdin = *hf_in;
  893. }
  894.  
  895. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
  896. {
  897.         if (fdwReason == DLL_PROCESS_ATTACH)
  898.         {
  899.                 HBITMAP hBmp = LoadBitmap(hinstDLL,MAKEINTRESOURCE(102)); //Load bitmap
  900.                 if(hBmp)
  901.                 {
  902.                         CSplash splash; //Init class
  903.                         splash.SetBitmap(hBmp); //Set image(BMP + alpha)
  904.                         splash.SetTransparentColor(RGB(255, 255, 255)); //Select color for mask
  905.                         splash.ShowSplash(); //Show splash window and image
  906.                         Sleep(2000); //Sleep for freeze window
  907.                         splash.CloseSplash(); //Close class handler
  908.                 }
  909.  
  910.                 DisableThreadLibraryCalls(hinstDLL);
  911.  
  912.                 LoadTrayIcon(hinstDLL, 1);
  913.  
  914.                 if (!DisableGameGuard())
  915.                 {
  916.                         ErrorExit("Game Guard is not allow this client!");
  917.                         Sleep(INFINITE);
  918.                 }
  919.  
  920.                 if (!SetHooks())
  921.                 {
  922.                         ErrorExit("Protection is not attached this client!");
  923.                         Sleep(INFINITE);
  924.                 }
  925.         }
  926.  
  927.         if (fdwReason == DLL_PROCESS_DETACH)
  928.         {
  929.                 FreeTrayIcon(1);
  930.         }
  931.        
  932.         return true;
  933. }
Raw Paste

Login or Register to edit or fork this paste. It's free.