首页
社区
课程
招聘
[原创]mfc用资源id直接定位到代码比较简单
发表于: 2025-9-9 22:00 371

[原创]mfc用资源id直接定位到代码比较简单

2025-9-9 22:00
371

hcper @ 2025.9.9

mfc程序用api定位是比较烦的,但是如果用资源id定位却是异常简单。

因为资源id都是固定的数值,编程的时候是有意义的符号,编译后就是一个无意义的整数值。

符号对人类比较易懂,数值对人来说却是不直观。但这对计算机来说都是一样的。

所以说代码里面出现这些id的地方就是编程时的逻辑处理的地方。

为了方便可以先用资源工具导出rc文件,这样便于搜索字符串id。

===============================================


比如输入错误的密码登录,弹出无模式对话框消息。

59175 "帐号或密码错"

0:001> ? 0n59175

Evaluate expression: 59175 = 0000e727

传递参数push e727对应的字节码就是68 27 e7 00 00

直接在代码里面搜这个字节串,可以搜到好几个地方。

0:001> lm m *xxxddd*

start    end        module name

00400000 00b9d000   xxxddd     (no symbols)

0:001> s 00400000 00b9d000 68 27 e7 00 00

004b6c36  68 27 e7 00 00 eb 05 68-28 e7 00 00 8b ce e8 d3  h'.....h(.......

004b711f  68 27 e7 00 00 8d 4d ec-e8 ba d0 27 00 ff 75 ec  h'....M....'..u.

004b7871  68 27 e7 00 00 8b ce e8-9f 85 00 00 eb e4 25 ff  h'............%.

004b7e1f  68 27 e7 00 00 eb 05 68-28 e7 00 00 8b ce e8 ea  h'.....h(.......

如果输出多就把所有地址拷贝出来构造断点列表文件。

bp 004b6c36

bp 004b711f

bp 004b7871

bp 004b7e1f

在导入这些断点测试运行,确定到底是哪个就可以定位到处理逻辑了。

===============================================


对于mfc中的按钮id用消息映射的结构可以硬搜到处理函数。

每行6个,最开始111h是wm_command消息,中间两个一样的是按钮id,最后一个是处理函数。

0:003> .foreach /ps 5 (xx {s -d 00400000 00b9d000 3ee 3ee}) {dd /c 6 xx -8 l6}

007ae378  00000111 00000000 000003ee 000003ee 0000000c 0043b918

007ae758  00000111 00000000 000003ee 000003ee 0000000c 0043c2df

007b8f68  00000111 00000000 000003ee 000003ee 0000000c 004e2cbd

007b9460  00000111 00000000 000003ee 000003ee 0000000c 004ec1a0

007b9550  00000111 00000100 000003ee 000003ee 0000000c 004ec03c

007bda18  00000111 00000000 000003ee 000003ee 0000000c 00526947

007bdd60  00000111 00000000 000003ee 000003ee 0000000c 005294ae

007bdfe0  00000111 00000000 000003ee 000003ee 0000000c 0052ab19

007c0420  00000111 00000000 000003ee 000003ee 0000000c 0055b462

007c4bf0  00000111 00000000 000003ee 000003ee 0000000c 00596f58

007c52c8  00000111 00000000 000003ee 000003ee 0000000c 005a1712

007ca4b0  00000111 00000000 000003ee 000003ee 0000000c 0060094f

007cebd0  00000111 00000000 000003ee 000003ee 0000000c 0063a3cc

为了确定是哪个,可以把地址拷贝出来,构造断点列表,导入运行即可确认。


【追加参考:消息映射条目定义】

struct AFX_MSGMAP_ENTRY

{

    UINT nMessage;   // Windows 消息 ID

    UINT nCode;      // 控件通知代码 (WM_NOTIFY 或控件消息)

    UINT nID;        // 控件 ID(窗口消息时为 0)

    UINT nLastID;    // 控件 ID 范围的最后一个 ID(单个 ID 时等于 nID)

    UINT_PTR nSig;   // 消息签名,决定函数调用方式

    AFX_PMSG pfn;    // 处理该消息的成员函数指针

};




传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-9-10 14:22 被HelloCrack编辑 ,原因: 又忘了增加日期;增加参考
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回