GKCTF2020 逆向部分題的復現

逆向題目質量高,收穫很多

0x1.Check_1n

提示語句是中文,IDA7.0要能搜到中文字符串。
1
找到密碼錯誤的提示語句,查看引用。
2
拿到開機密碼:HelloWorld3
輸入HelloWorld,進入“桌面”,打開flag,會提示base64編碼的Why don’t you try the magic brick game,提示玩打磚塊遊戲,玩打磚塊遊戲死了就出flag
4
另一種思路,看到奇怪字符串2i9Q8AtFJTfL3ahU2XGuemEqZJ2ensozjg1EjPJwCHy4RY1Nyvn1ZE1bZe,查引用,發現base58的關鍵數組。base58解密。

0x2.Chelly’s ldentity

Chelly是啥,一查,哦,看來師傅們都是老二次元了(手動狗頭.jpg)。
C++程序,你來回點函數,發現有些變量可以變換,有提示作用。
函數多,邏輯理清楚,整體分三部分,輸入一部分,算法一部分,最後結果比較一部分。算法又可分成輸入校驗和算法兩部分。
1
原本的輸入std::cin後面的變量,但發現下面判斷長度的函數的變量不是input,而是instr,這樣分析input賦值給instr。
sub_4111BD()判斷長度:16字符。
sub_411721()是算法實現函數,點進去
2
找while循環,沒循環如何遍歷。有一個數組與輸入字符的每個值比較,如果這個數組裏的值小於輸入字符,把它們累加起來,輸入字符再和累加的值異或。關鍵是找這個數組,v9數組最早出現在sub_4116E0,點進去sub_4116E0
3
數組生成條件sub_411672,滿足條件就放到數組裏,進入sub_411672。
質數生成函數:生成0-128的質數.。4
算法搞清楚了,康康最後的結果比較函數。
5
賦值的那個數組就是結果數組。
腳本上場,登~ 登~ 登~(自帶音效)

def is_prime_num(num):    #判斷num是否爲質數
	for i in range(2,num):
		if num % i==0:
			return False
	return True
def create_table(n): #生成n之間的質數列表
	table=[]
	for num in range(2,n):
		if is_prime_num(num):			
			table.append(num)
	return table
def de_anwser(_key):
	table=create_table(128)
	flag=''
	for k in _key:
		for ch in range(128):
			count=0
			i=0
			while table[i]<ch:
				count+=table[i]
				i+=1
				tmp=ch^count
				if tmp==k:
					flag+=chr(ch)
	return flag
key=[438,1176,1089,377,377,1600,924,377,1610,924,637,639,376,566,836,830
]
flag=de_anwser(key)
print(flag)
#flag{Che11y_1s_EG0IST}

0x3.BabyDriver

sys的後綴,驅動題,找DriverEntry。鍵盤過濾驅動
1
標準的鍵盤過濾驅動
3
因爲是鍵盤過濾驅動,主要看下IRP讀操作的回調函數(第二個函數),也就是CompletionRoutine的位置
2
發現是個地圖題,就是上下左右由於鍵盤過濾驅動的影響,真實的值需要查表
maze類:1.內存中畫出一張地圖(地圖變換) 2.明確起點和終點 3.(四個字符對應上下左右)flag就是走出的路徑
地圖:
地圖
上下左右 IKJL在這裏插入圖片描述3
走出flag,LKKKLLKLKKKLLLKKKLLLLLL
輸入md5加密後就是flag

0x4.WannaReverse

勒索病毒,自帶換壁紙功能,拿到題還挺懵的,這就上勒索了(這麼強嗎_流汗.jpg)
拿到四個文件,主要逆向WannaReverse.exe這個,libcrypto-1_1.dll是openssl庫來提供rsa的相關加密函數,clickme.exe是仿照wannacry病毒的界面程序(自帶換壁紙功能),
flag.txt.Encry是被WannaReverse.exe加密的flag。
我的IDA反編譯的函數,函數名沒有提示是那種函數,這就很難受,
WannaCry的加密原理RSA2048 + AES隨機密鑰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章