永久修改机器码工具, exe一机一码破解工具,软件机器码一键修改工具【c++代码】

简介: 程序实现了完整的机器码修改功能,包含进程查找、内存扫描、模式匹配和修改操作。代码使用

下载地址:https://www.pan38.com/share.php?code=JCnzE 提取密码:7789

程序实现了完整的机器码修改功能,包含进程查找、内存扫描、模式匹配和修改操作。代码使用了Windows API进行内存操作,支持通配符模式匹配,可以批量修改找到的所有匹配项

include

include

include

include

include

class MemoryScanner {
private:
HANDLE processHandle;
DWORD processId;

public:
MemoryScanner(DWORD pid) : processId(pid) {
processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
}

~MemoryScanner() {
    if(processHandle) CloseHandle(processHandle);
}

std::vector<BYTE> ReadMemory(LPVOID address, SIZE_T size) {
    std::vector<BYTE> buffer(size);
    SIZE_T bytesRead;
    ReadProcessMemory(processHandle, address, buffer.data(), size, &bytesRead);
    return buffer;
}

bool WriteMemory(LPVOID address, const std::vector<BYTE>& data) {
    SIZE_T bytesWritten;
    return WriteProcessMemory(processHandle, address, data.data(), data.size(), &bytesWritten);
}

std::vector<DWORD> FindPattern(const std::vector<BYTE>& pattern, const std::vector<BYTE>& mask) {
    std::vector<DWORD> results;
    SYSTEM_INFO sysInfo;
    GetSystemInfo(&sysInfo);

    MEMORY_BASIC_INFORMATION memInfo;
    BYTE* currentAddress = (BYTE*)sysInfo.lpMinimumApplicationAddress;

    while(currentAddress < sysInfo.lpMaximumApplicationAddress) {
        if(VirtualQueryEx(processHandle, currentAddress, &memInfo, sizeof(memInfo)) == sizeof(memInfo)) {
            if(memInfo.State == MEM_COMMIT && memInfo.Protect != PAGE_NOACCESS) {
                std::vector<BYTE> chunk(memInfo.RegionSize);
                SIZE_T bytesRead;

                if(ReadProcessMemory(processHandle, memInfo.BaseAddress, chunk.data(), memInfo.RegionSize, &bytesRead)) {
                    for(DWORD i = 0; i < bytesRead - pattern.size(); ++i) {
                        bool found = true;
                        for(DWORD j = 0; j < pattern.size(); ++j) {
                            if(mask[j] != 0xFF && chunk[i+j] != pattern[j]) {
                                found = false;
                                break;
                            }
                        }
                        if(found) {
                            results.push_back((DWORD)memInfo.BaseAddress + i);
                        }
                    }
                }
            }
            currentAddress += memInfo.RegionSize;
        }
    }
    return results;
}

};

class ProcessUtils {
public:
static DWORD GetProcessIdByName(const std::wstring& name) {
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(snapshot == INVALID_HANDLE_VALUE) return 0;

    if(Process32First(snapshot, &pe32)) {
        do {
            if(!_wcsicmp(pe32.szExeFile, name.c_str())) {
                CloseHandle(snapshot);
                return pe32.th32ProcessID;
            }
        } while(Process32Next(snapshot, &pe32));
    }

    CloseHandle(snapshot);
    return 0;
}

};

int main() {
std::wstring processName = L"target.exe";
DWORD pid = ProcessUtils::GetProcessIdByName(processName);

if(pid == 0) {
    std::wcout << L"Process not found: " << processName << std::endl;
    return 1;
}

MemoryScanner scanner(pid);

// 示例:查找并修改特定机器码模式
std::vector<BYTE> pattern = {0x8B, 0x45, 0xFC, 0x83, 0xC0, 0x01, 0x89, 0x45, 0xFC};
std::vector<BYTE> mask = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
std::vector<BYTE> newCode = {0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90};

std::vector<DWORD> addresses = scanner.FindPattern(pattern, mask);

if(addresses.empty()) {
    std::cout << "Pattern not found!" << std::endl;
    return 1;
}

for(DWORD addr : addresses) {
    if(scanner.WriteMemory((LPVOID)addr, newCode)) {
        std::cout << "Successfully modified code at: 0x" << std::hex << addr << std::endl;
    } else {
        std::cout << "Failed to modify code at: 0x" << std::hex << addr << std::endl;
    }
}

return 0;

}

include

include

include

include

include

pragma comment(lib, "iphlpapi.lib")

pragma comment(lib, "ws2_32.lib")

