XNUCA2020-RE-UnravelMFC复现

mfc的逆向,同时搭配多种算法

如何找按钮对应的函数

在MFC中,程序使用消息机制来实现操作响应,下面是消息映射表的结钩,我们想要的某个控件的消息处理函数,就存放在该结构体的pfn中。nID与控件的ID相同

struct AFX_MSGMAP{
    AFX_MSGMAP * pBaseMessageMap;
    AFX_MSGMAP_ENTRY * lpEntries;
}

struct AFX_MSGMAP_ENTRY{
    UINT nMessage;    //Windows Message
    UINT nCode        //Control code or WM_NOTIFY code
    UINT nID;         //control ID (or 0 for windows messages)
    UINT nLastID;     //used for entries specifying a range of control id's
    UINT nSig;        //signature type(action) or pointer to message 
    AFX_PMSG pfn;     //routine to call (or specical value)
}

第一步:用resource hacker查找资源。得到资源对应的编号,本图:确定对应1,取消对应2,消息框对应1000。
1
第二步:IDA打开,Search>immediate value(快捷键:Alt+I),打开一个消息框
查找0xE8(消息框对应的ID是1000,16进制 字节表示就取后两位 E8,勾选Find all occurrences(查找所有事件))
在这里插入图片描述
点击ok开始查找,查找结果:
1
第三步:创建本地类型
View–>Open Subviews–>Local Types(视图–>打开子窗口–>本地类型)(快捷键 shift+F1) Inaert键插入,在输入框里输入下面的内容:

struct AFX_MSGMAP_ENTRY
{
        UINT nMessage;
        UINT nCode;
        UINT nID;
        UINT nLastID;
        UINT_PTR nSig;
        void (*pfn)(void);
};

struct AFX_MSGMAP
{
  const AFX_MSGMAP *(__stdcall *pfnGetBaseMap)();
  const AFX_MSGMAP_ENTRY *lpEntries;
};

2
点击ok,成功插入新的本地类型
3
新增的两种类型分别右键Synchronize to idb,同步到本文件中(新增两种类型,要操作两次)
3
第四步:修改数据为新定义结构体格式。
选中第二步找到的数据,Edit>Structs>Struct var在这里插入图片描述
修改成功,找到按钮对应的函数。1

无法按下确认键?

1
输入长度为66,可以按下确认键。

参考文章:https://www.52pojie.cn/thread-1297534-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值