iqiqiya的博客

热爱网络安全的小白

南邮CTF逆向题第五道maze解题思路

如题

先百度一下名字 万一有收获呢 猜测可能考到迷宫算法

依旧是ELF

直接载入IDA

我一般习惯先shift+f12看下字符串

再看看main

__int64 __fastcall main(__int64 a1,char**a2,char**a3)

{

constchar*v3;// rsi

signed __int64 v4;// rbx

signedint v5;// eax

char v6;// bp

char v7;// al

constchar*v8;// rdi

__int64 v10;// [rsp+0h] [rbp-28h]

 

v10 =0LL;

puts("Input flag:");

scanf("%s",&s1,0LL);//限制获取输入字符串长度为24且必须开头5个字符为"nctf{" 最后一个字符位"}"

if( strlen(&s1)!=24||(v3 ="nctf{", strncmp(&s1,"nctf{",5uLL))||*(&byte_6010BF +24)!=125)

{

LABEL_22:

puts("Wrong flag!");

exit(-1);

}

v4 =5LL;

if( strlen(&s1)-1>5)

{

while(1)

{

v5 =*(&s1 + v4);

v6 =0;

if( v5 >78)

{

v5 =(unsigned __int8)v5;

if((unsigned __int8)v5 ==79)

{

v7 = sub_400650((char*)&v10 +4, v3);

goto LABEL_14;

}

if( v5 ==111)

{

v7 = sub_400660((char*)&v10 +4, v3);

goto LABEL_14;

}

}

else

{

v5 =(unsigned __int8)v5;

if((unsigned __int8)v5 ==46)

{

v7 = sub_400670(&v10, v3);

goto LABEL_14;

}

if( v5 ==48)

{

v7 = sub_400680(&v10, v3);

LABEL_14:

v6 = v7;

goto LABEL_15;

}

}

LABEL_15:

v3 =(constchar*)HIDWORD(v10);

if(!(unsigned __int8)sub_400690(asc_601060, HIDWORD(v10),(unsignedint)v10))

goto LABEL_22;

if(++v4 >= strlen(&s1)-1)

{

if( v6 )

break;

LABEL_20:

v8 ="Wrong flag!";

goto LABEL_21;

}

}

}

if( asc_601060[8*(signedint)v10 + SHIDWORD(v10)]!=35)

goto LABEL_20;

v8 ="Congratulations!";

LABEL_21:

puts(v8);

return0LL;

}

 

 

下边全是goto语句 我们直接将视图切为图表(Graph view)

按r可以发现

根据这四个字符"." ,"0","o" , "O"分别跳到不同的位置进行操作

 

我们再看下400690在搞什么鬼

想到是和601060有关

猜测是判断上面601060数组的第edi个值是否等于20h或23h,如果不等于就跳到

400822输出"wrong flag"

 

 

那么我们现在要做的就是看下601060这个地址 直接切到HEX界面

 

发现恰好为一个八阶方阵,而且数值只有3个,分别为20h,2Ah以及23h

那么函数400690的意思不就是判断当前的位置是否是从(0,0)走到(4,4),最初的四个跳转应该就是对应着上下左右四个方向

20 20 2A 2A 2A 2A 2A 2A 

 

2A 20 20 20 2A 20 20 2A

 

2A 2A 2A 20 2A 20 2A 2A 

 

2A 2A 20 20 2A 20 2A 2A

 

2A 20 20 2A 23 20 20 2A 

 

2A 2A 20 2A 2A 2A 20 2A

 

2A 2A 20 20 20 20 20 2A 

 

2A 2A 2A 2A 2A 2A 2A 2A

那么上下左右分别对应字符"." "0" "O" "o"

路径为右下右右下下左下下下右右右右上上左左

        o0oo00O000oooo..OO

还没完,记得要加上nctf{}

我们得到flag为nctf{o0oo00O000oooo..OO}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangshangbashaonian/article/details/78883611
个人分类: ------南邮CTF
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

南邮CTF逆向题第五道maze解题思路

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