大家好,我是胡一米。这期视频是关于2016年看雪CTF第7题解题资料。
视频是基于其他大佬文字Writeup录制的,所以在视频操作之前就已知了该题中的各种坑,如反调试等,所以不再演示踩坑过程。
第7题主要参考了作者本文的叙述、HighHand、风间仁的Writeup,链接如下:
风间仁:
https://bbs.pediy.com/thread-213966.htm
HighHand:
https://bbs.pediy.com/thread-213981.htm
在本期中,主要讨论2个问题。这2个问题可能与最终的Key没有太大的联系,但题目中既然出现了,还是说一说。此2个问题分别是:
a. 通过SEH异常执行核心代码
b. 两人取数和最大,递归搜索
结合其他大佬的分析过程,可以直接定位到关键点。.
类似的都是通过SEH触发异常来执行关键代码
Patch的方法在29题有说到。
通过动态调试,理解程序的递归含义。
(图片请看pdf,这里不弄格式了)
博弈问题
941rPYOWMF3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C69BKAKAKAKAKAKAKAKAKAKAKAKAKK8AE614
141622224F224C48C6n522GM6M2822C82822221F2eII2AUGig264w284ICIl1242M262G226S2Icq6A6o442
使用visual studio,编译作者的注册机,即可得到正确的注册码。
至于出现多解的原因有2个:其一是在验证key时,由一个博弈问题变成取数问题,这就导致了更多种的取法;其二是取法(flag)到key的转换方法不唯一。具体叙述如下:
以下所说的flag都是风间仁writeup中的flag,具体含义是:为1则代表被取了;为0代表没有被取走。
风间仁通过递归搜索,得到了某一个flag。总共的flag有330个,但是风间仁只取了其中的某一个。
但是这一个flag转换成key的方法不是唯一的。
如风间仁转化为:
941rPYOWMF3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C69BKAKAKAKAKAKAKAKAKAKAKAKAKK8AE614。
其实也可以转换为:
941rPaOUMF3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C69BKAKAKAKAKAKAKAKAKAKAKAKAKK8AE614。
这两个key,都对应同一个flag,也就是对应同一个递归解法。换句话说:flag和key是一对多的关系。这就导致了每个flag可能对应多个key。进一步地,又存在多个flag,这使得key的数量会更多。在这么大范围的key中选择一个第10位为F的,同样存在很多。
0101
1010101010101010101010101010101
010110101010101010101010101010101010101010101010101010101
题目很好。