逆向MFC程序

1 MFC执行流程

1.1 环境支持

  • vs 2017
  • afxwin.h,afxcdialogex.h

1.2 分析

​ 在 vs 调试窗口中 有一个“反汇编窗口”,同样也可以下断点,步过步入等。

则可以汇编层可以详细的 步过/步入 每一个 详细的步骤—得以知道详细的系统/库的API调用、获取栈回溯情况等等

1.3 实践探索

1.3.1 创建一个MFC程序

主要重写CWinApp::InitInstance() 和 自定义个一个对话框类(以实现一个简单界面)

注意: 对话框资源文件我没列出来,因为只有一个对话框和一个按钮点击

我的Demo如下:

  • 自定义程序入口
//CMyWinApp.cpp
#include "mywinapp.h"
#include"wndDlg.h"

myWinapp App;
myWinapp::myWinapp(){}
myWinapp::~myWinapp(){}
BEGIN_MESSAGE_MAP(myWinapp,CWinApp)
END_MESSAGE_MAP()
BOOL myWinapp::InitInstance()
{
	wndDlg * TWND = new wndDlg;
	m_pMainWnd = (CDialog*)TWND;
	TWND->DoModal();
	CWinApp::InitInstance();
	return 0;
}

  • 自定义对话框
// wndDlg.cpp: 实现文件
//

#include "stdafx.h"
#include "wndDlg.h"
#include "afxdialogex.h"
#include"resource.h"

// wndDlg 对话框
IMPLEMENT_DYNAMIC(wndDlg, CDialogEx)
wndDlg::wndDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG1, pParent){}
wndDlg::~wndDlg(){}
void wndDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(wndDlg, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON1, &wndDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
// wndDlg 消息处理程序
void wndDlg::OnBnClickedButton1()
{
	MessageBox("hello Leibso-HUANGHAI/黄海");
}

1.3.2 下关键断点并调试

比如这儿 我想探索关键函数 InitInstance()的位置

  • 1.关键断点

    在这里插入图片描述

    注意: DoModal()是模态对话框,当你断这儿的时候F10,只有当退出的时候才会步过

  • 2.调出反汇编窗口

    在这里插入图片描述

  • 3.查看调用堆栈窗口

    在这里插入图片描述

    解析: 很清晰的看出MFC程序的调用顺序是WinMain()–>AfxWinMain()–>InitInstance()

  • 结束了吗?

    并没有。。

1.4 转向MFC库源文件中观测

  • 继续上面的步骤在反汇编窗口键入F10
  • 直到走出这个InitInstance()
  • 我们会发现来到了一片绿洲-- 库代码
  • 鼠标中键往上滑动发现当前的源文件 路径+名
  • 这就是我们的 MFC库源文件之一

在这里插入图片描述

  • 注意: 这里的路径有可能不是你正确的路径(因为可能重复卸载安装了VS的缘故)

    • 解决:使用文件搜索工具 (我这里使用的是everything)-- 搜索处此名为winmain.cpp

      在这里插入图片描述

      这个标记的就是了

  • 然后用VS打开这个文件,你会发现你的断点就在上面清晰的源代码就出来了

在这里插入图片描述

2 逆向

我们看了源代码后可以发现如此复杂的想从入口函数一步一步往后找有点浪费精力

所以–使用特征码

2.1 特征码的选择(比如我这里还是想找到InitInstance())

那在刚才的反汇编窗口中找到关键汇编代码,行数越多越精确

注:关键代码 不能包含地址之类的这样可能会出问题,因为可能会有重定位之类数据不确定的问题

如图:

在这里插入图片描述

那:

这几条语句就可以作为我们的特征码

mov         eax,dword ptr [edx]  
mov         esi,esp  
mov         ecx,dword ptr [eax+58h]  
mov         dword ptr [ebp-24h],ecx  
mov         edi,esp  
mov         ecx,dword ptr [ebp-24h] 

2.2 使用调试工具(OD) 搜索特侦码

使用OD动态调试 搜索以下代码序列,就可以得到这个函数的地方了

如图:

在这里插入图片描述

之后就可以下断点 动态分析了

咐语

其他平台程序的逆向也可以使用这种方法:搭建平台–>写一个Demo程序–>熟悉流程–>找目标特征码

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信PC版逆向获取小程序源码是指通过逆向工程的方法,对微信PC版进行分析和研究,以获取小程序的源码。 首先,逆向工程是对软件进行反向分析的过程,通过分析软件的二进制代码、反编译和调试,以获取软件的内部实现和源码。 要逆向获取小程序源码,我们首先需要通过一些工具和技术手段对微信PC版进行逆向分析。这可能涉及使用反编译工具、调试器和逆向工程技术等。 通过逆向分析微信PC版,我们可以获取到小程序在PC端的运行环境和相关的源码信息。可以分析小程序的请求和响应数据,了解小程序的工作原理以及和微信PC版的交互过程。 然后,我们可以对获取到的源码进行分析和研究。通过阅读源码,可以了解小程序的业务逻辑、界面设计、数据交互等方面的实现细节。这有助于我们更深入地理解小程序的运行机制,并为后续的开发和优化提供参考。 需要注意的是,逆向获取小程序源码存在法律和道德风险。对于商业小程序来说,它们的源码是开发者的知识产权,未经许可获取源码可能侵犯了知识产权法。此外,在逆向工程过程中,可能会对软件的安全性进行攻击或者破坏,这也是不被允许的行为。 因此,在合法和道德的前提下,如果我们需要获取小程序的源码,应该通过与开发者合作、遵守开发者协议等方式来获取。这样不仅可以保证合法性和安全性,还能与开发者建立良好的合作关系,促进行业的良性发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值