您的位置:首页 > 其它

一个通过异常处理进行验证的crackme分析

2010-03-18 15:08 232 查看
crackme2

同样是看雪上的一个小crackme,同样是MFC做的,分析的思路:1.查看OnInit函数中是否有用户自定义的初始化代码。2.查看OnInitDialog函数中是否用用户自定义的初始化代码。3.查看确定按钮的响应函数都做了什么。OK,let's go!

1.加载程序,查看OnInit函数中是否有用户自定义代码。OnInit函数的位置可以用上篇文章中提到的找DoModal函数的方法,这个exe中竟然会调用两次DoModal,不管他,在相应的位置下断,F9运行,断下来的那一个就是咱们要找的那个,这段函数断下来是这个样子滴

代码

00401A63 /. 55 push ebp ; 这里是确定按钮的响应函数
00401A64 |. 8BEC mov ebp, esp
00401A66 |. 83EC 0C sub esp, 0C
00401A69 |. 53 push ebx
00401A6A |. 56 push esi
00401A6B |. 57 push edi
00401A6C |. 894D F4 mov dword ptr [ebp-C], ecx
00401A6F |. 6A 01 push 1
00401A71 |. 8B4D F4 mov ecx, dword ptr [ebp-C]
00401A74 |. E8 F3050000 call <jmp.&MFC42.#6334_CWnd::UpdateData>
00401A79 |. 8B45 F4 mov eax, dword ptr [ebp-C]
00401A7C |. 83C0 60 add eax, 60
00401A7F |. 50 push eax
00401A80 |. B9 78414000 mov ecx, 00404178
00401A85 |. E8 DC050000 call <jmp.&MFC42.#858_CString::operator=>
00401A8A |. 8B4D F4 mov ecx, dword ptr [ebp-C]
00401A8D |. 83C1 64 add ecx, 64
00401A90 |. 51 push ecx
00401A91 |. B9 74414000 mov ecx, 00404174
00401A96 |. E8 CB050000 call <jmp.&MFC42.#858_CString::operator=>
00401A9B |. C745 F8 64000>mov dword ptr [ebp-8], 64
00401AA2 |. F4 hlt ; 这里产生一个异常
00401AA3 |. 5F pop edi
00401AA4 |. 5E pop esi
00401AA5 |. 5B pop ebx
00401AA6 |. 8BE5 mov esp, ebp
00401AA8 |. 5D pop ebp
00401AA9 \. C3 retn

在401AA2处,一个很奇怪的命令,hlt,百度一下,表示的是处理器暂停指令,普通程序应该是不能调用这个指令的,因此这里肯定会产生一个异常,异常的响应函数上面已经给出了。

到此为止,整个crackme的流程基本分析完毕,分析的过程还是有缺憾的,没法跟踪异常处理响应函数中的程序,还要再继续研究一下  

补:(怎么样才能让异常处理部分程序执行起来?很简单,在hlt处把程序改成jmp 00401564就好了,囧,因为hlt以后的代码本来就不会被执行到)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