MFC(Microsoft Foundation Classes)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数
MFC的事件和消息
事件
举一个例子:猎⼈在⼭中布置了⼀个陷阱,⼀头野猪掉进陷阱中了。这⾥的“野猪掉进陷阱”就是⼀个事件,但是这个事件发⽣时,猎⼈并不⼀定知道(猎⼈不可能⼀直盯着某个陷阱);如果猎⼈想要在猎物掉⼊陷阱中时⻢上知道,该这么做呢?在陷阱上布置⼀个铃铛,当猎物掉⼊陷阱时,铃铛响。猎⼈知道后就可以做出相应的处理了这⾥的“铃铛响”就是⼀个消息
事件会触发消息
事件发送了,不一定有消息
有消息传来,一般肯定有事件发送
消息:是被动的!你要自己安排时间去取出来看或检测
控件事件:是主动的!当发生时会执行其对应的函数
关于MFC下的控件的事件和属性
CButton
事件:
1 2
| BCN_HOTITEMCHANGE 当⿏标进⼊或离开此按钮空间区域时发⽣该事件
|
CListCtrl
事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| NM_CLICK ⽤户单击列表时发送此消息 NM_DBLCLK ⽤户双击列表时发送此消息 NM_RCLICK ⽤户右键单击列表时发送此消息 NM_RDBLCLK ⽤户右键双击列表时发送此消息 NM_KILLFOCUS 列表失去焦点时发送此消息 NM_OUTOFMEMORY 当内存溢出时产⽣ NM_SETFOCUS 当列表视图控件获得焦点时产⽣ LVN_BEGINDRAG ⿏标左键正在被触发以便进⾏拖放操作(当⿏标左键开始拖拽列表视图控件 中的项⽬时产⽣) LVN_BEGINRDRAG ⿏标右键正在被触发以便进⾏拖放操作(当⿏标右键开始拖拽列表视图控 件中的项⽬时产⽣) LVN_BEGINLABELEDIT 开始编辑项的⽂本 LVN_COLUMNCLICK ⽤户单击列表的列时发送此消息 LVN_DETELEITEM 当删除列表项时发送此消息 LVN_DELETEALLITEMS 删除所有项 LVN_ENDLABELEDIT 结束对项⽂本的编辑 LVN_GETDISPINFO 请求需要显示的信息 LVN_GETINFOTIP 请求显示在⼯具提示窗⼝内的附加的⽂本信息 LVN_HOTTRACK ⿏标滑过某个项 LVN_INSERTITEM 当向列表视图控件插⼊项⽬时产⽣ LVN_ITEMACTIVATE 激活某个项 LVN_ITEMCHANGED 某个项已经发⽣变化 LVN_ITEMCHANGING 某个项⽬正在发⽣变化 LVN_ITEMCHANGED 列表中的当前选择项将要改变时发送此消息 LVN_KEYDOWN 某个键被按下 LVN_MARQUEEBEGIN 开始某个边框选择 LVN_ODCACHEHINT 虚拟列表控件的显示区域的内容发⽣了变化 LVN_ODSTATECHANGED 虚拟列表的控件的某个项或某个范围内的项已经发⽣变化 LVN_ODFINDITEM 需要拥有者查找 ⼀个特定的回调项 LVN_SETFOCUS 列表框获得焦点时发送此消息
|
属性:
1 2 3 4 5 6 7 8 9
| View 列表视图的显示⻛格:图标(Icon)、⼩图标(Small Icon)、列表(list)、报表(Report) Align 列表中的⽂本对⻬⽅式:顶端对⻬(top)、左对⻬(left) Sort 列表中的记录排序:不排序(None)、升序(Ascending),降序(Descending)按照列表的第⼀列字⺟顺序排序 Border 选中时,使列表含有边框 Single selection 选中时,只能选择⼀条记录,否则,可以多⾏选择 Auto arrange 选中时, ⾃动对⻬⽹格上的项 No Label wrap 选中时,⽂本不折叠 Edit lables 选中时, 可以编辑标签 No scroll 选中时,列表不能滚动 No column header 选中时,列表没有列表头 No sort header 选中时,没有排序的表头 Show selection always 总是显示选择项
|
CComboBox
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CBN_CLOSEUP: 组合框的列表框组件被关闭,简易组合框不会发送该通知消息 CBN_DBLCLK: ⽤户在某列表项上双击⿏标,只有简易组合框才会发送该通知消息 CBN_DROPDOWN: 组合框的列表框组件下拉,简易式组合框不会发送该通知消息 CBN_EDITUPDATE: 在编辑框准备显示改变了的正⽂时发送该消息,下拉列表式组合框不会 发送该消息 CBN_EDITCHANGE: 编辑框的内容被⽤户改变了,与CBN_EDITUPDATE不同,该消息是在 编辑框显示的正⽂被刷新后才发出的,下拉列表式组合框不会发送该消息 CBN_ERRSPACE: 组合框⽆法申请⾜够的内存来容纳列表项 CBN_SELENDCANCEL: 表明⽤户的选择应该取消,当⽤户在列表框中选择了⼀项,然后⼜在 组合框控件外单击⿏标时就会导致该消息的发送 CBN_SELENDOK: ⽤户选择了⼀项,然后按了回⻋键或单击了下滚箭头,该消息表明⽤户确 认了⾃⼰所作的选择 CBN_KILLFOCUS: 组合框失去了输⼊焦点 CBN_SELCHANGE: ⽤户通过单击或移动箭头键改变了列表的选择 CBN_SETFOCUS: 组合框获得了输⼊焦点
|
CEdit:
事件:
1 2 3 4 5 6 7 8
| EN_CHANGE 当编辑控件中的⽂本已被修改,在新的⽂本显示之后发送此消息 EN_ERRSPACE 编辑框控件⽆法申请⾜够的动态内存来满⾜需要 EN_HSCROLL 当编辑控件的⽔平滚动条被使⽤,在更新显示之前发送此消息 EN_KILLFOCUS 编辑控件失去键盘输⼊焦点时发送此消息 EN_MAXTEXT ⽂本数⽬到达了限定值时发送此消息 EN_SETFOCUS 编辑控件得到键盘输⼊焦点时发送此消息 EN_UPDATE 当编辑控件中的⽂本已被修改,在新的⽂本显示之前发送此消息 EN_VSCROLL 当编辑控件的垂直滚动条被使⽤,在更新显示之前发送此消息
|
属性:
1 2 3 4 5 6 7 8 9 10 11 12
| Align text 各⾏⽂本对⻬⽅式:Left、Center、Right,缺省时为Left Multiline 选中时为多⾏编辑控件,否则为单⾏编辑控件 Number 选中时控件只能输⼊数字 Horizontal scroll ⽔平滚动,仅对多⾏编辑控件有效Auto Hscroll 当⽤户在⾏尾键⼊⼀个字符时,⽂本⾃动向右滚动 Vertical scroll 垂直滚动,仅对多⾏编辑控件有效 Auto Vscroll 当⽤户在最后⼀⾏按ENTER键时,⽂本⾃动向上滚动⼀⻚,仅对多⾏编辑控件有效 Password 选中时,键⼊编辑控件的字符都将显示为“*”,仅对单⾏编辑控件有效。 No hide selection 通常情况下,当编辑控件失去键盘焦点时,被选择的⽂本仍然反⾊显示。选中该项 时,则不具备此功能。 OEM convert 选中时,实现对特定字符集的字符转换。 Want return 选中时,⽤户按下 ENTER键,编辑控件中会插⼊⼀个回⻋符。 Border 选中时,在控件的周围存在边框。 Uppercase 选中时,编辑框中的字符全部⼤写。 Lowercase 选中时,编辑框中的字符全部为⼩写。 Read_Only 选中时,防⽌⽤户键⼊或编辑⽂本。
|
CListBox:
事件:
1 2 3 4 5 6 7 8 9 10 11 12
| LBN_DBLCLK : ⽤户⽤⿏标双击了⼀列表项,只有具有LBS_NOTIFY 的列表框才能发送该消 息 LBN_ERRSPACE : 列表框不能申请⾜够的动态内存来满⾜需要 LBN_KILLFOCUS : 列表框失 去输⼊焦点 LBN_SELCANCEL: 当前的选择被取消,只有具有LBS_NOTIFY 的列表框才能发送该消息 LBN_SELCHANGE: 单击⿏标选择了⼀列表项,只有具有LBS_NOTIFY 的列表框才能发送该 消息 LBN_SETFOCUS: 列表框获得输⼊焦点 WM_CHARTOITEM: 当列表框收到WM_CHAR 消息后, 向⽗窗⼝发送该消息, 只有具有 LBS_WANTKEYBOARDINPUT ⻛格的列表框才会发送该消息 WM_VKEYTOITEM: 当列表框收到WM_KEYDOWN 消息后,向⽗窗⼝发送该消息,只有具有 LBS_WANTKEYBOARDINPUT ⻛格的列表框才会发送该消息
|
以上的!!遇到了在查
MFC的程序编写和安全分析
创建好后
找到这个位置。利用工具箱。把东西写好
用工具箱里面的 static text 和 button 和 edit control 创建好和上图一样后。编译运行。生成一个exe。
我们运⾏起来发现,随便输⼊⼀个字他会弹出失败了,再来⼀次吧的弹窗。那么我们尝试去破解他,使其我们输⼊啥,他都会提示我们破解成功!
首先把它放入od 里面
通过全局搜索,找到我们破解的地方
点进去
看到这句话之前有一个je 的跳转,我们知道je的跳转就是说ZF标志位=1就会跳转
我们在前面的call【我觉得这里是调用对话框的一个cakl】设置一个断点,然后运行程序。在程序中随便输入一个值后,程序停下来了。
这个时候,我们单步运行。在je之前。发现zf标志位是1.我们人为的把他改成0后继续运行
ok 破解成功…..