简单MFC程序开发-C++反编译肉鸡养成

目录

一、需求

二、程序效果

效果1:鼠标左键点击,显示坐标

效果2:按下按键,显示键值

三、实现过程

1.创建MFC程序

2.修改添加功能

2.1 修改标题

2.2 增加鼠标消息

 2.3 增加键盘消息

 2.4 显示文字函数

2.5 编译生成exe


一、需求

     为了更好的理解MFC(C++)程序的结构,拆解方法,需要首先创建一个MFC窗口程序,对于只了解一点C++的工程师来说,走一遍MFC程序开发的流程,是很有必有的,无奈C++开发工具的版本太多,很难找到visual studio 2022版本的,因此有必要写一写。

二、程序效果

效果1:鼠标左键点击,显示坐标

效果2:按下按键,显示键值

三、实现过程

1.创建MFC程序

打开visual studio 2022选择创建MFC程序。

选择单个文档,MFC标准界面

会看到产生了5个类其中MainFrame是主窗体,view是类似窗体上的画布。

2.修改添加功能

2.1 修改标题

不像基于对话框的窗体,可以在属性页面直接更改标题,需要在窗体创建前的PreCreateWindow里初始化窗体名称,但要先取消默认窗体的设置。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)//更改窗体的一些参数
{
	

	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	cs.style &= ~FWS_ADDTOTITLE;/*在单文档的界面中,程序默认的窗口样式是WS_OVERLAPPEDWINDOW和FWS_ADDTOTITLE,
								FWS_ADDTOTITLE是MFC特定的一种样式,指示框架将文档标题添加到窗口标题之上,如果
								想让窗口显示自己的标题,只需要将窗口的FWS_ADDTOTITLE样式去掉即可。*/
	cs.lpszName = TEXT("Hali-- C++反编译demo程序");

	return TRUE;
}

2.2 增加鼠标消息

        这一个实例主要是运用MFC的消息机制,因此选择类,开启监听的消息类别(如WM_LBUTTONUP),创建该类消息的处理函数(如OnLButtonUp),添加方法为:

修改代码:

void CMFCApplication5View::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CString key;
	key.Format(TEXT("X is %d ,Y is %d"), point.x,point.y);
	MessageBox(key);
	CView::OnLButtonUp(nFlags, point);
}

 2.3 增加键盘消息

键盘事件是WM_CHAR(),处理函数默认为onChar(),添加方法为:

修改代码:

void CMFCApplication5View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CString key;
	key.Format(TEXT("KEY Is %c"),nChar);
	MessageBox(key);

	CView::OnChar(nChar, nRepCnt, nFlags);
}

 2.4 显示文字函数

        显示文件的事件为PAINT或者DRAW,添加方法为:

 添加代码:

void CMFCApplication5View::OnPaint()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此处添加消息处理程序代码
					   // 不为绘图消息调用 CView::OnPaint()
	dc.TextOutW(10, 20, TEXT("Hali onpaint C++"));
}

2.5 编译生成exe

选择Debug、X86模式编译,生成鲜美的MFC肉鸡,准备投入IDA进行分析。

四、启动反编译观察exe

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
最近一直都在看ExeToc的源码,仔细看一看,问题比较的多,但是,至少整体框架有了。 这次修改主要是几点: 1、给伪代码视图上了颜色 (反编译后有三个视图,反汇编视图、反编译视图与伪代码视图),快捷键分别是 a、d、i 代码: void CRorEditView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { CRorTextView::OnChar(nChar, nRepCnt, nFlags); if (nChar == 'i' || nChar == 'I') // 显示伪代码信息 { this->ResetView(); this->DeleteAll(); this->LocateTextBuffer()->m_xml.Clear(); g_EXE2C->Hxd_prtout_Pcode(&this;->m_pTextBuffer->m_xml); this->Invalidate(); return; } if (nChar == 'a' || nChar == 'A') // 显示汇编信息 { this->ResetView(); this->DeleteAll(); this->LocateTextBuffer()->m_xml.Clear(); g_EXE2C->hxd_prtout_Asm(&this;->m_pTextBuffer->m_xml); this->Invalidate(); return; } if (nChar == 'd' || nChar == 'D') // 反编译的信息按CPP格式显示 { this->ResetView(); this->DeleteAll(); this->LocateTextBuffer()->m_xml.Clear(); g_EXE2C->prtout_cpp(&this;->m_pTextBuffer->m_xml); this->Invalidate(); } } 2、修改了cmp伪代码与jxx代码的合并函数(还需要完善) 3、修改了变量优化函数 (还需要完善) 4、修改了流程分析函数(还需要完善,我正在改写这部分,没写完,原先相同功能的代码也没有删除) 我感到凭我个人的精力是不能完成此程序的,有兴趣的网友可以一起写一写。 如果你在分析程序时,反汇编时显示unknown的代码,或伪代码中显示unknown的代码,或跳转while、for等循环没有分析出来,不要惊讶。这些都需要大量的精力,需要大家共同完善

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员熊子峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值