实验吧逆向工程-defcamp

逆向的题目真的好难啊,发现很多逆向的题都没有几个人做出来,甚至没有人做出来,为了开始我的逆向生涯,还是先从简单题做起。
1、这次是一个bak文件,bak文件(参考百度百科https://baike.baidu.com/item/bak):
(1).bak是备份文件,为文件格式扩展名,这类文件一般在.bak前面加上应该有原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有的则是由原文件的后缀名和bak混合而成,如proteus的备份文件为.DBK。
(2)很多软件都将创建备份文件设置为软件的默认配置,尤其是很多的编程、绘图、设计软件,这样的好处是当源文件不小心被删掉或是由于软件自身的BUG而导致自动退出时,还可以在备份文件的基础上继续编辑
(3)一般来讲 .bak文件可以通过直接重命名把bak替换成该文件的格式就可以恢复此文件并且正常打开了
2、kali下尝试运行,首先还是赋权限:

实验吧逆向工程-defcamp_第1张图片

3、竟然真的能运行,让输入密码,随便输了一个,错误:

4、使用Ida反编译,果然也是个elf类型:
实验吧逆向工程-defcamp_第2张图片

5、找到main函数,使用view-Open subviews-Generate pesudocode(或按快捷键F5)生成伪代码:
实验吧逆向工程-defcamp_第3张图片

生成后:
实验吧逆向工程-defcamp_第4张图片

6、可以看出代码逻辑:

  for ( i = 1; i <= 10; ++i )
  {
    v3 = malloc(0x10uLL);
    *(_DWORD *)v3 = i;
    v3[4] = *(_DWORD *)v3 + 109;
    a3 = (char **)qword_601080;
    *((_QWORD *)v3 + 1) = qword_601080;
    qword_601080 = (__int64)v3;
  }

最后两句像极了链表,是的,应该是一个链表的插入操作,且为头插法。
注意这里,qword_601080始终指向链表的头,且第五位开始存取序号+109,前面几位存取序号

 printf("Enter the password: ", a2, a3);
  if ( fgets(&s, 7, stdin) )
  {
    if ( sub_40074D(&s, 7LL) )
    {
      puts("Incorrect password!");
      result = 1LL;
    }
    else
    {
      puts("Nice!");
      result = 0LL;
    }
  }

看这个是只要满足sub_40074D(&s,7LL)==0即可。

7、转入sub_40074D函数(双击进入):

  for ( j = 0; j <= 5; ++j )
  {
    if ( *((_DWORD *)&v6 + j) != *(&v9 + j) )
      return 1LL;
  }
  return 0LL;
}

首先要满足返回0,必须使 j从0到5满足:

*((_DWORD *)&v6 + j) == *(&v9 + j)

即v6和v9前六位相同。

8、v9和后面五位分别为527256(v9v10v11v12v13v14):

  v6 = 0LL;
  v7 = 0LL;
  v8 = 0LL;
  v9 = 5;
  v10 = 2;
  v11 = 7;
  v12 = 2;
  v13 = 5;
  v14 = 6;

9、则要使v6也为527256(v6为int64类型):因为v6每次赋的为v4的值,v4每次为0,则要想使赋值,v4赋值的v5的值,满足if条件的即为v5后面每一位与a1相同,而注意的是v5的恰好是链表的地址,且为加109的,因此分别为114、111、116、111、114、115,转换为ASCII码:rotors

  for ( i = 0; i <= 5; ++i )
  {
    v5 = qword_601080;
    v4 = 0;
    while ( v5 )
    {
      if ( *(_BYTE *)(v5 + 4) == *(_BYTE *)(i + a1) )
      {
        v4 = *(_DWORD *)v5;
        break;
      }
      v5 = *(_QWORD *)(v5 + 8);
    }
    *((_DWORD *)&v6 + i) = v4;
  }

10、可以试一下,也可以直接提交flag啦(不要带冒号)。


实验吧逆向工程-defcamp_第5张图片

你可能感兴趣的:(实验吧逆向工程-defcamp)