-
-
[原创]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; // 处理该消息的成员函数指针
};
赞赏
- [原创]mfc用资源id直接定位到代码比较简单 372
- [原创]简易看星号密码 3207
- [原创]IDA不解析的符号临时解决方法 3280
- [分享]回答12年自己的提问,关于脚本变量内存地址一事 414
- [求助]测试挑战响应反射失败不知什么原因 182