zoukankan      html  css  js  c++  java
  • W3X Basic MH for 1.25b Source

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <Tlhelp32.h>
    using namespace std;
    #define PATCH(i,w,l) WriteProcessMemory(hProc,reinterpret_cast<LPVOID>(gameBase+i),w,l,&dSize)
    void patchW3X();
    void patchwar25b(HANDLE hProc, DWORD gameBase, DWORD dSize);
    DWORD GetPIDForProcess(char* process);
    void EnableDebugPriv();
    DWORD GetDLLBase(char* DllName, DWORD tPid);
    int main(int argc, char *argv[])
    {
        SetConsoleTitle("W3X Basic MH v1 for 1.25b [by DarkSupremo]");
        patchW3X();
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    //-------------------------------------------------------------------------------------------------------------
    void patchW3X()
    {
         DWORD PID = 0;
     
       puts("-------------------------------------------------------------------------------");
       puts("This is a Basic MH for 1.25b designed to who want learn how to code a mh!");
       puts("Please, if you will use this code on your project, give me the credits too!");
       puts("Program developed by DarkSupremo [www.GarenaMaster.com]");
       puts("-------------------------------------------------------------------------------\n");
       puts("Searching for Warcraft 3...");
       while(FindWindowA("Warcraft III", NULL) == NULL)
       {
              Sleep(500);                            
          }
          puts("Searching for Warcraft 3 PID...");
       if(GetPIDForProcess("war3.exe") != NULL)
        PID = GetPIDForProcess("war3.exe");
       if(GetPIDForProcess("War3.exe") != NULL)
           PID = GetPIDForProcess("War3.exe");
          puts("Enabling Debug privilege...");
       EnableDebugPriv();
       puts("Opening Warcraft 3 Process...");
       HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
          if(hProc)
       {
              puts("Searching Base Address of Game.dll");
        DWORD gameBase = GetDLLBase("Game.dll", PID);
        DWORD dSize = 0;
        puts("Patching war3...");
        patchwar25b(hProc, gameBase, dSize);
          }
    }
    //-------------------------------------------------------------------------------------------------------------
    void patchwar25b(HANDLE hProc, DWORD gameBase, DWORD dSize)
    {
      //1.25b
      //Reveal units on Mainmap / Invisibles: Main & Mini
         puts("\nPatching fallowing features:\n");
     
        //Cam Distance Hack, configured to 2300
        puts("- Cam Distance Hack, configured to 2300");
       unsigned long oldprotector25b;
       float realdistance = 2300; // set the distance here!
       DWORD camAddr = gameBase + 0x93645C;
        VirtualProtectEx(hProc, (void*)camAddr, 4, PAGE_EXECUTE_READWRITE, &oldprotector25b);
        PATCH(0x93645C, &realdistance, sizeof(float));
       VirtualProtectEx(hProc, (void*)camAddr, 4, oldprotector25b, &oldprotector25b);
     
     //Delay reducer, configured to 100ms
        puts("- Delay reducer, configured to 100ms");
       int delayreducer = 100; // set the ms here!
       PATCH(0x65DC21, &delayreducer, sizeof(int));
       PATCH(0x65DC22, "\x00\x00\x00",3);
       PATCH(0x660CE1, &delayreducer, sizeof(int));
       PATCH(0x660CE2, "\x00\x00\x00",3);
     
      // Reveal units on Mainmap / Invisibles: Main & Mini
         puts("- Reveal units on Mainmap / Invisibles: Main & Mini");
      PATCH(0x39DE4C,"\x75",1);
      PATCH(0x3A12C0,"\x90\x90",2);
      PATCH(0x3A136B,"\x90\x90",2);
      PATCH(0x35628E, "\x90\x90\x90",3); 
      PATCH(0x361621, "\x3B\xC0\x0F\x85",4); 
      PATCH(0x3997AB, "\x90\x90\x90\x90\x90\x90",6); 
      PATCH(0x3997BE, "\x90\x90\x90\x90\x90\x90\x90\x90\x33\xC0\x40",11);
      //Remove FOG on Mainmap
      puts("- Remove FOG on Mainmap");
      PATCH(0x74C7E9,"\xB2\x00\x90\x90\x90\x90",6);
     
      //Reveal units on Minimap 
      puts("- Reveal units on Minimap ");
      PATCH(0x36120B,"\xB8\x00",2);
     
      //Remove FOG on Minimap
      puts("- Remove FOG on Minimap");
      PATCH(0x3562F5,"\x90\x90",2);
     
      //Enable Trade / Resource View
      puts("- Enable Trade / Resource View");
      PATCH(0x34DB72,"\xB8\xC8\x00\x00\x00\x90",6);
      PATCH(0x34DB7A,"\xB8\x64\x00\x00\x00\x90",6);
      PATCH(0x35F81A,"\x90\x90",2);
     
      //Make units clickable
      puts("- Make units clickable");
      PATCH(0x284F6C,"\x90\x90",2);
      PATCH(0x284F82,"\xEB",1);
     
      //Reveal Illusions
      puts("- Reveal Illusions");
      PATCH(0x28282C,"\x40\xC3",2);
     
      //Show Runes
      puts("- Show Runes");
      PATCH(0x3A12AB,"\xEB",1);
     
      //Show Skills / Cooldowns
      puts("- Show Skills / Cooldowns");
      PATCH(0x2024AC,"\x90\x90\x90\x90\x90\x90",6);
      PATCH(0x28DFAE,"\xEB",1);
      PATCH(0x34F078,"\x90\x90",2);
      PATCH(0x34F0B8,"\x74\x00",2);
     
      //Bypass dota -ah
      puts("- Bypass dota -ah");
      PATCH(0x3C616C,"\xB8\xFF\x00\x00\x00\xEB",6);
      PATCH(0x3CB642,"\xEB",1);
     
      //Ally Hero icon
      //puts("Ally Hero icon");
       //PATCH(0x370990,"\xE8\x3B\x28",3);
       //PATCH(0x370995,"\x85\xC0",2);
      // PATCH(0x370998,"\x84",1);
      // PATCH(0x37099D,"\xEB\xC9\x90\x90\x90\x90",6);
     
      //Enemy Hero icon
      puts("- Enemy Hero icon");
       PATCH(0x370990,"\xE8\x3B\x28",3);
       PATCH(0x370995,"\x85\xC0",2);
       PATCH(0x370998,"\x85",1);
       PATCH(0x37099D,"\xEB\xC9\x90\x90\x90\x90",6);
     
      //All  Hero icon
      //puts("All  Hero icon");
       //PATCH(0x370995,"\xEB\x06",2);
      // PATCH(0x37099D,"\xEB\xC9\x90\x90\x90\x90",6);
     
      //Show Pings signal
      puts("- Show Pings signal");
       PATCH(0x43EC66,"\x3B\xC0\x0F\x85\xC0\x00\x00\x00",8);
       PATCH(0x43EC79,"\x3B\xC0\x0F\x85\xAD\x00\x00\x00",8);
     
      //[SAFE MODE] Reveal units on Main Map / Invisibles (Slow Motion)
      /*
         puts("- [SAFE MODE] Reveal units on Main Map / Invisibles (Slow Motion)");
       PATCH(0x74C7E9,"\x8A\x90\x6C\x7E\xAB\x6F",6);
       PATCH(0x3562F5,"\x88\x01",2);
       PATCH(0x39DE4C,"\x74\x62",2);
       PATCH(0x3A12C0,"\xEB\x09",2);
       PATCH(0x3A136B,"\x23\xCA",2);
       PATCH(0x36120B,"\xB8\x01\x00\x00\x00",5);
       PATCH(0x284F6C,"\x74\x2A",2);
       PATCH(0x284F82,"\x75",1);
       PATCH(0x399868,"\xEB",1);
      /*
      //Disable ALL
      /*
       puts("- Disabling all features...!");
             PATCH(0x74C7E9,"\x8A\x90\x6C\x7E\xAB\x6F",6);
       PATCH(0x3562F5,"\x88\x01",2);
       PATCH(0x35628E, "\x66\x85\xC0",3); // 6685C0
       PATCH(0x361621, "\x85\xC0\x0F\x84",4); // 85C00F84
        PATCH(0x3997AB, "\x8B\x97\x98\x01\x00\x00",6); // 8B9798010000
       PATCH(0x3997BE, "\x0F\xB7\x00\x55\x50\x56\xE8\xF7\x7B\x00\x00",11); // 0FB700555056E8F77B0000
       PATCH(0x39DE4C,"\x74\x62",2);
       PATCH(0x3A12C0,"\xEB\x09",2);
       PATCH(0x3A136B,"\x23\xCA",2);
       PATCH(0x36120B,"\xB8\x01\x00\x00\x00",5);
       PATCH(0x284F6C,"\x74\x2A",2);
       PATCH(0x284F82,"\x75",1);
       PATCH(0x34DB72,"\x8B\x87\x6c\x01\x00\x00",6);
       PATCH(0x34DB7A,"\x8B\x87\x68\x01\x00\x00",6);
       PATCH(0x35F81A,"\xEB\x08",2);
       PATCH(0x3CB642,"\x74",1);
       PATCH(0x28282C,"\xC3\xCC",2);
       PATCH(0x399868,"\x74",1);
       PATCH(0x3A12AB,"\x75",1);
       PATCH(0x2024AC,"\x0F\x84\x5F\x01\x00\x00",6);
       PATCH(0x28DFAE,"\x75",1);
       PATCH(0x34F078,"\x74\x08",2);
       PATCH(0x34F0B8,"\x74\x08",2);
       PATCH(0x3C616C,"\x3D\xFF\x00\x00\x00\x76",6);
       PATCH(0x3CB642,"\x74",1);
       PATCH(0x43EC66,"\x85",1);
       PATCH(0x43EC79,"\x85",1);
       PATCH(0x370990,"\xE8\xFB\x29\x03\x00\x85\xC0\x0F\x84\x8F\x02\x00\x00\x8B\x85\x80\x01\x00\x00",19);
       */
      puts("Done!");
    }
    //-------------------------------------------------------------------------------------------------------------
    DWORD GetPIDForProcess(char* process)
    {
        BOOL            working=0;
        PROCESSENTRY32 lppe= {0};
     DWORD            targetPid=0;
        HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS ,0);
        if (hSnapshot)
        {
            lppe.dwSize=sizeof(lppe);
            working=Process32First(hSnapshot,&lppe);
            while (working)
            {
       if(strcmp(lppe.szExeFile,process)==0)
                {
                    targetPid=lppe.th32ProcessID;
                    break;
                }
                working=Process32Next(hSnapshot,&lppe);
            }
        }
        CloseHandle( hSnapshot );
        return targetPid;
    }
    //-------------------------------------------------------------------------------------------------------------
    // enable the privilege necessary to patch the process
    void EnableDebugPriv()
    {
      HANDLE hToken;
      LUID sedebugnameValue;
      TOKEN_PRIVILEGES tkp;
      if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) puts("Failed to Enable Debug Options!");
      if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
      {
        CloseHandle(hToken);
        puts("Failed to Enable Debug Options!");
        system("PAUSE");
      }
      tkp.PrivilegeCount = 1;
      tkp.Privileges[0].Luid = sedebugnameValue;
      tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
      if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL)) CloseHandle( hToken );
    }
    //-------------------------------------------------------------------------------------------------------------
    //Gets the base of our dll
    DWORD GetDLLBase(char* DllName, DWORD tPid)
    {
        HANDLE snapMod;
        MODULEENTRY32 me32;
        if (tPid == 0) return 0;
        snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, tPid);
        me32.dwSize = sizeof(MODULEENTRY32);
        if (Module32First(snapMod, &me32)){
            do{
                if (strcmp(DllName,me32.szModule) == 0){
                    CloseHandle(snapMod);
        return (DWORD) me32.modBaseAddr;
                }
            }while(Module32Next(snapMod,&me32));
        }
        CloseHandle(snapMod);
        return 0;
    }
    

    作者:Crazy Ma
    出处:http://www.cnblogs.com/intcry
    ♪:30%的技术+70%的精神,帮助别人得到他想要的,你就能得到你想要的! ♪

  • 相关阅读:
    mysql小记
    mysql多实例安装
    源码编译安装mysql
    url监控
    ping命令的用法大全!
    JSON结构
    <a href="onclick="javascript:goSearch(this)" class="click" name="Java">Java</a>为什么a标签的父节点获取不到
    处理jquery版本之间冲突
    C# 语言如何获取json格式的数据,不用javascript用c#实现。。。
    在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】
  • 原文地址:https://www.cnblogs.com/intcry/p/2047931.html
Copyright © 2011-2022 走看看