看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

Editor發表於2017-06-29


今天是 6 月 7 號,高考第一天,首先祝福各位考生都能取得好成績。

看雪CTF 2017 第三題結束,第四題開始。

從第三題開始,比賽進入一個新階段,破解人數此時從第二題的 17 人降至 5 人,難度繼續增加。


看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路


為了應對比賽,很多小夥伴徹夜難眠,守在電腦前努力鑽研。下面的小夥伴還在公司呆了一宿,厲害了我的哥!

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路


比賽前十名再次進行了更迭,此時風間仁衝上第一位,hyabcd、HighHand 位列其後。


看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

目前整體前十名整體還沒有大的變動。


後面還有十一道題等著大家來挑戰,意味著還有十一次機會,大家加油!


接下來我們來看看第三題的點評與解析。


看雪評委 netwind 點評


作者的題目採用 VB P-Code 編譯,用 xor 加密部分 p-code,誘導靜態反編譯工具得到錯誤的演算法。同時針對偵錯程式做了一些反除錯措施。在演算法上採用數學方程組求解的演算法,可以透過工具 matlab 或自己分析出演算法原型求解。此題在反除錯和演算法方面給攻擊者設定了不少障礙,中間留有很多坑,某個細節不注意可能就會陷入長長的困境中。此題反響熱烈,讓攻擊選手欲罷不能。


看雪 CTF2017 愛琴海CrackMe設計說明


原創演算法題, 延續 CTF2016 的設計風格, 也可以理解為數學應用題, 花費了個把小時創作。 難度適中,有利於甄別攻擊者的除錯分析、邏輯推理、發散思維、數學功底, 篩選出高低排名。

採用 VB P-Code 編譯, 加密 rva: 8427h、 8441h、 8493h、 84CBh、 857Bh 位置的 P-Code,加密解密均採用 xor,誘導靜態反編譯工具得到錯誤的演算法,使攻擊者陷入“ 盜夢空間” 而無法自覺。 隱蔽檢測 beingdebugged、 rdtsc、WKTVBDebugger 並根據檢測結果靜默干擾 P-Code 解碼演算法和流程。修改 OEP RVA=0,使得某些除錯工具無法順利工作,並對 RVA=0 進行隱蔽檢測。設定堆疊段暫存器反除錯陷阱,迷惑攻擊者對入口 CALL 408E00 的單步跟蹤,一旦發現單步跟蹤則靜默進入程式,不對加密 P-Code 進行解碼。

上述反分析、反除錯都是手工使用 OD 彙編新增,順便手工對新增的彙編程式碼進行了簡單加花。

本作品使用的反分析、反除錯手段比較常見、適度。雖然反分析、反除錯可以使用更多的技巧, 但過猶不及,用得越多就越容易被攻擊者發現和拆解, 畢竟演算法才是本作品的靈魂。

要求攻擊者按十六進位制小寫格式輸入,總共 16 位, 8 位一組分別賦值給 x, y,參與計算,滿足驗證公式即註冊成功。 演算法概況如下:

初始條件
a = 1711722997
r = 373414231.362502
R = 874402299.931726

