[WP]BUUCTF-Reverse-基礎題(1-12)
1、easyre
查詢基本資訊
載入 IDA
2、reverse1
核心部分就是將 Str2 中的 o 替換成了 0,再與 Str1(我們輸入的字串) 進行比對
查詢 Str2 的值
得到 flag
3、reverse2
與上題類似,也是將字元替換一下就能得到 flag
將 {hacking_for_fun} 中的 i 和 r 替換為 1 即可
4、內涵的軟體
執行程式
直接檢視字串
5、新年快樂
32 位程式,但有 UPX 殼
脫殼
載入 IDA 分析 main 函式
6、guessgame
載入 IDA,檢視字串即可
7、helloword
一道安卓逆向,利用 JEB 即可
8、xor
64 位程式
直接載入 IDA,將輸入的字串逐位異或後與 global 進行比對
查詢 global
寫出 EXP,執行得到 flag
1 glo = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, \ 2 0x40, 0x11, 0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, \ 3 0x70, 0x19, 0x46, 0x1F, 0x76, 0x22, 0x4D, 0x23, \ 4 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 0x47, 0x32, \ 5 0x4F] 6 flag = ''7 for i in range(len(glo)-1, 0, -1): 8 glo[i] ^= glo[i-1] 9 10 for i in glo: 11 flag += chr(i) 12 13 print(flag)
9、reverse3
修改棧指標後檢視 main 函式
查詢字串,其實看到這個字串表就可以大致知道是採用了 base64 加密或者是變種的 base64 加密
檢視 Str2 的值,為e3nifIH9b_C@n@dH
Dest 的值即為我們輸入的值,經過一個簡單的運算後與 Str2 進行對比
寫出 EXP ,執行得到 flag
1 import base64 2 a = 'e3nifIH9b_C@n@dH' 3 b = '' 4 for i in range(len(a)): 5 value = ord(a[i]) - i 6 b += chr(value) 7 print(b) 8 print(base64.b64decode(b).decode('utf-8'))
10、不一樣的 flag
32 位程式
載入 IDA 中,我們可以看到四個選項:上下左右,其實可以大致猜測這是一道迷宮題,# 即為終點
檢視字串,我們發現一個字串
寫出路徑即為 flag
11、SimpleRev
64 位程式
直接載入 IDA 檢視反編譯後的程式碼,進入主要的 Decry 函式。
最後進行比對的兩個變數為 text,str2。
根據流程可以編寫 EXP,執行得到 flag。需要注意一下是小端儲存,src、v10 需要反向後再進行拼接。
1 #出現的變數 2 key1 = 'ADSFK' 3 key3 = 'kills' 4 src = 'SLCDN' 5 v10 = 'wodah' 6 7 #LODWORD(v0) = join(key3, &v10) 8 v0 = key3 9 for i in range(len(v10)-1, -1, -1): 10 v0 += v10[i] 11 print(v0) 12 #strcat(key, src) 13 key = key1 14 for i in range(len(src)-1, -1, -1): 15 key += src[i] 16 17 #第一個迴圈:key大寫轉化為小寫 18 tmp = '' 19 for i in key: 20 value = ord(i) + 32 21 tmp += chr(value) 22 key = tmp 23 24 #第二個迴圈,逆向求出flag 25 str2 = text = v0 26 flag = '' 27 for i in range(len(str2)): 28 value1 = ord(str2[i]) 29 value1 -= 97 30 31 value2 = -ord(key[i]) 32 value2 += 97 33 value2 -= 39 34 35 value = value1 - value2 36 while True: 37 if value > ord('Z'): value -= 26 38 elif value < ord('A'): value += 26 39 else: break 40 flag += chr(value) 41 42 print(flag)
12、Java逆向解密
將 class 檔案直接拖入 jd-gui 中,程式是將我們輸入的字串經過 Encrypt 中的第一個迴圈運算後,與 KEY 進行比對
需要注意到加法的優先順序比異或要高,寫出 EXP
1 key = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65] 2 for i in key: 3 value = i 4 value ^= 0x20 5 value -= 64 6 print(chr(value), end='')