GKCTF2020_re_Check_1n|BabyDriver
Check_1n 第一题运行程序,提示输入开机密码输入错误会提示密码错误,去IDA搜索字符串得到密码HelloWord
然后开机后运行 打砖块 程序即可得到flag下载的文件运行一下,感觉出题人有点秀,这个题让我们输开机密码,把exe放到IDE里面找有没有flag,果然有假的flag,那我们试试按照程序的意思去找密码,对于我这种不会RE的选手来说,只能查看字符串,然后把像字符串的挨个试个遍,发现HelloWorld可以
选择flag发现没啥用,那我们随便玩一个打砖块试试,等到游戏自己结束就出flag了啦
切换程序的时候用箭头上下左右,回车启动,
BabyDriver 搜索字符串发现有一串类似迷宫的字符串
迷宫字符串长度是225,刚开始以为是1515的,分析了下代码发现是1614的,,
可以写程序画出迷宫来,然后就是按键的问题了,,,因为是sys文件,所以按键应该是键盘扫描码而不是ASCII码
在线键盘扫描码查询
下移是0x25也就是K
右移是0x26也就是L
#include <stdio.h>
unsigned char maze = {
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x6F, 0x2E, 0x2A, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2E, 0x2A,
0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2E, 0x2A, 0x2E, 0x2A, 0x2A,
0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2E, 0x2A, 0x2E, 0x2A, 0x2A,
0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2E, 0x2A, 0x2E, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2E, 0x2E, 0x2A,
0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A,
0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A,
0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2E, 0x2A,
0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A,
0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x23, 0x2A, 0x2A,
0x2A, 0x2A, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x00
};
int main(void)
{
int i, j, x, y;
for (i = 0; i < 16; i++)
{
for (j = 0; j < 14; j++)
{
switch (maze)
{
case 0x2a:
printf("□");
break;
case '.':
printf("■");
break;
case 'o':
printf("☆");
x = i * 16 + j;
break;
case '#':
y = i * 16 + j;
printf("★");
break;
}
}
putchar('\n');
}
while (x != y)
{
if (maze == '.' || maze == '#')
{
x += 16;
putchar('K');
}
else if (maze == '.' || maze == '#')
{
x += 1;
putchar('L');
}
}
return 0;
}
然后进行md5加密,即可得到flag
页:
[1]