二木 王者

nu1L_2023招新题目

1、checkin

flag在平台上,直接复制粘贴提交flag即可。(当时刚刚开始的时候,满怀激动的打开了平台,直接毫不不拖泥带水的去看自己方向的题目,直到后面才发现还有签到题。)

2、re-checkin-rs

打开ida进行分析,按照惯性,搜索main函数,看主体代码,这次却发现打开main函数,并不是真正的mian函数,而是进行调用。

Untitled

找到这个进行操作的main函数

Untitled

在没有出现hint的时候,对这道题分析就非常的迷惑。

有三组数据,加起来一共有46个数据,这个就猜测就是我们的比较数据了,flag也应该有着46个数据。

Untitled

找到了输出的几处打印,但是就是没有找到加密算法。

Untitled

不愧是作为专注于安全的语言,rust进行逆向分析太头疼了,一个很简单的程序,逆向来基本上看不明白。原本也没有对于rust进行学习,对它的了解就仅仅停留在前辈们偶尔的讲解中听说。分析起来确实一头雾水。

hint

Untitled

进行动态调试,这里需要说到的是,这个程序还必须在ubuntu22.04上才能运行,我原先装的是ubuntu18‘04,重新装了一个ubuntu……….

搜索bcmp函数,然后查看交叉引用,发现这个bcmp调用还挺多的。不知道哪个是真正关键的bcmp函数,就直接挨着挨着把各个bcmp函数对应的地方都下 了断点(后来发现就只有第一bcmp才是,其他bcmp断了之后,程序会直接退出)

Untitled

调试之后发现,这个v24是我们的加密后的数据。对此,将这个程序当做黑盒进行处理,输入多组数据进行观察。

Untitled

46个a 46个1 12345678循环46个数

Untitled

Untitled

Untitled

起初归纳的是0, 1, 2, -1, 4, -3, -2, -5, 8, -8, -7, -10, -4, -12, -11, -14,然后进行循环16为一组。

发现这个规律仅仅适合46个1.后来找了很久也没有发现比较适合的普遍规律。试着试着,突然灵光一现,可能是异或勒。

直接一发入魂,解出flag

#include <stdio.h>
int main()
{
  int i;
  int a[48] = {0x7D, 0X20, 0X23, 0X22, 0X25, 0X24, 0X68, 0X72, 0X6E, 0X56, 0x79, 0x62, 0x53, 0x79, 0x7D, 0X7A,
               0X62, 0X4E, 0X7C, 0X7A, 0X7F, 0X76, 0X73, 0X7F, 0X7B, 0X46, 0X7F, 0X68, 0X6E, 0X78, 0X68, 0X7A,
               0x52, 0x7e, 0x5b, 0x50, 0x45, 0x40, 0x5d, 0x4c, 0x46, 0x5c, 0x5a, 0x48, 0x49, 0x5e};
  char d[15] = {"R~[PE@]LF\\ZHI^"};
  for (i = 0; i < 46; i++)
  {
    a[i] ^= i;
  }

  for (i = 0; i < 46; i++)
  {
    printf("%c", a[i]);
  }
  return 0;
}
}!!!!!nuf_si_tsur_nikcehc_esrever_ysae{knupces

解出之后,在python中写个脚本倒回来就行。

secpunk{easy_reverse_checkin_rust_is_fun!!!!!}

3、n0th1ngG0

看这个题目就猜测为go语言的逆向。放入ida中进行分析。

Untitled

通过分析,可以知道,经过一系列的操作,这个v17,v18(一起的)的数据,经过变化之后会形成一段固定的数据。

Untitled

这里v19,v20,v21,的数据之后,紧接着的是数据比较,按照题目的一般套路,这里就应该是我们的比较数据了。

Untitled

这下,main函数的流程大致分析完了,进入加密函数中。

跟入

Untitled

这个算法的特征很明显,多次出现了256,257.大致就能猜测出这个应该是rc4加密了。

Untitled

然后按照前面分析,这个就是我们rc4的key数据了。

Untitled

动态调试,提取key。看到这里,rc4八九不离十了。

Untitled

然后去找一个在线解密rc4的网站进行解密。

Untitled

得出flag

secpunk{N1_JUn10r_2023_1s_4w3s0m3}

总结:通过这次战队招新的题目,学到了很多,以前关于rust一点也不了解,这次感受到了一个专注于安全的语言的逆向难度,程序很简单,但是逆向真的复杂。对于黑盒解题也有了更深刻的了解。这次为期一天的招新比赛,总共详细做了三道re方向的题目,解出了两道。最后解的那道aes的题目,只做出了一半,把aes加密的数据解密出来,但是对于里面中的unicorn 中的代码一筹莫展。网上看雪论坛一个叫无名侠的博主写得有一篇对unicorn 写得很好的一篇文章,文章写了一个关于unicorn 调试器,整合起来进行调试,但是最后还是没能整出来。通过这次勒,收获还是蛮大的,再次深刻感觉做好一个re手还有很长很长的路。感谢师傅们精心出的题和很耐心的询问我们的做题进度,然后再调整题目难度,对于我们这些新手来说很友好,让我们不至于一道题也做不出来(哈哈哈,说白了就是太菜了)。

 评论