buuctf【HDCTF2019】-Maze
·
先查壳,发现有upx壳,用upx.exe脱壳
拖入ida

发现有明显花指令特征 jnz/jz short ----- +1

选中这一行,改成nop
因为jnz跳转到的是2E+1 的位置,把标红的位置按U重定义

把2F以后的按C转换成代码,再把剩下的汇编nop掉

nop掉后找到main函数按P重新定义为函数
然后再反汇编就可以看到伪代码了
int __cdecl main(int argc, const char **argv, const char **envp)
{
int i; // [esp+10h] [ebp-14h]
_BYTE v5[16]; // [esp+14h] [ebp-10h] BYREF
sub_401140(aGoThroughTheMa);
scanf("%14s", v5);
for ( i = 0; i <= 13; ++i )
{
switch ( v5[i] )
{
case 'a':
--*(_DWORD *)asc_408078;
break;
case 'd':
++*(_DWORD *)asc_408078;
break;
case 's':
--dword_40807C;
break;
case 'w':
++dword_40807C;
break;
default:
continue;
}
}
if ( *(_DWORD *)asc_408078 == 5 && dword_40807C == -4 )
{
sub_401140(aCongratulation);
sub_401140(aHereIsTheFlagF);
}
else
{
sub_401140(aTryAgain);
}
return 0;
}
双击进入(aHereIsTheFlagF)找到类似迷宫的东西

asc_408078 显示目前是7,0

按ida提取数据的格式把迷宫画出来,用python脚本
maze=[0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x20, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x20, 0x20, 0x20, 0x20, 0x2A, 0x2A,
0x2A, 0x2A, 0x20, 0x20, 0x20, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x20, 0x2A, 0x2A, 0x46, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x20, 0x20, 0x20, 0x20, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A]
for i in range(len(maze)):
if(i%10==9):
print(chr(maze[i]))
else:
print(chr(maze[i]),end="")

'+'的位置就是(7,0)
让它到F的位置就是下下左左左下左左下下右右右上
flag{ssaaasaassdddw}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)