re刷題第十天

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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章