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 總結
解釋器的題熟悉了一下(遞歸下降分析法),這幾種加密可以再熟悉一下。