大家好,我是胡一米。這期視頻是關于2016年看雪CTF第7題解題資料。
視頻是基于其他大佬文字Writeup錄制的,所以在視頻操作之前就已知了該題中的各種坑,如反調(diào)試等,所以不再演示踩坑過程。
第7題主要參考了作者本文的敘述、HighHand、風間仁的Writeup,鏈接如下:
風間仁:
https://bbs.pediy.com/thread-213966.htm
HighHand:
https://bbs.pediy.com/thread-213981.htm
在本期中,主要討論2個問題。這2個問題可能與最終的Key沒有太大的聯(lián)系,但題目中既然出現(xiàn)了,還是說一說。此2個問題分別是:
a. 通過SEH異常執(zhí)行核心代碼
b. 兩人取數(shù)和最大,遞歸搜索
結(jié)合其他大佬的分析過程,可以直接定位到關鍵點。.
類似的都是通過SEH觸發(fā)異常來執(zhí)行關鍵代碼
Patch的方法在29題有說到。
通過動態(tài)調(diào)試,理解程序的遞歸含義。
(圖片請看pdf,這里不弄格式了)
博弈問題
941rPYOWMF3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C69BKAKAKAKAKAKAKAKAKAKAKAKAKK8AE614
141622224F224C48C6n522GM6M2822C82822221F2eII2AUGig264w284ICIl1242M262G226S2Icq6A6o442
使用visual studio,編譯作者的注冊機,即可得到正確的注冊碼。
至于出現(xiàn)多解的原因有2個:其一是在驗證key時,由一個博弈問題變成取數(shù)問題,這就導致了更多種的取法;其二是取法(flag)到key的轉(zhuǎn)換方法不唯一。具體敘述如下:
以下所說的flag都是風間仁writeup中的flag,具體含義是:為1則代表被取了;為0代表沒有被取走。
風間仁通過遞歸搜索,得到了某一個flag。總共的flag有330個,但是風間仁只取了其中的某一個。
但是這一個flag轉(zhuǎn)換成key的方法不是唯一的。
如風間仁轉(zhuǎn)化為:
941rPYOWMF3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C69BKAKAKAKAKAKAKAKAKAKAKAKAKK8AE614。
其實也可以轉(zhuǎn)換為:
941rPaOUMF3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C69BKAKAKAKAKAKAKAKAKAKAKAKAKK8AE614。
這兩個key,都對應同一個flag,也就是對應同一個遞歸解法。換句話說:flag和key是一對多的關系。這就導致了每個flag可能對應多個key。進一步地,又存在多個flag,這使得key的數(shù)量會更多。在這么大范圍的key中選擇一個第10位為F的,同樣存在很多。
0101
1010101010101010101010101010101
010110101010101010101010101010101010101010101010101010101
題目很好。