逆向分析mfc程序

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

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

直接载入od搜特征码
逆向分析mfc程序
逆向分析mfc程序
先运行程序
然后全部下断 然后一个个试去掉没用的
逆向分析mfc程序
开始分析
点击第一个
逆向分析mfc程序
步入发现对称
最开始
逆向分析mfc程序
最后
逆向分析mfc程序
可以确定是
UpdateData(TRUE)
UpdateData(FALSE)
中间的代码很定是用户实现找其中的call应该就是解密的
果然有个跳转与call
逆向分析mfc程序
到这里应该想到按扭上的数字保存在哪
这里哪个才是
逆向分析mfc程序
应该是类的首地址加偏移不行就一个个进去看看对比
通过下面可以看出ecx为this指针 它又给eax

逆向分析mfc程序
同时想下 成员变量很定离首地址很远 猜eax+0xe4
逆向分析mfc程序
数据窗口跟随果然是一段初始化为0的地址
逆向分析mfc程序
找到了数据那就一个按扭一个按扭去试看有什么变化
逆向分析mfc程序
通过分析
逆向分析mfc程序
后面是什么还是不怎么清析
那就进
UpdateData(TRUE)
UpdateData(FALSE)之间的call看看
前面条件先nop
逆向分析mfc程序
步入
逆向分析mfc程序
发现一些可疑数据
一个个用数据窗口跟随看看
逆向分析mfc程序
发现就是后面那一段的数据
分析结果
从那开始的数据必须是 011010101
逆向分析mfc程序

再回到外面 这里的意思是总和必须等于9(每点一点加上按扭上的数)
逆向分析mfc程序
再分析 内存 前面一段是每个按的数据 后面一段是按第一次为1第二次又变为0 再加上前面说的总和必须为9 也就是说所有按扭都必须按一次
那答案就出来了 有的按俩次(0)有的按一次(1)
分析正确
逆向分析mfc程序

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值