[ACTF新生赛2020]Splendid_MineCraft 题解
Some men just want to watch the world burn. ——The Dark Knight
1.查壳
- 32bit
- 无壳
2.静态分析
看一下流程图,右上角有一个独立的分支,可能是SMC
进入主函数看一下
这一段是将输入的字符串根据“_”分割
strtok函数可以参考这一篇博客
将输入的字符串按照
根据+5 +9差4个,再加上+9强转为WORD,得到每组字符是4+2=6个
根据这段代码推导出的flag的格式是ACTF{xxxxxx_xxxxxx_xxxxxx}
然后我们发现37行之后的看不懂了
我们可以静态调试一下这一部分
3.动态调试
在37行这里下断点,哪里不懂断哪里
操作看视频(打开bilibili更清晰):
这段代码对数据进行了操作,修改为真正的程序代码
修改过程为将esi+edi+0x1F指向的地址的数据取出,与0x72异或后放回,然后edi增加,循环151次
从寄存器窗口记录一下ESI的值,编写脚本需要
我们可以回到静态调试界面,按照上面所说的过程编写脚本模拟修改过程
Shift+F2打开脚本
脚本为
运行脚本
将修改后的数据选中,按下C分析为代码
再次选中,按下P分析为函数
此过程视频如下:
4.分析代码爆破第一段flag
分析破解刚才分析出来的函数,传入这个函数的参数就是flag的第一部分xxxxxx
根据这个函数编写wp
flag的第一部分是yOu0y*
5. 找到第三段flag
继续看代码,下面的循环可能是又一个SMC,应该和flag的第二部分有关
这时候我们先找一找别的线索,不急看第二部分的SMC
shift+F12查看字符串
发现一个可疑的字符串,跟进看一看
发现有个strcmp,这是比较简单的比较
所以第三部分的flag是5mcsM<
现在我们已知两部分flag
ACTF{yOu0y*_xxxxxx_5mcsM<}
6.使用OD动态调试——找出第二段加密函数
byte_CF5018[i] ^= v9;
SMC之后会进去跳转到汇编
__asm { jmp eax }
我们使用OD(Ollydbg)在jmp eax处下断点
跟汇编找出第三段flag的加密函数
找加密函数的视频:
分析加密函数
关键加密函数分析如图注释所示
然后我们跟随jmp跳转到下图
我们加密函数处理过的结果在bl,和cl进行了比较
说明cl就是加密之后的flag第二部分
查看一下cl的值
cl的值就是上图的六个值
我们根据加密过程编写脚本爆破
knowo3
flag{yOu0y*_knowo3_5mcsM<}
- 点赞
- 收藏
- 关注作者
评论(0)