首页
社区
课程
招聘
[原创]kctf2021 第二题 南冥神功
2021-5-27 10:00 8311

[原创]kctf2021 第二题 南冥神功

2021-5-27 10:00
8311

flag:GJ0V4LA4VKEVQZSVCNGJ00N

限制输入大小<0x30,输入字符在[0-9][A-Z]36个,在字符串中找到字符位置并处理成2个0-5的数,定义方向

走过的路径由0变为1

写个dfs搜索路径

#include<stdio.h>
int maze[]={
0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01,
0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00
};
int y=0;
int x=0;
char alpha[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char path[50]={0};
//GJ0V4LA4VKEVQZSVCNGJ00N
int main(){
    dfs(0,0);
}
 
int rwtopos(int y,int x){
    return x*10+y;
}
 
int dfs(int pos,int step){
    if(step>=46){
        for(int a=0;a<46;a++){
            printf("%d ",path[a]);
        }
        printf("\n");
        for(int b=0;b<23;b++){
            int a1= (5-b-path[b*2+0]+666666)%6;
            int a2= (path[b*2+1]-b+666666)%6;
            printf("%c",alpha[a1+a2*6]);
        }
        printf("\n");
        //return 0;
    }
    for(int i=0;i<6;i++){
        int y=pos%10;
        int x=pos/10;
        int dir=i;
        switch(dir){
            case 0:{
                y+=((x--&1)==0);
                break;
            }
            case 1:{
                y++;
                break;
            }
            case 2:{
                y+=((x++&1)==0);
                break;
            }
            case 3:{
                y-=((x++&1)!=0); 
                break;
            }
            case 4:{
                y--;
                break;
            }
            case 5:{
                y-=((x--&1)!=0); 
                break;
            }
        }
        if(x>8||x<0||y>9||y<0){
            continue;
        }
        int newpos=rwtopos(y,x);
        if(maze[newpos]==1){
            continue;
        }
        maze[newpos]=1;
        path[step]=i;
        //printf("%d ",i);
        dfs(newpos,step+1);
        maze[newpos]=0;
    }
 
    return 0;
}



[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2021-5-27 10:30 被sharun编辑 ,原因:
收藏
点赞3
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回