nctf復現 re1

ytj00發表於2020-11-28

彩筆一個,還請大佬多多指正

這道題說簡單也不簡單,有點小難度,主要是他的程式碼混淆太噁心了

首先ida開啟,f12關鍵字,轉到main函式

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-XccwCUG3-1606498617853)(H:\火狐下載\nctf2020\1.png)]

底下wrong的地方進行判斷,把資料弄下來

a=[0xC6, 0x6A, 0xC0, 0x27, 0xEB, 0xCA, 0x65, 0x02, 0x61, 0xCA, 
  0x68, 0x27, 0x6B, 0xE2, 0xC0, 0xE0, 0x00, 0x80, 0x22, 0x27, 
  0xE1, 0xA1, 0x02, 0x27, 0x63, 0x4B, 0xA8, 0xE3]

然後倒著看,v2來自v16(sub_401880那個函式就是原地tp函式)

v16來自v15,v15來自v17,這裡來到關鍵函式

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-mdqKnniR-1606498617855)(H:\火狐下載\nctf2020\2.png)]

sub_401960這個函式應該是一吧v17給了v15(混淆太多,應該是這樣,大神勿噴)

然後看v17,sub_4014d0是個加密函式,引數分別是v9和v18,v18在上面有定義,r一下轉字串會發現v18=“nctf”(注意是小端儲存)

然後看v9,v9來自v13(sub_401AD0實現的就是普通的賦值),v13來自v14,sub_401B70如圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-dvcuPaVn-1606498617856)(H:\火狐下載\nctf2020\3.png)]

這裡只有標註的那個函式有意義,其他的都是些混淆,那麼就很明瞭了,v13就等於v14,v14就是輸入

之後是構造指令碼,把關鍵加密函式弄下來

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-V35c50ED-1606498617857)(H:\火狐下載\nctf2020\4.png)]

發現這加密太多了,不好逆向解,於是考慮到爆破

a=[0xC6, 0x6A, 0xC0, 0x27, 0xEB, 0xCA, 0x65, 0x02, 0x61, 0xCA, 
  0x68, 0x27, 0x6B, 0xE2, 0xC0, 0xE0, 0x00, 0x80, 0x22, 0x27, 
  0xE1, 0xA1, 0x02, 0x27, 0x63, 0x4B, 0xA8, 0xE3]
v18='nctf'


for i in range(len(a)):
    for j in range(0,255):
        a1=j
        a2=ord(v18[i%4])
        
        v2 = (~a2 | ~a1) & (~a2 | a1) & (a2 | a1) | (~a2 | ~a1) & (a2 | ~a1) & a2 & a1 | a2 & ~a1 | ~a2 & a1
        v2 = 0xff&((~(32 * v2) | ~(v2 >> 3)) & (~(32 * v2) | (v2 >> 3)) & (32 * v2 | (v2 >> 3)) | (~(32 * v2) | ~(v2 >> 3)) & (32 * v2 | ~(v2 >> 3)) & (32 * v2 | (v2 >> 3)))
        
        if(v2 == a[i]):
            print(chr(j),end='')
            break



值得注意的一點:[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-0XKvErPl-1606498617858)(H:\火狐下載\nctf2020\5.png)]

這裡需要與一個0xff,因為

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-o5h8tyoy-1606498617859)(H:\火狐下載\nctf2020\6.png)]

這裡定義v15的時候,v15是unsigned int型別,在32位程式裡佔4位元組,所以每個v2可能超出4位元組(實際上都超出了),需要與上一個0xff(可以這麼解釋吧…)

感想:相較於re2,這個混淆有點多,需要耐心去看,有些小細節的地方需要注意一下。

相關文章