南邮CTF逆向题第五道maze解题思路
2017-12-24 09:48
666 查看
如题
先百度一下名字 万一有收获呢 猜测可能考到迷宫算法
依旧是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}
先百度一下名字 万一有收获呢 猜测可能考到迷宫算法
依旧是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}
相关文章推荐
- 南邮CTF逆向题第二道ReadAsm2解题思路
- 南邮CTF逆向题第三道Py交易解题思路
- 南邮CTF逆向题第一道Hello,RE!解题思路
- WHCTF 2017 逆向题 CRACKME、BABYRE、EASYHOOK 的解题思路
- 南邮CTF逆向题第六道WxyV2解题思路
- 170706 逆向-南邮CTF平台(1-3)
- CrackME 2011 # 2 逆向练习解题思路
- 南邮ctf逆向最后一题
- 南邮ctf训练平台逆向试题wp
- 170707 逆向-南邮CTF逆向(WxyVM1)
- 西普ctf解题思路——《貌似有点难》
- 170818 逆向-南邮CTF(WxyVM2)
- 西普ctf解题思路-——《Fobidden》
- 看雪CTF 2017 第六题设计思路和解题思路
- 南邮CTF逆向题第四道WxyVM解题思路
- bugkuCTF平台逆向题第五道love题解
- [转]面试中遇到递归算法题别慌--常见递归算法题的解题思路
- [LeetCode] 3Sum 解题思路
- C#的解题思路(1):不重复随机数的产生问题
- 第七届蓝桥杯大赛个人赛省赛(软件类 C语言b组)真题 (个人解题思路)