查看: 157|回复: 0

[Reverse] GKCTF2020_re_Check_1n|BabyDriver

[复制链接]
发表于 2020-5-28 11:07:41 | 显示全部楼层 |阅读模式
                                                                                        Check_1n  第一题运行程序,提示输入开机密码
输入错误会提示密码错误,去IDA搜索字符串得到密码HelloWord
然后开机后运行 打砖块 程序即可得到flag下载的文件运行一下,感觉出题人有点秀,这个题让我们输开机密码,把exe放到IDE里面找有没有flag,果然有假的flag,那我们试试按照程序的意思去找密码,对于我这种不会RE的选手来说,只能查看字符串,然后把像字符串的挨个试个遍,发现HelloWorld可以

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

选择flag发现没啥用,那我们随便玩一个打砖块试试,等到游戏自己结束就出flag了啦
  切换程序的时候用箭头上下左右,回车启动,

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver


BabyDriver  搜索字符串发现有一串类似迷宫的字符串

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

迷宫字符串长度是225,刚开始以为是1515的,分析了下代码发现是1614的,,

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

可以写程序画出迷宫来,然后就是按键的问题了,,,因为是sys文件,所以按键应该是键盘扫描码而不是ASCII码
在线键盘扫描码查询
下移是0x25也就是K
右移是0x26也就是L
#include <stdio.h>
unsigned char maze[225] = {
    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[i * 16 + j])
            {
            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[x + 16] == '.' || maze[x + 16] == '#')
        {
            x += 16;
            putchar('K');
        }
        else if (maze[x + 1] == '.' || maze[x + 1] == '#')
        {
            x += 1;
            putchar('L');
        }
    }
    return 0;
}

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver

然后进行md5加密,即可得到flag

GKCTF2020_re_Check_1n|BabyDriver

GKCTF2020_re_Check_1n|BabyDriver



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表