De1CTF_2020_wp_re_parser

0x00 前言

先膜一下小组里的大师傅们,tql。

出题的师傅感觉也好nb。

先写re的其中的 parser .

0x01 parser

  这是一个用c++写的解释器,在动调的时候,很难看,后来看NuLL的wp说“⽤了⼀种新的动态绑定⽅式”。回头看看

先放到ida里看一眼,找到输入输入位置:

输入后加上“\n”,进行tokenize,进入sub_35F0:

很简单可以看出  ‘\n’ --->9  ‘+’ --->5  ‘_’ --->6  ‘{’ --->2  ‘}’ --->3  ‘De1CTF’ --->1  其他 --->4 (每个都如上所示)

并且可以看出是递归下降分析法这一编译原理

https://blog.csdn.net/starter_____/article/details/89857531原理图如下:

这样我们就去看每个符号的加密:

1. ”+“ -->5

这个在sub_4E70的位置

跟一下sub_6E8B:

这块是AEShttps://blog.csdn.net/tianxiawuzhei/article/details/43051839

2. ‘_’ --->6

顺着上面的sub_507E走,可以找到 ”_“

同理找出对应的加密:des

3.字符串:

这块是判断flag格式是否是De1CTF{xxxx}的,跟进sub_7349,再进入sub_75A2

发现对于字符串的加密是RC4 

https://bbs.pediy.com/thread-256733.htm

4.顺序

我们需要来猜一下递归的顺序:

再调试的时候发现

aes的密钥是 De1CTF0A0A0A...(10个0A)

des的密钥是De1CTF\x02\x02

rc4的密钥是De1CTF

这明显有padding,所以最后一次加密是aes

0B827A9E002E076DE2D84CACB123BC1EB08EBEC1A454E0F550C65D37C58C7DAF2D4827342D3B13D9730F25C17689198B

10101010101010101010101010101010

以padding为突破口,通过反复猜测

最后是这样的顺序:

得到flag: De1CTF{h3ll0+w0rld_l3x3r+4nd_p4r53r}

0x02 总结

解释器的题熟悉了一下(递归下降分析法),这几种加密可以再熟悉一下。

猜你喜欢

转载自blog.csdn.net/m0_46362499/article/details/105952893