AliCTF2014題目解析之

2022-08-30 17:57:12 字數 2012 閱讀 7075

先執行程式看效果

點選按鈕直接崩潰,同時由於程式放到32位的xp虛擬機器中不能執行,判斷是64位程式。

根據提示程式本身就是有問題的,所以直接上ida pro,發現是用upx加了殼的:

使用upx脫殼看看

成功!執行ch3_d.exe看看效果

這效果。。。直接不能執行了,脫殼之前還可以彈出視窗來著!再從新脫一次殼,還這樣,好吧,it's a trap!

用windbg分析一下崩潰的原因:把windbg註冊為及時偵錯程式,再執行ch3_d.exe

崩潰的位址為

00000001`3fc81dcd 85c0 test eax,eax

ida pro中檢視導航到該位址,發現載入的基址不對(往下看就知道原因了),在windbg中用lm命令看一下模組情況

基址為13fc80000,在ida pro中rebase後,檢視崩潰點

改完登錄檔,重啟,執行程式,成功!激動地去點【find the key】,崩~~,windbg彈出來了,又崩潰了!什麼情況?沒辦法,繼續分析,看一下崩潰點附近的情況

載入decryptdll.dll,匯入rasdecrypt函式,decryptdll.dll在哪?還能在哪,估計就在ch3_d.exe的"肚子裡了",用resource hacker看一眼

果然有個dll,匯出來重新命名一下,再執行,我看你還崩!?

額,好吧,果斷的。。。windbg又彈出來了,不費話了,看看什麼情況,

崩在decryptdll的rsadecrypt函式裡了,用ida載入decryptdll看一眼(注意基址),

是崩在memcpy函式了,根據64位程式的呼叫約定,memcpy的三個引數依次為rcx(dst),rdx(src),r8(len),使用windbg跟蹤到call memcpy

暫存器情況如圖,rcx=0,rdx=21dc56,r8=15,可見是目的位址rcx的問題,在ida中跟蹤rcx,最跟蹤到

decryptdll!rsadecrypt的r8引數,r8應該是個有效的位址。

看一眼ch3_d.exe呼叫decryptdll!rsadecrypt時的引數情況

好吧r8=0,怪不得呢,看原始碼是故意用xor給清空了

那麼只要在呼叫decryptdll!rsadecrypt之前把r8改成乙個可寫的位址就行了,在該位址得到如下字串

但是彈出的對話方塊中沒有任何內容,但是看大神說這就是flag,就不繼續分析了。

k

*&>(

da30_q

-(pkd23@

,

來自為知筆記(wiz)

leetCode題目解析

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原...

CourseGrading 題目解析

問題描述 若某元素在一組數中比它大元素越多,則說明這個數在這組數的值就越小。現請你統計出陣列中的每個元素,數一數該陣列有多少個元素比它大。輸入形式 第一行 n 第二行 n個整數 輸出形式 n個整數,各數這之間有1個空格 樣例輸入 5 4 6 12 16 8 樣例輸出 4 3 1 0 2個人答案 in...

2023年華為上機題目

華為2014校園招聘的機試題目和2013年的完全一樣。一 題目描述 60分 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。比如字串 abacacde 過濾結果為 abcde 要求實現函式 void stringfilter...