[VC] 【源码】LOL 无限视距 防御塔范围

#include <Windows.h>
#include <stdio.h>
#include <TlHelp32.h>
 
HANDLE hProcess;
 
// 开启视距
BOOL OpenSJ() {
    char buff = 120;// 开启视距代码
    // 向其他进程写数据
    WriteProcessMemory(hProcess,// 进程句柄
        (void*)0x5C005B,// 视距基址
        &buff,
        1,// 需要写入的数据大小
        NULL);
}
 
// 关闭视距
BOOL CloseSJ() {
    char buff = 119;// 关闭视距代码
    // 向其他进程写数据
    WriteProcessMemory(hProcess,// 进程句柄
        (void*)0x5C005B,// 视距基址
        &buff,
        1,// 需要写入的数据大小
        NULL);
}
 
// 显示防御塔攻击范围
BOOL ShowFW() {
    char buff = 118;// 开启防御塔攻击范围代码
    // 向其他进程写数据
    WriteProcessMemory(hProcess,// 进程句柄
        (void*)0xC7E31D,// 防御塔攻击范围基址
        &buff,
        1,// 需要写入的数据大小
        NULL);
}
 
// 显示防御塔攻击范围
BOOL CloseFW() {
    char buff = 117;// 关闭防御塔攻击范围代码
    // 向其他进程写数据
    WriteProcessMemory(hProcess,// 进程句柄
        (void*)0xC7E31D,// 防御塔攻击范围基址
        &buff,
        1,// 需要写入的数据大小
        NULL);
}
 
int main() {
    system("mode 40,20");
    DWORD PID = 0;
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) };
    Process32First(hProcessSnap, &pe);
    do
    {
        if (!strcmp(pe.szExeFile, "League of Legends.exe"))
        {
            PID = pe.th32ProcessID;
        }
    } while (Process32Next(hProcessSnap, &pe));
    CloseHandle(hProcessSnap);
    if (PID == 0)
    {
        printf("无法获取 LOL 的 PID, 请先进入游戏!\n");
        system("pause");
        return 0;
    }
    printf("League of Legends.exe PID 为:%d\n", PID);
 
    hProcess = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, NULL, PID);
    if (hProcess == NULL)
    {
        printf("打开进程失败! 请用管理员身份运行!\n");
        system("pause");
        return 0;
    }
    printf("打开进程成功!\n");
    printf("======================\n");
    printf("1. 打开无限视距 \n");
    printf("2. 关闭无限视距 \n");
    printf("3. 显示防御塔攻击范围 \n");
    printf("4. 关闭防御塔攻击范围 \n");
    printf("======================\n");
    int i;
    while (1)
    {
        scanf_s("%d", &i);
        switch (i)
        {
        case 1:
            OpenSJ();
            break;
        case 2:
            CloseSJ();
            break;
        case 3:
            ShowFW();
            break;
        case 4:
            CloseFW();
            break;
        default:
            CloseHandle(hProcess);
            return 0;
        }
    }
    system("pause");
    return 0;
}