signin
根据常量倒着推即可:
data = [0x10, 0x8, 0x15, 0x0a, 0x13, 4, 0x11, 0x3, 0x6, 0x5, 0x2b, 0x1d, 0x0d, 0x1e, 0x11, 0x1d, 0x1b, 0x0f, 0x9, 0x6f]
ikun = "ikun\x00"
s = [""] * 20
for i in range(20):
s[i] = chr((data[i] - 1) ^ ord(ikun[i % 4]))
print(chr(int(s[i])),end="")
flag{hello_reverse}
maze
__int64 __fastcall main(int a1, char **a2, char **a3)
{
int step; // eax
int n; // [rsp+8h] [rbp-78h]
int dir; // [rsp+Ch] [rbp-74h]
__int64 way[12]; // [rsp+10h] [rbp-70h] BYREF
int v8; // [rsp+70h] [rbp-10h]
char v9; // [rsp+74h] [rbp-Ch]
unsigned __int64 v10; // [rsp+78h] [rbp-8h]
v10 = __readfsqword(0x28u);
memset(way, 0, sizeof(way));
v8 = 0;
v9 = 0;
n = 0;
puts("Welcome to my game!");
puts("I'll give my flag if you win the game.");
__isoc99_scanf("%100s", way);
do
{
step = n++;
dir = *((char *)way + step);
if ( !*((_BYTE *)way + step) )
break;
maze[24 * y + x] = '4';
if ( dir == 'w' )
{
--y;
}
else
{
if ( dir > 'w' )
break;
if ( dir == 's' )
{
++y;
}
else
{
if ( dir > 's' )
break;
if ( dir == 'a' )
{
--x;
}
else
{
if ( dir != 'd' )
break;
++x;
}
}
}
x += x < 0 ? 24 : 0;
if ( x > 23 )
x = 24 - x;
y += y < 0 ? 9 : 0;
if ( y > 8 )
y = 9 - y;
if ( maze[24 * y + x] == '3' )
{
printf("You win! flag is flag{%s}.\n", (const char *)way);
return 0LL;
}
}
while ( maze[24 * y + x] == '2' );
puts("You failed...");
return 0LL;
}
观察题目,得知是一个迷宫,只能走2,并且走到边界会自动走到另一边,不能走回头路。初始在(1,1),需要走到3的位置。
迷宫是:
111111111112121121112121
222212222212221222212221
111211112212121212111112
222222222211111112222122
111111121212222211112111
221222221112111222212222
121211111212121111211111
122222222212122221222131
121111111112121121112121
手动推理得到最后得到flag
Welcome to my game!
I'll give my flag if you win the game.
ddssddddssaaaassaawwaaaaawwaaawwawwwaaasssaawwwwwwddddsdddssddsssddwww
You win! flag is flag{ddssddddssaaaassaawwaaaaawwaaawwawwwaaasssaawwwwwwddddsdddssddsssddwww}.
puzzle
简单看了下代码发现是9*9的数独,初始数独是
000307000
060000020
100500000
305000400
000080060
000000000
020006000
000400500
000010300
找了个网站解决数独,得到
发现输入的时候是数字的ASCII+49变成字母,最后得到flag:
Please input your solve:cijdghbfefgeijbhcdbdhfcegijdjfghcebihecbidjgfibgjefcdhjcdhfgiebghbedifjceficbjdhg
You win! flag is flag{cijdghbfefgeijbhcdbdhfcegijdjfghcebihecbidjgfibgjefcdhjcdhfgiebghbedifjceficbjdhg}.