吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 833|回复: 5
上一主题 下一主题
收起左侧

[求助] 请用编程+反汇编的视角回答以下问题:

  [复制链接]
跳转到指定楼层
楼主
冥界3大法王 发表于 2026-3-12 22:50 回帖奖励
假设有以下几条汇编指令:
[Asm] 纯文本查看 复制代码
push 0

call <JMP.&GetModuleHandleA>

mov dword ptr ds:[4020CA],eax

push 0

push crackme.4020F4

call <JMP.&_FindWindowA@8>

or eax,eax

je crackme.40101D

mov dword ptr ds:[402064],4003

mov dword ptr ds:[<&WndProc>],<crackme.WndProc>

mov dword ptr ds:[40206C],0

mov dword ptr ds:[402070],0

mov eax,dword ptr ds:[4020CA]

mov dword ptr ds:[402074],eax   ====》 假想敌为这里! 



从此行向上。。哪些地方影响了eax的数值? 在行末尾加上(数字 标顺序)



如图所示,我让AI写了个自动标注 影响 寄存器的功能 ,它把eax都加亮显示了。。。
我怎么感觉不对呢?我感觉 它编的太过形式主义。。。

于是又问了DeepSeek

以下是影响 eax 数值的指令,并按顺序标记:

assembly push 0 call <JMP.&GetModuleHandleA>  ; (1) eax = GetModuleHandleA(0) 的返回值 mov dword ptr ds:[4020CA],eax ; (2) 保存 eax 到 [4020CA],但不改变 eax push 0 push crackme.4020F4 call <JMP.&_FindWindowA@8>    ; (3) eax = FindWindowA(0, "窗口类名") 的返回值 or eax,eax                    ; (4) 影响标志位但不改变 eax je crackme.40101D mov dword ptr ds:,4003 ; (5) 不影响 eax mov dword ptr ds:[<&WndProc>],<crackme.WndProc> ; (6) 不影响 eax mov dword ptr ds:[40206C],0    ; (7) 不影响 eax mov dword ptr ds:,0    ; (8) 不影响 eax mov eax,dword ptr ds:[4020CA]  ; (9) eax = [4020CA](恢复之前保存的值) mov dword ptr ds:,eax  ; (10) 保存 eax 到 ,但不改变 eax

关键影响点:

  1. call <JMP.&GetModuleHandleA> - 首次设置 eax(模块句柄)
  2. call <JMP.&_FindWindowA@8> - 修改 eax(窗口句柄或 NULL)
  3. mov eax,dword ptr ds:[4020CA] - 恢复 eax 为之前保存的模块句柄

其他指令仅使用 eax 或操作其他寄存器/内存,不影响 eax 的值。


<think>现在让我总结一下实现的功能,并给用户一个清晰的说明。</think>完成了!我已经实现了向上查找寄存器变化的功能。

实现内容:

  1. TraceBrowser.h:

    • 添加了 traceRegisterChangeBackwards() 函数声明(私有函数)
    • 添加了 traceRegisterChangeSlot() 槽函数声明(公共槽函数)
  2. TraceBrowser.cpp:

    • 实现了 instructionAffectsRegister() 辅助函数,用于检查指令是否会影响指定的寄存器
    • 实现了 traceRegisterChangeBackwards() 函数,从当前行向上遍历,查找影响目标寄存器的指令
    • 实现了 traceRegisterChangeSlot() 槽函数,处理用户触发的事件
    • 在右键菜单中添加了 "Trace register change backwards" 选项

使用方法:

  1. 在trace浏览器中,选择一行(比如第6行)
  2. 启用高亮模式(按快捷键或点击菜单)
  3. 在Registers列中,点击要追踪的寄存器(比如eax),使其高亮显示
  4. 右键点击,选择 "Trace register change backwards"
  5. 系统会向上查找,跳转到第一个影响该寄存器的指令

功能特点:

  • 支持向上查找寄存器变化
  • 自动识别修改指令(mov, add, sub, mul, div, and, or, xor, lea, pop, inc, dec等)
  • 特殊处理call指令(会影响eax/rax作为返回值)
  • 使用高亮模式选择要追踪的寄存器

注意事项:

  • 需要先启用高亮模式,然后选择要追踪的寄存器
  • 当前实现是简化版本,通过指令文本匹配来判断寄存器变化
  • 对于复杂的指令(如复杂的内存操作),可能需要更精确的分析

现在你可以编译并测试这个功能了!

免费评分

参与人数 1热心值 +1 收起 理由
Issacclark1 + 1 谢谢@Thanks!

查看全部评分

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

沙发
lies2014 发表于 2026-3-13 00:24
40104A的eax=401007的eax即模块句柄
3#
 楼主| 冥界3大法王 发表于 2026-3-13 07:17 |楼主
lies2014 发表于 2026-3-13 00:24
40104A的eax=401007的eax即模块句柄

我的本意是:
       1.利用原有功能改造
       2.弹个输入框,取 想得到的xx (并非寄存器)
       3.不能死板的,我说是eax就都从底从顶都高亮
       4.必须是影响到的,连续相邻的,被打断就截止

感觉比较抽象,AI可能不会全理解意图。

        
4#
yes2 发表于 2026-3-13 08:41
没明白你的需求是什么?DeepSeek回答是正确的,只有两个call和0xC行的赋值影响了。
只高亮EAX可能是AI没理解你的意思吧,你预期应该是call指令高亮和0xC行高亮,多跟AI调整一下应该是可以做到的吧
5#
wangpeng484 发表于 2026-3-13 10:09
我是看学习的,增长一下知识量
6#
lies2014 发表于 2026-3-13 12:27
我也认为就这个案例来说DeepSeek的回答是正确的,但你要功能化可能要考虑更多的问题,比如对call的判断,不是每个call都会改变eax的,AI后台有数据库的支撑,但自己的功能模块如何去实现是个问题

免费评分

参与人数 1吾爱币 +4 热心值 +1 收起 理由
冥界3大法王 + 4 + 1 我很赞同!

查看全部评分

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

本版积分规则

返回列表

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

GMT+8, 2026-6-15 22:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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