安洵杯线上re出题总结
第一次出题,也是第一次在后台可以看到解题情况和赛后wp,对这次的题目做个总结,怎么说呢,不太喜欢出一些很恶心的题,所以选了还算比较简单的考点,根据从一开始的解题情况,re部分的题还是有难度的,一直到下午1点多,都还只有一个re解,但到中期,做出sign_in的人开始多了起来,然后可能py也多了点(可能思路被传出去了吧),后来也被打爆了,至于virus,这道题关键就是key怎么求,但是我看了部分队伍的wp后,key的由来的没讲清楚,所以懂得都懂。。。个人认为两道题还行,大家都可以学到东西,至少不坐牢。
后面准备写篇010editor的破解,然后就复习了,再不复习就挂科了。。。寒假在来总结和学习其他的。
sign_in
考点:smc+花指令+数组内异或+W型的栅栏加密(比较难看)+魔改xxtea。
32位程序,无壳,打开发现是无法吃到食物的贪吃蛇游戏,ida打开,shift 12可以看到一些关键字符串,但是无法交叉引用。
定位到main函数,发现sub_40100F函数有花,点进去看看。
去花后,发现就是对0x401D10地址开始的后0x256个字节进行异或0x37解密。
所以两个方法,一是直接动调自解密,二是直接idapython还原静态分析,实际上动调会更好,确保堆栈平衡的情况下在0x401D10直接set ip动调分析,下面也给一个idapython还原脚本。
1 |
|
接下来分析0x401D10函数。
至于rand()%256的由来在这,也就是食物的判断,当食物等于rand()%256时才会进入输入flag的函数。
然后解题就先爆破256可能,得到food==77是正确的,然后进行W型栅栏解密,实际上看不懂也没关系,直接测试flag,得到变换顺序,只不过由于前面有个数组内异或,所以可能会造成多义性,所以动调时,跳过数组内异或就行。
1 |
|
解题脚本。
1 |
|
virus
考点:傀儡进程(pe映像切换),双线程异或,12宫密码部分矩阵加密,sm4。
ida打开,发现先是读取了一个资源,然后进行异或解密,后面就是傀儡进程的代码了,所以实际上,我们需要分析的是这个资源文件。
两种方法提取文件,ida动调dump出来,resource hacker软件提取出来,然后解密,得到flag.exe。
1 |
|
分析flag.exe
所以关键就是分析sm4的key是如何生成的,其实这个算法,是本人在一次ctf中遇到了一个12宫密码的题,当时觉得里面一个矩阵的变换比较有意思,然后就用代码实现了其中的一小部分。
视频:https://www.bilibili.com/video/BV1Ra411F7tv/?spm_id_from=333.788.recommend_more_video.-1里面7分钟左右的部分。
我看了各位师傅的wp后,发现很大一部分都是用的爆破,也在预期之内,因为4个字节确实可以爆破,但实际上这个算法的加密就是解密,可以实验一下,多循环几次,就可以得到我们输入的内容,最终可以得到初始key为’_shy’。
所以解题就比较简单了。得到sm4的key,然后用python库,或者直接网站解,或者直接,把密文反着弄,然后用exe中的sm4部分跑一下,都可解。
1 |
|