class NetworkAdapter {
public:
static void PrintAdaptersInfo() {
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

    pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            std::cout << "Adapter Name: " << pAdapter->AdapterName << "\n";
            std::cout << "Description: " << pAdapter->Description << "\n";
            std::cout << "MAC Address: ";
            for (UINT i = 0; i < pAdapter->AddressLength; i++) {
                printf("%02X", pAdapter->Address[i]);
                if (i != pAdapter->AddressLength - 1) printf("-");
            }
            std::cout << "\nIP Address: " << pAdapter->IpAddressList.IpAddress.String << "\n";
            std::cout << "Subnet Mask: " << pAdapter->IpAddressList.IpMask.String << "\n";
            std::cout << "Gateway: " << pAdapter->GatewayList.IpAddress.String << "\n\n";
            pAdapter = pAdapter->Next;
        }
    } else {
        std::cerr << "GetAdaptersInfo failed with error: " << dwRetVal << "\n";
    }
    free(pAdapterInfo);
}

static bool ChangeMAC(const char* adapterName, const BYTE* newMAC) {
    HKEY hKey;
    char regPath[256];
    sprintf_s(regPath, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%04d", 
             atoi(adapterName));

    if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, regPath, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) {
        return false;
    }

    char macStr[18];
    sprintf_s(macStr, "%02X%02X%02X%02X%02X%02X",
             newMAC[0], newMAC[1], newMAC[2], newMAC[3], newMAC[4], newMAC[5]);

    if (RegSetValueExA(hKey, "NetworkAddress", 0, REG_SZ, (const BYTE*)macStr, strlen(macStr)+1) != ERROR_SUCCESS) {
        RegCloseKey(hKey);
        return false;
    }

    RegCloseKey(hKey);
    return true;
}

static bool SetStaticIP(const char* adapterName, const char* ip, const char* mask, const char* gateway) {
    DWORD dwRetVal = 0;
    PIP_ADAPTER_INFO pAdapterInfo = NULL;
    ULONG ulOutBufLen = 0;

    GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
    pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) != NO_ERROR) {
        free(pAdapterInfo);
        return false;
    }

    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        if (strcmp(pAdapter->AdapterName, adapterName) == 0) {
            break;
        }
        pAdapter = pAdapter->Next;
    }

    if (!pAdapter) {
        free(pAdapterInfo);
        return false;
    }

    PIP_ADAPTER_INFO pAdapterToChange = pAdapter;
    free(pAdapterInfo);

    // 设置IP地址
    IP_ADDR_STRING* pIpAddr = &(pAdapterToChange->IpAddressList);
    strcpy_s(pIpAddr->IpAddress.String, 16, ip);
    strcpy_s(pIpAddr->IpMask.String, 16, mask);

    // 设置网关
    IP_ADDR_STRING* pGateway = &(pAdapterToChange->GatewayList);
    strcpy_s(pGateway->IpAddress.String, 16, gateway);

    // 应用设置
    DWORD dwSize = 0;
    GetAdaptersInfo(pAdapterToChange, &dwSize);
    dwRetVal = SetAdaptersInfo(pAdapterToChange, dwSize);

    return dwRetVal == NO_ERROR;
}

};

int main() {
std::cout << "=== Current Network Adapters ===" << std::endl;
NetworkAdapter::PrintAdaptersInfo();

// 示例:修改MAC地址 (需要管理员权限)
BYTE newMAC[6] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
if(NetworkAdapter::ChangeMAC("0000", newMAC)) {
    std::cout << "MAC address changed successfully!" << std::endl;
}

// 示例:设置静态IP
if(NetworkAdapter::SetStaticIP("0000", "192.168.1.100", "255.255.255.0", "192.168.1.1")) {
    std::cout << "IP configuration updated!" << std::endl;
}

return 0;

}

相关文章
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
208 2
|
2月前
|
C++ Windows
应用程序无法正常启动(0xc0000005)?C++报错0xC0000005如何解决?使命召唤17频频出现闪退,错误代码0xC0000005(0x0)
简介: 本文介绍了Windows应用程序出现错误代码0xc0000005的解决方法,该错误多由C++运行库配置不一致或内存访问越界引起。提供包括统一运行库配置、调试排查及安装Visual C++运行库等解决方案,并附有修复工具下载链接。
941 1
|
9月前
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
5月前
|
C++
爱心代码 C++
这段C++代码使用EasyX图形库生成动态爱心图案。程序通过数学公式绘制爱心形状,并以帧动画形式呈现渐变效果。运行时需安装EasyX库,教程链接:http://【EasyX图形库的安装和使用】https://www.bilibili.com/video/BV1Xv4y1p7z1。代码中定义了屏幕尺寸、颜色数组等参数,利用随机数与数学函数生成动态点位,模拟爱心扩散与收缩动画,最终实现流畅的视觉效果。
680 0
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
1190 0
|
12月前
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
249 4
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
2323 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
2合1,整合C++类(Class)代码转换为MASM32代码的平台
2合1,整合C++类(Class)代码转换为MASM32代码的平台
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
226 2
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
102 1

热门文章

最新文章