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
在这里插入图片描述

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