驗證公式:( 0

對於不同水平的攻擊者,可以預料到如下結果:

一、 無法分析出演算法, Game over。

二、 分析出演算法,但沒有看出演算法的真實用意, 不知道如何化簡去繁, Game over。

三、 分析出演算法,雖然不明白演算法用意,但對公式進行了化簡,推理出: y=2*r*R*(x+a)/(a*x-2*r*R),按此條件約束窮舉變數,則可以在幾分鐘內窮舉出結果。

四、 分析出演算法,弄明白題設的是海倫公式、 三角形內接圓半徑、三角形外接圓半徑驗證公式, 給出了三角形長邊 a,內接圓半徑r,外接圓半徑 R, 要求攻擊者找到三角形另外兩個邊長 x,y, 則根據尤拉公式 OI^2=R^2-2*R*r 計算出內外圓心距離 OI,透過CATIA/PROE/UG/CAD 等引數化作圖法迅速找到答案( 題設標準解法)

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

本題很好玩, 答案: 5e9a3f183e37f900 您答對了麼? ^_^

作者簡介


愛琴海,汽車底盤工程師,從事汽車底盤系統設計開發和管理工作多年,浙江台州人,80後心懷夢想、不忘初心的青年。業餘愛好: 逆向分析、吉他彈唱、程式設計、羽毛球、登山、旅遊、經濟、散步等。

2001年在路邊攤上看到了本電腦雜誌,從此對計算機語言和逆向產生興趣,會逆向破解的人就像武俠世界裡頭的俠客行走江湖、快意恩仇,令人心生嚮往。此後自學彙編,VB,C,微控制器等,早期網際網路能找到的破解教程不是很多,windows98主流的年代,也沒有更多的朋友交流學習。2006年加入了看雪論壇,這是個氛圍非常棒的平臺,可以向各位前輩、高手學習知識和經驗,大家都很有熱情。此後與一些志同道合的朋友成立了Sea Cracking Group(SCG)組織,擔任過OCN版主。後來OCN、SCG逐漸淡出江湖,成員也都各有家庭和忙於事業,很少活動在世人視野中。後來因為年輕氣盛,不懂得保護自己,破解了一款國產軟體招來麻煩,從此銷聲匿跡了一些年。因為不是計算機相關專業出身,也不是從事計算機相關工作,純粹是業餘愛好,深知學無止境、一山還有一山高,今後希望與各位朋友學習交流,共同成長。80後痴狂的青春——無悔!

下面選取 hyabcd 的破解分析


這道題主要是要發現演算法裡的坑。

拿到程式發現是 VB 的程式,使用 VB Decompiler 進行反編譯,發現演算法非常清晰,如下圖所示。

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

這是一個二元方程組,global_84 和 global_92 是輸入內容的左邊八位和右邊八位,並且兩者都大於 0,global_84 大於 global_92。這兩個數是方程組的兩個未知數。global_76,global104 和 global100 都是已知的,其他全域性變數都為 0。令global84=a,global92=b,global76=c,global104=N1,global100=N2。可以將 VB Decompiler 反編譯得出的方程組簡化如下。

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

透過 matlab 進行計算,發現求出來的值都是複數,也就是說不存在實數解,踩坑了。看來反編譯出來的程式碼應該有問題,看 VB Decompiler 中反彙編的 p-code,發現和反編譯的程式碼可以正確對應,所以問題不在這,這時就得看看是不是在將 p-code 位元組反彙編成p-code時出現了問題。

程式無法用 OD 開啟,不過可以使用 OD 附加程式分析。我們從反編譯的程式碼中可以發現他使用了 Left 和 Right 函式去獲取輸入的左邊八位和右邊八位。因此可以直接對這兩個函式下斷。找到這些函式有個捷徑,我們可以在 VB 虛擬機器的入口上方發現一些jmp指令,從這些指令可以直接找到 Left 函式的地址,下斷即可。

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

由於這個程式主要是進行方程的求解,因此VB虛擬機器執行的過程十分清晰。在 VB 虛擬機器中,esi 存放 p-code 的 eip,我們在VB虛擬機器中單步除錯時,可以觀察 esi 暫存器的變化,然後和 VB Decompiler 反彙編出的 p-code 的地址對應起來,以確定當前的 p-code 指令對應的是什麼操作。比如如下圖所示。

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

當前 esi 暫存器的值是 4083fa,說明當前 p-code 的 eip 是 4083fa。VB 虛擬機器會將4083fa中的 p-code 位元組碼傳遞給 al,並作為虛表的偏移去找下一個要執行位置。從VB Decompiler 中可以看到 4083fa 位置的 p-code 指令是 MulR8,也就是乘法,那麼VB虛擬機器透過 p-code 位元組碼找到虛表偏移後進入的地方就是來執行乘法這樣一個操作。這個地方就是上圖 jmp 指令跳轉到的地方,進入後可以發現確實是執行乘法。

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

如此一來就可以根據 p-code 和對應的操作去確定是哪個地方出現問題,由於程式中多是加減乘除次方這樣的計算,對應的操作都是浮點運算操作,可以很清晰地跟蹤它的計算流程。

前面的流程都沒有問題,直到 p-code 到達 408427 時,從 VB Decompiler 反彙編的 p-code 中可以得出這是個 AddR8 指令。但是我們發現該位置的指令位元組碼是 0xAF。

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

在前面的跟蹤,我們發現AddR8指令位元組碼是0xAB,這裡0xAF被VB Decompiler認為是AddR8指令,可見VB Decompiler反彙編p-code時出了問題,跟進jmp可以發現這其實是個SubR4指令,是個減法,而VB Decompiler認為他是加法。(根據愛琴海的設計文章,可以知道在程式中對這些指令進行了修改,由於我是用OD附加除錯,除錯是在反除錯內容之後進行的,僥倖繞過了這個坑)

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

繼續跟蹤可以發現流程還有其他幾個地方存在這個問題,出現的位置就是在方程組第一個方程中a^4,b^4,c^4前的符號,這裡應該是減號,所以第一個方程應該是

0.5*(-a^4-b^4-c^4+2*a^2*b^2+2*b^2*c^2+2*a^2*c^2)^0.5/(a+b+c)=N1

那麼方程組就是

看雪.WiFi萬能鑰匙 CTF 2017第三題 點評及解題思路

(PS:第二個式子是海倫公式,N2是三角形外接圓半徑,冥冥之中感覺這個方程應該是求解三角形三邊之類的。。)

使用matlab計算,可以得出a=1587167000,b=1043855616。由於a是左邊八位,b是右邊八位,輸入要求十六進位制,因此最終答案為5e9a3f183e37f900。



最後感謝 WiFi 萬能鑰匙安全應急響應中心的贊助支援,

接下來的比賽大家一定要使出洪荒之力哦!↖(^ω^)↗

比心


贊助商

上海連尚網路科技有限公司成立於 2013 年,是一家專注於提供免費上網和內容服務的移動網際網路企業。連尚網路自主研發的核心產品 WiFi 萬能鑰匙,以分享經濟的模式,透過雲端計算和大資料技術,利用熱點主人分享的閒置WiFi資源,為使用者提供免費、穩定、安全的上網服務,以幫助更多的人上網,找到屬於他們的機會,改變自己的命運。


相關文章