首页
社区
课程
招聘
[原创]MysteriousLetter2解题writeup
发表于: 2019-6-10 22:44 5874

[原创]MysteriousLetter2解题writeup

2019-6-10 22:44
5874

这道题目主要考察异常处理机制,题目刚发布的时候出现多解,我现在分析的是作者修复后的。

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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 29
活跃值: (91)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
关于程序异常处理算是讲的比较清楚的了。
2019-7-26 16:45
0
雪    币: 3677
活跃值: (3081)
能力值: ( LV8,RANK:147 )
在线值:
发帖
回帖
粉丝
3
hk有缘人 关于程序异常处理算是讲的比较清楚的了。
2019-8-3 18:03
0
游客
登录 | 注册 方可回帖
返回
//