由于生病一直没有写博客,在此补上
题目链接:
链接:https://pan.baidu.com/s/12jKBrLCVMHM-vx5qe-FBww
提取码:21bt
RE
game
unity游戏,我们可以先玩一下
游戏是控制一个白球吃分,全部吃掉一共能得到12分
题目是第13个数在哪,所以猜测需要改程序得到13分
由于unity是用C#开发,所以用dnspy
在Cheat Engine_Data\Managed文件夹中找到Assembly-CSharp.dll
这是程序的源码,用来存放C#工程
凭借经验找到的start()函数
这里是对游戏的初始化设置,我们将开始的分数改为12
编译完成之后看到
打开发现需要分数达到14以上才可以获得flag
现在保存
可以发现已经被替换了
再次打开游戏玩
可以看到初始分数已经变成了12
我们吃掉两分之后即可发现屏幕上出现了flag
flag是:ThEFLAGGGGGGG
really_CTF
UPX壳
kali脱壳
IDA打开,通过字符串搜索找到了关键函数
看样子是输入的字符串经过函数sub_401000
的处理之后和字符串NUCTF{I_am_flag}
比较
查看函数sub_401000
该程序算法:
获取输入的字符串a,将a[i]换成byte_402FF8[a[i]的ASCII码]
,再将处理后的a和NUCTF{I_am_flag}
比较,相等即为flag
查看byte_402FF8
00402FF8处的byte_402FF8没有显示数据,但是往下翻00403018处却有不同寻常的字符串
这其中的地址刚好差了0x20
由于ASCII码表中第一个可以显示出来的字符的值刚好是0x20
所以可以设想byte_402FF8的地址与实际数组有一些偏移
由于输入的可见字符最小下标就是空格的0x20,因此byte_402FF8这个地址实际上也是真正的表地址(0x403018)-0x20=0x402ff8
1 | table = '''~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! ''' |
flag是:PI[JX#U?=1?82=7!
(看起来奇奇怪怪哈~)
simple
IDA打开通过字符串发现特殊字符找到关键函数
time() 获取时间,很显然需要动态调试绕过
打开OD,搜素字符串
跟随过去,看到有三个跳转
用 nop 指令填冲三个跳转
直接运行,获得flag
flag是:flag{h4ppy520}
MISC
Least
使用 stegsolve 查看,这个题目名称很容易让人想到LSB
这里不知道为什么要用BGR,感觉遇到的这一类题目大多数不是RGB就是BGR,没有找到很好的参考资料,有懂得大佬麻烦指教一下~
保存之后foremost了一下
得到了一个压缩包
解压即可得到flag
flag是:flag{c6ed6d6318005debbca17c7b1d7096d8}