re刷題第十天
0x00 easyre-153
這題無wp,別問我爲什麼沒有,我可能下了個假的題目
0x01 notsequence
int __cdecl main()
{
_DWORD *v0; // eax
signed int v2; // [esp+14h] [ebp-Ch]
_DWORD *v3; // [esp+1Ch] [ebp-4h]
memset(&unk_8049BE0, 0, 0x4000u);
puts("input raw_flag please:");
v3 = &unk_8049BE0;
do
{
v0 = v3;
++v3;
scanf("%d", v0);
}
while ( *(v3 - 1) != 0 );
v2 = sub_80486CD(&unk_8049BE0);
if ( v2 == -1 )
{
printf("check1 not pass");
system("pause");
}
if ( sub_8048783(&unk_8049BE0, v2) ^ 1 )
{
printf("check2 not pass!");
exit(0);
}
if ( v2 == 0x14 )
{
puts("Congratulations! fl4g is :\nRCTF{md5(/*what you input without space or \\n~*/)}");
exit(0);
}
return 0;
}
這題說實話,main的邏輯還是很好理清楚的,裏邊的邏輯就得想一會兒了
很明顯兩個check
,首先就是讓輸入一堆數據,以0爲輸入的結尾。其實就是輸入一個二十階的楊輝三角。第一個check
是楊輝三角每一層的和的驗證,加起來必須爲2的n次方,第二個check
是前十九層的第n個數的和加起來等於第二十層的第n+1
個數,這個性質沒注意到,這次學習了,上網找了個腳本稍微改了一下,就得到輸入的序列,去掉最後的0,md5過後就是flag
ps:看了下網上師傅們說的,這題存在多解
#-*- coding: utf-8 -*-
flag = []
def triangle():
N = [1]
while True:
yield N
N.append(0)
N = [N[i]+N[i-1] for i in range(len(N))]
def print_triangle(x):
a = 0
for t in triangle():
print(t)
global flag
flag = flag + t
a += 1
if a ==x:
break
print_triangle(20)
print flag
0x02 secret-galaxy-300
額。。。。又一個不知道考什麼知識點的題目
給了三個二進制程序,整體上都沒什麼算法可逆,大致來說三個一樣,沒辦法,動態跟一下唄,結果內存中發現flag
。。又一個不知道考什麼知識點的題目
給了三個二進制程序,整體上都沒什麼算法可逆,大致來說三個一樣,沒辦法,動態跟一下唄,結果內存中發現flag