看雪·深信服 2021 KCTF 春季賽 | 第十題設計思路及解析

Editor發表於2021-05-31

看雪·深信服 2021 KCTF 春季賽 | 第十題設計思路及解析


跟隨武林少俠“飛停”,一路闖蕩江湖,終於來到終點。

在這場終局之戰中,有近1700人圍觀,歷時3天,只有一支戰隊——金左手,挑戰成功!

究竟是什麼樣的賽題難倒了大家呢?


看雪·深信服 2021 KCTF 春季賽 | 第十題設計思路及解析


出題團隊簡介簡介:

看雪·深信服 2021 KCTF 春季賽 | 第十題設計思路及解析


大龍貓超大隻,兔斯基毛茸茸。兔斯基保護協會光桿司令大龍貓是一隻軟體保護和逆向愛好者龍貓,愛做難題也愛出難題的格子衫程式設計師。團隊價值觀是,友誼第一,趣味至上!大龍貓會繼續萌力創作,給大家帶來更多有趣的賽題,用快樂和理性致敬大自然!


專家點評

金左手 戰隊隊長 ccfer 點評:


程式核心是一個數字邏輯電路的矩陣運算,難點在於對輸入三元組做了個非線性對映,並對對映關係做了邏輯膨脹化處理,使得程式碼量大幅增加,分析路徑變長。解題時需要正確識別出每個邏輯單元,對兩種功能單元做出邏輯化簡,輸入三元組的逆對映可以透過真值表解決,然後從三元組對映輸出端來看就是個簡單的線性變換了,解方程組即可。


賽題設計思路

本題採用規則二,且不涉及VM。

 

在本文中,
+表示異或,提到“加”說的也是異或。
“乘”表示“與”,AB表示A乘以B,即A&B.
!表示非,有最高的運算優先順序(僅低於取下標)
^表示冪。
*表示矩陣乘法時,矩陣元素的加法是異或

 

SOP (sum of products),這個大一計算機知識是本題的核心。


考慮邏輯閘RGX(Reversible Gate X,這是本題自己命名的,基於經典的邏輯閘RUG)。ABC是輸入,PQR是輸出,RGX是這樣的:(就是RUG的PQ互換)
P=AB+!A!C
Q=AB+BC+CA
R=B!C+!BC
這個門的描述是SOP形式(non-canonical SOP),從ABC到PQR是雙射。

 

Q=AB+BC+CA=(ABC + AB!C) + (ABC + !ABC) + (ABC+A!BC) = ABC + !ABC + A!BC+ AB!C


即 Q=non-cannonical SOP = 展開 = 合併同類項 = cannonical SOP,這個過程很重要。

 

Q=ABC + !ABC + A!BC+ AB!C,每項Product對應Q=1時的一個解,依次對應四個解是ABC={111,011,101,110},如果Q=0則解集是其補集。


根據P和R的值求得相應解集,解集求交即為解。對於可逆電路,有且只有唯一解。


有能儲存的下的cannonical SOP的時候,求解極為簡單。只有 non-canonical SOP 時,除一些特殊情況外,求解過程等價於求cannonical SOP。


對於非局域化可逆電路,cannonical SOP和真值表都是同等量級的,暴力方法在工程上不可用,這就是本題的難度原理。

 

可以用cannonical SOP求解PGX的逆運算,求得的逆運算InvRGX為:
P=!A!B!C+AB!C+BC
Q=B!C+AC
R=B!C+!AC
當然,這樣小規模,也可以用真值表求得

 

當輸入很多的時候,展開的複雜度是很高的,對於“不可局域化”(不能拆分成兩個門的並聯)且“Product因子數很少”的時候,


從non-cannonical SOP 到 cannonical SOP 的計算量很大。


當“Product因子數只有一個的時候”,SOP等價於矩陣乘法,求解簡單。

 

本題透過兩層計算構建“輸入很多,為126”且“非局域化”(可以局域化但需要技巧)且“Product因子數很少”的SOP,這種構造使得對SOP的逆向難度適中。

 

本題採用先並聯3輸入3輸出RGX門,再乘以可逆矩陣M,獲取這樣的126輸入126輸出大規模SOP。

 

RGX是SOP形式,矩陣乘法是SOP形式(矩陣乘法的P只有一個因子)


兩層SOP的計算結果是一層SOP,多少層SOP的計算結果都是一層SOP


先RGX並聯再矩陣乘法,得到一層non-cannonical SOP

 

這是本題核心模組,叫K吧(Kernel)
C=K(P) = M*RGX(P)

 

