开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 276|回复: 7
收起左侧

[C/C++] CE汇编转C++语言 大佬给个例子

[复制链接]
结帖率:80% (20/25)
发表于 昨天 01:10 | 显示全部楼层 |阅读模式   吉林省松原市
15精币
  
[ENABLE]
//code from here to ' [DISABLE]' will be used to enable the cheat
alloc (newmem,2048,"AMo.exe"+106BB2)
label (returnhere)
label (originalcode)
label (exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
mov [r14+00002534], (float)0
exit:
jmp returnhere
"AMo.exe"+106BB2:
jmp newmem
nop 4
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat








这汇编完的 怎么用C开启功能啊???


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
结帖率:92% (23/25)

签到天数: 6 天

发表于 昨天 01:51 | 显示全部楼层   山东省临沂市
这是CE改游戏的吗?代码是
改AMo.exe偏移106BB2的地址
把[r14+00002534]改成0
然后无条件跳到哪里
C++要弄的话感觉应该是hook
回复

使用道具 举报

结帖率:92% (23/25)

签到天数: 6 天

发表于 昨天 01:52 | 显示全部楼层   山东省临沂市
github上面有别人封装好的库
https://github.com/TsudaKageyu/minhook
回复

使用道具 举报

结帖率:0% (0/2)

签到天数: 2 天

发表于 昨天 12:55 | 显示全部楼层   山东省东营市
你找到的话跟我说说 我需要把CT脚本 给易语言调用 谢谢 QQ297222024
回复

使用道具 举报

结帖率:80% (20/25)

签到天数: 3 天

 楼主| 发表于 昨天 14:18 | 显示全部楼层   吉林省松原市
哈哈哈1哈 发表于 2026-7-5 12:55
你找到的话跟我说说 我需要把CT脚本 给易语言调用 谢谢 QQ297222024

易语言用CEAA就行 跟CE脚本一样都不用改 直接粘贴
回复

使用道具 举报

签到天数: 2 天

发表于 昨天 14:25 | 显示全部楼层   重庆市重庆市
#include <Windows.h>
#include <cstdint>

#pragma region HookBase

uintptr_t g_ModuleBase = 0;
uintptr_t g_HookAddr   = 0;
BYTE      g_OriginalBytes[5] = { 0 };

// 跳转回原代码
void* g_ReturnAddress = nullptr;

__declspec(naked) void HookStub()
{
    __asm {
        // 模拟原代码
        movss dword ptr [r14 + 02534h], xmm0

        // 跳回原地址 + 5
        jmp [g_ReturnAddress]
    }
}

BOOL PatchMemory()
{
    g_ModuleBase = reinterpret_cast<uintptr_t>(GetModuleHandleA("AMo.exe"));
    if (!g_ModuleBase)
        return FALSE;

    g_HookAddr = g_ModuleBase + 0x106BB2;

    DWORD oldProtect;
    VirtualProtect((LPVOID)g_HookAddr, 5, PAGE_EXECUTE_READWRITE, &oldProtect);

    // 保存原始字节
    memcpy(g_OriginalBytes, (void*)g_HookAddr, 5);

    // 计算 JMP 偏移
    DWORD offset = (DWORD)((uintptr_t)&HookStub - (g_HookAddr + 5));

    // 写入 jmp HookStub
    *reinterpret_cast<BYTE*>(g_HookAddr) = 0xE9;
    *reinterpret_cast<DWORD*>(g_HookAddr + 1) = offset;

    // NOP 4 字节(对应 CE 的 nop 4)
    memset((void*)(g_HookAddr + 5), 0x90, 4);

    VirtualProtect((LPVOID)g_HookAddr, 5, oldProtect, nullptr);
    return TRUE;
}

BOOL UnpatchMemory()
{
    if (!g_HookAddr)
        return FALSE;

    DWORD oldProtect;
    VirtualProtect((LPVOID)g_HookAddr, 5, PAGE_EXECUTE_READWRITE, &oldProtect);
    memcpy((void*)g_HookAddr, g_OriginalBytes, 5);
    VirtualProtect((LPVOID)g_HookAddr, 5, oldProtect, nullptr);
    return TRUE;
}

#pragma endregion

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hModule);
        PatchMemory();          // ENABLE
        break;

    case DLL_PROCESS_DETACH:
        UnpatchMemory();       // DISABLE
        break;
    }
    return TRUE;
}    AI一下就给你转了。
回复

使用道具 举报

结帖率:80% (20/25)

签到天数: 3 天

 楼主| 发表于 昨天 15:56 | 显示全部楼层   吉林省松原市

AI转的 启动功能 直接就闪退了
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

发表于 昨天 18:06 | 显示全部楼层   江西省南昌市
  
#include
#include
#include
#include  
uintptr_t GetModuleBaseAddress (DWORD procId, const wchar_t* modName) {
uintptr_t baseAddress = 0;
HANDLE hSnap = CreateToolhelp32Snapshot (TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
if (hSnap != INVALID_HANDLE_VALUE) {
MODULEENTRY32W modEntry;
modEntry.dwSize = sizeof (modEntry);
if (Module32FirstW (hSnap, &modEntry)) {
do {
if (!_wcsicmp (modEntry.szModule, modName)) {
baseAddress = (uintptr_t)modEntry.modBaseAddr;
break;
}
} while (Module32NextW (hSnap, &modEntry));
}
}
CloseHandle (hSnap);
return baseAddress;
}
int main () {

DWORD procId = 0;
HWND hGame = FindWindowW (NULL, L"窗口标题");
if (!hGame) {
std::cerr << "未找到游戏窗口!" << std::endl;
return -1;
}
GetWindowThreadProcessId (hGame, &procId);
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, procId);
if (!hProcess) {
std::cerr << "无法打开进程!" << std::endl;
return -1;
}
uintptr_t baseAddress = GetModuleBaseAddress (procId, L"AMo.exe");
if (!baseAddress) {
std::cerr << "无法获取模块基地址!" << std::endl;
CloseHandle (hProcess);
return -1;
}
uintptr_t injectAddress = baseAddress + 0x106BB2;
LPVOID newMem = VirtualAllocEx (hProcess, NULL, 2048, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (!newMem) {
std::cerr << "内存分配失败!" << std::endl;
CloseHandle (hProcess);
return -1;
}

std::vector newMemCode = {
0xC7, 0x86, 0x34, 0x25, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00            
};

WriteProcessMemory (hProcess, newMem, newMemCode.data (), newMemCode.size (), NULL);
int32_t jmpOffset = (int32_t) ( (uintptr_t)newMem - (injectAddress + 5));
std::vector jmpInstruction = { 0xE9 };
jmpInstruction.insert (jmpInstruction.end (),
(uint8_t*)&jmpOffset,
(uint8_t*)&jmpOffset + sizeof (jmpOffset));
jmpInstruction.insert (jmpInstruction.end (), 4, 0x90);
DWORD oldProtect;
VirtualProtectEx (hProcess, (LPVOID)injectAddress, jmpInstruction.size (), PAGE_EXECUTE_READWRITE, &oldProtect);
WriteProcessMemory (hProcess, (LPVOID)injectAddress, jmpInstruction.data (), jmpInstruction.size (), NULL);
VirtualProtectEx (hProcess, (LPVOID)injectAddress, jmpInstruction.size (), oldProtect, &oldProtect);
std::cout << "代码注入成功!" << std::endl;
system ("pause");
CloseHandle (hProcess);
return 0;
}



你试下这个,希望能帮到你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表