首页 > 技术文章 > crackme160--(3)

distanceblog 2016-01-11 20:08 原文

今天直接做第三个,因为第二个毫无难度所以就不放上来了。先上效果图

 

目的的消掉这个对话框并找个序列号

 

点击OK之后弹出如图对话框,确定后程序结束。首先直接搜索字符串发现并未发现如图字符,我猜测是字符开始以加密的形式存在,后在调用对话框时解密,但是发现调用msgbox仅两处,用来显示序列号正确或者错误的两处,而且在messgebox处下断也并未到达。于是我在exitprocess处下断,发现程序退出跳转到此处,观察栈结构,也没有发现什么有价值的东西(可能是水平太低)。。。 。直接追踪到事件处理函数的入口代码处。这点我通过mfcspy并未找到。而是在.text段下访问断点然后触发点击而得到。没办法了。一步步F8下去。发现在调用一个名为__vbar8str处出现该对话框,思索不到什么原因。突然就想到:异常异常异常!!!重要的事说三遍。我居然一直没有注意过对话框显示的内容。。。应该是程序开始安装了一个异常链,发现异常则直接退出程序。而又在此处故意触发异常达到退出的目的。好了。现在有几种解决办法 

1.在运行时修改传递给vbar8str的参数不会触发异常,但是由于对这个函数不太了解 ,尝试了下将传入字符串转成一个ascii码字符串但是失败。

2.不调用这个函数。将参数传入以及调用处修改为NOP。由于涉及到栈平衡,所以得一步步调试。

3.直接在调用函数之前跳转到比较验证字符串处。栈平衡难把握

  总体思路就是这样。今天到此为止

推荐阅读