记:破解MFC小程序01

8 篇文章 0 订阅
5 篇文章 0 订阅

在很久很久以前,有几个加密过的小程序
然后,他们被我破解了….

这里写图片描述

之前我已经破解了第一个加密程序了,现在我们来破解第二个

“01”打开之后是这样
这里写图片描述

好像有一种开保险柜的既视感…

运行程序后我们发现每次点击这三个按钮,按钮上的数字就会相应的加1

这里写图片描述

根据程序运行的结果来看,我们猜测应该的确是要输入正确的密码,才可以点亮下面的确定按钮

那我们就来看代码

这里写图片描述

找了一圈没有找到我们熟悉的main函数…额….对啊!这是MFC程序找个球的main函数。

所以,MFC程序怎么搞呢?我们可以进去winmain函数中去找自己需要的那段代码,只不过这样比较麻烦,有太多的编译器生成的代码。比较简单的方法就是找特征。

什么是找特征呢?特征就是一个函数特有的一串opcode码,好的特征可以直接帮我们定位到想要找的那段代码。

那么怎么提取特征呢?这样就需要用到工具去查看这个程序使用的是什么连接器啦,

         编译器            连接器
         VC2003           7.0, 7.1
         VS2005           8.0
         VS2008           9.0
         VS2010           10.0
         VS2012           11.0 
         VS2013           12.0
         VS2015           14.0
         VS2017           14.1 

这是节本的一些连接器对应的编译器版本,这里只介绍Visual Studio编译器,我们为什么要知道这些呢?

因为编译器每更新一次,他对代码的优化就会有所不同,生成的opcode也肯定不同,如果我们要通过特征码来找切入点的话,我们就需要知道他的编译器的版本,再通过这个编译器写出相同的代码,通过查看编译器中的反汇编来提取特征码。

但是我们不太可能直接知道这款软件是用什么编译器写的,所以我们可以通过查看连接器的方法来推断出他是用的是什么编译器写的程序。

知道了如何提取特征码后我们就需要推测出我们要找的关键代码处使用了什么函数。

这个程序既然是通过按按钮来增加按钮的数字,那我们就找他的按钮消息处理函数就好

这里写图片描述

通过工具我们看到这个程序的连接器版本是12.0,那么他的编译器使用的就是VS 2013,我们就要通过VS来编写一个MFC程序来查看按钮消息的处理函数

这里写图片描述

                 敏感部位要打码,不然容易暴露身份~

我们看到按钮消息处理函数的反汇编了,但是有一个问题我们要想一下,如果我们直接使用这个OnBnClickdOK()这个函数的opcode码合适么?

这个函数使我们自己写的,所以每个程序中的OnBnClickdOK()这个函数的opcode码肯定是不相同的,那我们就要通过相同的特征来找到这段代码怎么办呢?

这时我们应该从这个函数开始往上回溯,看看是哪个函数调用的这个OnBnClickdOK()函数,如果是系统调用的,那么我们可以取哪里提取特征码

我们往上一层找,找到一个AfxDispatchCmdMsg 函数,这个函数是用来分发消息的,那么我们没有调用过,肯定就是系统调用的啦,所以可以从这里找特征码,点击进去查看反汇编

这里写图片描述

我们看到这里,图中用红线圈住的都是可以找特征码的地方,我们就提取前三行吧,把opcode提取出来 “8B F4 8B 4D 08 FF 55 F8”

然后我们就可以拿着这个钥匙去OD里面找我们想要找的那串代码了

复制那串特征码,在OD中查找二进制字符串,就会跳到对应的位置,Ctrl + L 就会跳到下一个特征码相同的地方,我们就一个一个的看

这里写图片描述

有没有觉得用红线圈出来的这块代码和我们提取特征码的那三行代码很像~

对!我们找到的就是那三行代码。(我有三行祖传的代码给你看一下!)那么这个CALL中肯定就是OnBnClickdOK()函数函数啦~进去看一下

这里写图片描述

看到这些就看到了胜利的曙光,就这么四个CALL,我们挨个进去看一下,找到哪里是更改程序的地方,就找到密码了。

这里写图片描述

然后我们在第二个CALL中看到了这么一串代码。
好像是[ebp - 0x8]这个地址每次和0xC比较完之后,下一次就会是[ebp + 0x8 + 4]这个地址和0x8比较,在下一次就是[ebp + 0x8 + 4 + 4]这个地址在和0x5比较,这里有三个值在比较,感觉比较可疑~

我们通过修改寄存器满不足他跳转的条件来显示不满足所有条件之后的结果

这里写图片描述

好像是被点亮了!!!

那我们回来看一下那三个数值 0xC 0x8 0x5

这里写图片描述

成功点亮了!
所以密码就是 12, 8 和 5

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值