-
-
[原创]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编辑
,原因:
赞赏
他的文章
看原图