吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4719|回复: 36
收起左侧

[其他原创] Cheat Engine 高亮 + 生成特征码脚本

  [复制链接]
wjx8885577 发表于 2025-12-3 19:13
本帖最后由 wjx8885577 于 2025-12-24 10:21 编辑

1.菜单创建:在CE反汇编窗口的右键菜单中添加"寄存器高亮"主菜单,包含所有通用寄存器的子菜单
2.交互操作:点击寄存器名称可切换该寄存器的高亮状态(勾选/取消勾选)
3.高亮效果:选中的寄存器在反汇编代码中会显示为黄色背景+黑色文字
4.实时更新:切换后立即重绘视图,无需重启或刷新
5.大小写兼容:能匹配不同大小写格式的寄存器名称

1.png



1.智能长度:自动确定最短且唯一的特征码长度
2.多格式输出:同时生成CE、IDA、PEiD和C/C++语言格式的特征码
3.指令感知:识别x64指令前缀(REX/0F)和操作数部分
4.线程安全:使用独立线程避免界面卡顿
5.范围限定:仅在目标模块内搜索,提高效率和准确性

4.png

5.png

6.png

2.png
特征码会生成5种风格的代码,类似于下面:
[Asm] 纯文本查看 复制代码
CE Style
E8????????41524989

PEiD Style
E8 ?? ?? ?? ?? 41 52 49 89

IDA Style
E8 ? ? ? ? 41 52 49 89

Code style
\xE8\x?\x?\x?\x?\x41\x52\x49\x89 x????xxxx

C/C++ Style
{ 0xE8, ?, ?, ?, ?, 0x41, 0x52, 0x49, 0x89 }




3.png
把LUA脚本放进CE的autorun目录里面,这样CE启动后会自动加载脚本



[Lua] 纯文本查看 复制代码
-- 获取内存窗口中的反汇编视图对象
local disasmView = getMemoryViewForm().DisassemblerView

-- 定义64位和32位寄存器对应的配对关系
local registerPairs = {
    {"RAX", "EAX"}, {"RBX", "EBX"}, {"RCX", "ECX"}, {"RDX", "EDX"},
    {"RSI", "ESI"}, {"RDI", "EDI"}, {"RBP", "EBP"}, {"RSP", "ESP"},
    {"R8", ""}, {"R9", ""}, {"R10", ""}, {"R11", ""},
    {"R12", ""}, {"R13", ""}, {"R14", ""}, {"R15", ""}
}

-- 创建一个状态表,用于记录每个寄存器是否需要高亮显示,初始化为全部false
local highlightStates = {}
for _, pair in ipairs(registerPairs) do
    highlightStates[pair[1]] = false
end

-- 创建主菜单项,添加到反汇编视图的右键弹出菜单中
local mainItem = createMenuItem(disasmView.PopupMenu)
mainItem.Caption = "寄存器高亮"  -- 菜单文字
mainItem.ImageIndex = 38         -- 菜单图标索引

disasmView.PopupMenu.Items.add(mainItem)

-- 存储子菜单项的引用表,方便后续操作
local subMenuItems = {}
for _, pair in ipairs(registerPairs) do
    local reg64, reg32 = pair[1], pair[2]
    
    -- 为每个寄存器创建子菜单项
    local subItem = createMenuItem(mainItem)
    
    -- 设置菜单显示文字(有32位寄存器的显示为"RAX/EAX"格式)
    if reg32 and reg32 ~= "" then
        subItem.Caption = string.format("%s/%s", reg64, reg32)
    else
        subItem.Caption = reg64
    end
    
    subItem.Checked = false  -- 初始未选中状态
    
    mainItem.add(subItem)    -- 将子菜单添加到主菜单
    
    subMenuItems[reg64] = subItem  -- 保存引用
end

-- 清除全部高亮功能
local separatorItem = createMenuItem(mainItem)
separatorItem.Caption = '-'  -- 分隔符
mainItem.add(separatorItem)

-- 创建"清除全部"菜单项
local clearAllItem = createMenuItem(mainItem)
clearAllItem.Caption = "清除全部高亮"
mainItem.add(clearAllItem)

