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.youkuaiyun.com/starter_____/article/details/89857531原理图如下:
这样我们就去看每个符号的加密:
1. ”+“ -->5
这个在sub_4E70的位置
跟一下sub_6E8B:
这块是AEShttps://blog.youkuaiyun.com/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 总结
解释器的题熟悉了一下(递归下降分析法),这几种加密可以再熟悉一下。