逆向分析mfc程序

1.查看版本

2.运行程序看看

目的是点亮确定按扭 思路很多(直改exe文件 字符串搜索等)这里用api下断分析
可以看出是vc2013 那就下点击断点 思路找特征码(与版本相关)
2013 按扭事件

特征码
VS2013 Debug 静态编译
CALL DWORD PTR SS:[EBP-0x8]
VS2013 Release 版静态编译
CALL DWORD PTR SS:[EBP+0x14]

直接载入od搜特征码


先运行程序
然后全部下断 然后一个个试去掉没用的

开始分析
点击第一个

步入发现对称
最开始

最后

可以确定是
UpdateData(TRUE)
UpdateData(FALSE)
中间的代码很定是用户实现找其中的call应该就是解密的
果然有个跳转与call

到这里应该想到按扭上的数字保存在哪
这里哪个才是

应该是类的首地址加偏移不行就一个个进去看看对比
通过下面可以看出ecx为this指针 它又给eax


同时想下 成员变量很定离首地址很远 猜eax+0xe4

数据窗口跟随果然是一段初始化为0的地址

找到了数据那就一个按扭一个按扭去试看有什么变化

通过分析

后面是什么还是不怎么清析
那就进
UpdateData(TRUE)
UpdateData(FALSE)之间的call看看
前面条件先nop

步入

发现一些可疑数据
一个个用数据窗口跟随看看

发现就是后面那一段的数据
分析结果
从那开始的数据必须是 011010101

再回到外面 这里的意思是总和必须等于9(每点一点加上按扭上的数)

再分析 内存 前面一段是每个按的数据 后面一段是按第一次为1第二次又变为0 再加上前面说的总和必须为9 也就是说所有按扭都必须按一次
那答案就出来了 有的按俩次(0)有的按一次(1)
分析正确

转载于:https://blog.51cto.com/haidragon/2119196

你可能感兴趣的:(逆向分析mfc程序)