-- 核心高亮函数:在反汇编后处理文本,为寄存器添加颜色标记
local function highlightDisasm(sender, address, LastDisassembleData, result, description)
    for _, pair in ipairs(registerPairs) do
        local reg64, reg32 = pair[1], pair[2]
        
        -- 如果该寄存器被标记为高亮
        if highlightStates[reg64] then
            -- 创建大小写不敏感的正则模式(如"RAX"变为"[Rr][Aa][Xx]")
            local pattern64 = reg64:gsub("%a", function(c) 
                return "[" .. c:upper() .. c:lower() .. "]" 
            end)
            -- 在参数字符串中替换为带颜色的格式(B=背景色,C=前景色,N=重置)
            LastDisassembleData.parameters = LastDisassembleData.parameters:gsub(
                pattern64, '{BFFFF00}{C000000}%0{N}'
            )
            
            -- 对32位寄存器执行相同的操作
            if reg32 and reg32 ~= "" then
                local pattern32 = reg32:gsub("%a", function(c) 
                    return "[" .. c:upper() .. c:lower() .. "]" 
                end)
                LastDisassembleData.parameters = LastDisassembleData.parameters:gsub(
                    pattern32, '{BFFFF00}{C000000}%0{N}'
                )
            end
        end
    end
    return result, description
end

-- 为每个子菜单项设置点击事件处理函数
for reg64, menuItem in pairs(subMenuItems) do
    menuItem.OnClick = function(sender)
        sender.Checked = not sender.Checked  -- 切换选中状态
        
        if disasmView then
            disasmView.Repaint()  -- 刷新反汇编视图
        end
        
        -- 更新寄存器高亮状态
        highlightStates[reg64] = not highlightStates[reg64]

    end
end

-- "清除全部"点击事件处理函数
clearAllItem.OnClick = function(sender)
    -- 遍历所有寄存器子菜单项,取消选中状态并重置高亮状态
    for reg64, menuItem in pairs(subMenuItems) do
        menuItem.Checked = false
        highlightStates[reg64] = false
    end
    
    if disasmView then
        disasmView.Repaint()  -- 刷新反汇编视图
    end
end

-- 将高亮函数注册到反汇编器的PostDisassemble事件,使其在每次反汇编后自动调用
getVisibleDisassembler().OnPostDisassemble = highlightDisasm




autorun.7z (13.66 KB, 下载次数: 353)

免费评分

参与人数 15吾爱币 +22 热心值 +14 收起 理由
laozhhaiJohn + 1 + 1 我很赞同!
照片依旧 + 1 + 1 我很赞同!
alicc + 2 + 1 我很赞同!
JUNGLE_CN + 1 + 1 我很赞同!
注册个id + 1 + 1 用心讨论,共获提升!
qiujunjian1 + 1 + 1 谢谢@Thanks!
TNB + 1 + 1 谢谢@Thanks!
hrh123 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
De蓝 + 1 + 1 热心回复!
sanjos + 1 用心讨论,共获提升!
lsq132273 + 1 + 1 热心回复!
wym20181818 + 1 + 1 用心讨论,共获提升!
a454635280 + 1 + 1 感谢你的分享
MJ_B + 1 + 1 热心回复!
helian147 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Say 发表于 2025-12-24 23:30
wjx8885577 发表于 2025-12-24 10:22
你试试我新上传的特征码脚本

刚刚试了,还是一样的问题,扫描出AOB特征码后CE崩溃...应该是进度窗口与线程同步存在逻辑问题,在添加生成AOB菜单的线程回调中,进度表控件的销毁和关闭没有判断是否已销毁.不知道是我的CE有问题是其他原因,我测试的CE版本7.5和7.6都崩了.还有一些小的bug,比如缓存边界,字节解析和多线程同步等这些.在某些进程会获取失效或者报错 重复的情况.
alicc 发表于 2025-12-20 10:58
非常好,大佬能增加 不同颜色吗  比如  从下往上  mov ecx,rdi    ecx高亮青色   上一层 mov rdi,rax  rdi高亮蓝色 等等
souny 发表于 2025-12-3 19:30
shuaigeA 发表于 2025-12-3 19:33
牛啊,大佬
zt185 发表于 2025-12-3 19:37
好软件,试试这版CE!
yenfenwo 发表于 2025-12-3 20:44
这个太棒了 !
钱迷 发表于 2025-12-3 20:47
终于有人发布了,谢谢
北七夜 发表于 2025-12-3 20:59
有过检测的ce吗
qxiaoguiq 发表于 2025-12-3 21:07
感谢楼主分享
鸭子咯咯哒~ 发表于 2025-12-3 23:02
学习学习
zhouxinyi 发表于 2025-12-4 00:49
可以,不用重复造轮子了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-16 23:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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