|
发表于 2025-4-20 20:30:45
|
显示全部楼层
广东省珠海市
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮_启用_被单击
.局部变量 进程ID, 整数型
.局部变量 目标地址, 整数型
.局部变量 跳转偏移, 整数型
.局部变量 jmp指令, 字节集
' 1. 获取目标进程ID和特征码地址
进程ID = 进程_名取ID ("Hero Siege.exe")
目标地址 = 内存_特征码搜索 (进程ID, "8B 01 85 C0 41 8B F0")
.如果真 (目标地址 = 0)
信息框 ("未找到目标函数!", 0, , )
返回
.如果真结束
' 2. 分配内存(需可执行权限)
分配内存_gcdmem1 = 内存_分配 (进程ID, 4096, #内存可执行)
分配内存_gcdmain = 内存_分配 (进程ID, 4096, #内存可执行)
' 3. 写入自定义汇编代码(机器码需手动转换)
自定义代码_gcdmem1 = { 0xE9 } ' jmp指令的机器码头字节
跳转偏移 = 分配内存_gcdmain - 分配内存_gcdmem1 - 5 ' 计算相对跳转偏移
自定义代码_gcdmem1 = 自定义代码_gcdmem1 + 到字节集 (跳转偏移)
内存_写字节集 (进程ID, 分配内存_gcdmem1, 自定义代码_gcdmem1)
' gcdmain的汇编代码(示例机器码)
自定义代码_gcdmain = { 0xB8, 0x58, 0x0B, 0x00, 0x00, 0x85, 0xC0, 0x41, 0x8B, 0xF0, 0xE9 } ' mov eax,3000; test eax,eax; ... jmp返回
内存_写字节集 (进程ID, 分配内存_gcdmain, 自定义代码_gcdmain)
' 4. 劫持原函数(写入jmp指令)
原始指令备份 = 内存_读字节集 (进程ID, 目标地址, 5) ' 保存原指令用于恢复
jmp指令 = { 0xE9 } + 到字节集 (分配内存_gcdmem1 - 目标地址 - 5)
内存_写字节集 (进程ID, 目标地址, jmp指令)
.子程序 _按钮_禁用_被单击
' 恢复原指令并释放内存
内存_写字节集 (进程ID, 目标地址, 原始指令备份)
内存_释放 (进程ID, 分配内存_gcdmem1)
内存_释放 (进程ID, 分配内存_gcdmain)
这是ai给出的转e代码,根据你实际需求修改应该能跑起来 |
|