-
-
[原创]MysteriousLetter2解题writeup
-
发表于:
2019-6-10 22:44
5873
-
[原创]MysteriousLetter2解题writeup
这道题目主要考察异常处理机制,题目刚发布的时候出现多解,我现在分析的是作者修复后的。
1. 查壳,无壳的C++程序。
2. 直接载入OD,看到了异常处理需要的两个函数,SetUnhandledExceptionFilter和UnhandledExceptionFilter。
SetUnhandledExceptionFilter函数的唯一一个参数为异常处理函数指针。当程序发生异常时,且程序不处于调试模式(在VS或者其他调试器里运行)则首先调用该异常处理函数。因此,程序可以主动抛出一个异常来判断当前程序是否正在被调试
3. 我们现在给SetUnhandledExceptionFilter和UnhandledExceptionFilter这两个函数设置断点,运行程序。断在了SetUnhandledExceptionFilter的入口处。我们看下堆栈的情况,正如你所看到的异常处理函数入口地址为00401C8E,我们在命令栏中输入BP 00401C8E给该函数设置断点。
4. 异常处理函数前面已经设置过了,所以我们将对SetUnhandledExceptionFilter设置的断点删除掉,运行程序,找到获取输入的函数,输入序列号401353(篇幅有限,不演示踩坑,这里直接输入的是真码)。
5. 输入的长度必须小于7位才可以继续运行
6. 限定真码的后三位为353
7. 限定前三位的ascii十六进制之和为0x95,也就是十进制的149,我一次做的时候猜的是212353和230353。
8. 把输入的字符串直接转换成整数放到esi
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)