逆運算:
P=InvK(C)=InvRGX(InvM*C)
其中InvM是M的逆矩陣,RGX函式是RGX門的大規模並聯,InvRGX是InvRGX門的大規模並聯。

 

InvRGX上文已經求得了,現在說說如何求得InvM,也就是如何逆向出M,求逆矩陣誰都會嘛。

 

對於某一位輸出output,如果對應的矩陣的M的行為全1,那麼,
output=P[0]+Q[0]+R[0]+P[1]+Q[1]+R[1]+...+P[41]+Q[41]+R[41]=3341項Products,其中P[i]Q[i]R[i]是第i組RGX的PQR輸出。


根據程式中Products的缺失情況,可以得到M的這一行哪些元素為0。


對每一個輸出位做這個判斷,直接得出M的每一行。

 

如果我把順序打亂,那麼會更不明顯,更不容易還原,但我沒有這樣做。不想讓題在這個步驟太難。

 

另外,SOP的問題還有一個,就是有些對於某些輸出數值,特解特別好找。


所以,我要讓破解者真正逆向出演算法,或者至少找到十幾個解,以避免因為碰到特解好找而太過簡單。

 

方法就是,我用Kernel代替了AES演算法的AddRoundKey過程!


這個AES除了AddRoundKey被替換之外,完全沒有改其它,邊界明顯。

 

1、非局域化
2、合適的Products因子數
3、不是求單一特解
這三個條件的題目難度的必要條件,算一個難點。而且有些簡單。

 

增加點料,兩個難點更適合。
我要掩飾一下SOP
AB=!A<B
A+B=!(!A!B)


用這個把一部分“與”和“異或”變成了“<”參與的運算,這樣就行了!


這個變化不是看起來那麼雕蟲小技,而是利用了編譯器不最佳化時,對<運算的處理。


編譯結果沒有複雜多少,膨脹比例等同於真實的編碼比例,但是,乍一看,長得像VM。利用長得像,哈哈哈哈!本題就是這樣簡潔!

 

為了拉票,我介紹一下本題的潛力:


本題,我本質上實現了一個大規模NC1電路,而這個電路,可以用MBP轉化為矩陣計算,再加上隨機化,逆向難度大幅增加,是一個可以實用的軟體保護方案(缺點是程式碼大)

 

祝大家玩的開心!



賽題解析

本賽題解析由看雪論壇 ccfer 給出:


看雪·深信服 2021 KCTF 春季賽 | 第十題設計思路及解析

完整解析文章看這裡:https://bbs.pediy.com/thread-267878.htm



往期解析


1. 看雪·深信服 2021 KCTF 春季賽 | 第二題設計思路及解析

2. 看雪·深信服 2021 KCTF 春季賽 | 第三題設計思路及解析

3. 看雪·深信服 2021 KCTF 春季賽 | 第四題設計思路及解析

4. 看雪·深信服 2021 KCTF 春季賽 | 第五題設計思路及解析

5. 看雪·深信服 2021 KCTF 春季賽 | 第六題設計思路及解析

6. 看雪·深信服 2021 KCTF 春季賽 | 第七題設計思路及解析

7. 看雪·深信服 2021 KCTF 春季賽 | 第八題設計思路及解析

8. 看雪·深信服 2021 KCTF 春季賽 | 第九題設計思路及解析



主辦方


看雪CTF(簡稱KCTF)是圈內知名度最高的技術競技之一,從原CrackMe攻防大賽中發展而來,採取線上PK的方式,規則設定嚴格周全,題目涵蓋Windows、Android、iOS、Pwn、智慧裝置、Web等眾多領域。


看雪CTF比賽歷史悠久、影響廣泛。自2007年以來,看雪已經舉辦十多個比賽,與包括金山、360、騰訊、阿里等在內的各大公司共同合作舉辦賽事。比賽吸引了國內一大批安全人士的廣泛關注,歷年來CTF中人才輩出,匯聚了來自國內眾多安全人才,高手對決,精彩異常,成為安全圈的一次比賽盛宴,突出了看雪論壇複合型人才多的優勢,成為企業挑選人才的重要途徑,在社會安全事業發展中產生了巨大的影響力。


合作伙伴


圖片


深信服科技股份有限公司成立於2000年,是一家專注於企業級安全、雲端計算及基礎架構的產品和服務供應商,致力於讓使用者的IT更簡單、更安全、更有價值。目前深信服在全球設有50餘個分支機構,員工規模超過7000名。



看雪·深信服 2021 KCTF 春季賽 | 第十題設計思路及解析

公眾號ID:ikanxue

官方微博:看雪安全

商務合作:wsc@kanxue.com


相關文章