吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6575|回复: 7
收起左侧

[分享] 定位VC6 MFC编译版本的按钮处理函数

[复制链接]
Chenxs110 发表于 2012-7-25 23:44
本帖最后由 Chenxs110 于 2012-7-25 23:48 编辑

首先跪拜一下Sound哥的大作:http://www.52pojie.cn/thread-151725-1-1.html
Sound哥的计算器附件应该是8.0编译的吧.
后来自己测试了一下VC6下的找法.
1.载入测试文件:
停在oep处:
00000.jpg
2.直接来到GetModuleHandleA之后的第一个call主程序模块并下断点,F7跟进
00401824  |> 50             PUSH EAX                                 ; /Arg4
00401825  |. 56             PUSH ESI                                 ; |Arg3
00401826  |. 53             PUSH EBX                                 ; |Arg2
00401827  |. 53             PUSH EBX                                 ; |/pModule
00401828  |. FF15 00204000  CALL DWORD PTR DS:[<&KERNEL32.GetModuleH>; |\GetModuleHandleA
0040182E  |. 50             PUSH EAX                                 ; |Arg1
0040182F  |. E8 5E000000    CALL FindWinP.00401892                   ; \FindWinP.00401892
00401834  |. 8945 98        MOV DWORD PTR SS:[EBP-68],EAX
3.进入MFC模块领空,直接alt+m对程序主模块code段F2,然后F9来到这里(进入MFC领空实际上是调用AfxWinMain,位于MFC模块中.dependency walker查不到这个东西)

initapp

initapp

(这里实际上是准备调用CWinApp::InitApplication)
4.F7再进入MFC领空,然后再重复第三步的操作来到这里
.text:004010B0 ; 这里是CxxxxApp::InitInstance(void)
.text:004010B0
.text:004010B0 sub_4010B0      proc near               ; DATA XREF: .rdata:00402270o
.text:004010B0
.text:004010B0 var_70          = byte ptr -70h
.text:004010B0 var_C           = dword ptr -0Ch
.text:004010B0 var_4           = dword ptr -4
.text:004010B0
.text:004010B0                 push    0FFFFFFFFh
.text:004010B2                 push    offset SEH_4010B0
.text:004010B7                 mov     eax, large fs:0
.text:004010BD                 push    eax
.text:004010BE                 mov     large fs:0, esp
.text:004010C5                 sub     esp, 64h
.text:004010C8                 push    esi
.text:004010C9                 mov     esi, ecx
.text:004010CB                 push    0
.text:004010CD                 call    AfxEnableControlContainer(COccManager *)
.text:004010D2                 add     esp, 4
.text:004010D5                 mov     ecx, esi
.text:004010D7                 call    CWinApp::Enable3dControls(void)
.text:004010DC                 push    0
.text:004010DE                 lea     ecx, [esp+78h+var_70]
.text:004010E2                 call    sub_4011C0      ; 这里是我们从CDialog类继承过来的子类别的构造函数
.text:004010E7                 lea     eax, [esp+74h+var_70]
.text:004010EB                 lea     ecx, [esp+74h+var_70]
.text:004010EF                 mov     [esp+74h+var_4], 0
.text:004010F7                 mov     [esi+20h], eax

找到构造函数也就找到了this指针,接下来就可以顺藤摸瓜this指针-->虚函数表-->虚函数表中的GetMessageMap-->AFX_MSGMAP_ENTRY结构.
再从AFX_MSGMAP_ENTRY中扒出我们想要的按钮处理函数.
第一篇文章,难免有不错误或者有不详尽的地方,若有错误或者遗漏的地方.欢迎指出.

FindWinProc.rar

387.97 KB, 下载次数: 37, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 2热心值 +2 收起 理由
Sound + 1 ucantseeme 大牛的映射消息MFC按钮查找文章.
Ruin + 1 谢谢@Thanks!

查看全部评分

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

liuyongliang 发表于 2012-7-26 00:12
sound 他很牛的  找他多学习学习   
Ruin 发表于 2012-7-26 00:25
Sound 发表于 2012-7-26 07:28
本帖最后由 Sound 于 2012-7-25 11:32 编辑

不错 加亮几天鼓励 期待你的下一篇

如果能再详细点就完美洛.aha (^_^)
uc007126 发表于 2012-7-26 22:16
多看,我也会学会很多东西的
andyblack 发表于 2012-8-19 19:28
多看,我也会学会很多东西的
小人物大智慧 发表于 2012-11-27 12:32
多谢LZ  以后多发好文章 让我们菜鸟受益
675550115 发表于 2014-2-14 19:44

多谢LZ  以后多发好文章 让我们菜鸟受益
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-18 05:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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