題目來源:ctf.show
1、下載附件,發現一個exe和一個txt文件
看看病毒加沒加殼,發現沒加那就直接放IDA
放到IDA找到main主函數,按F5反編譯工具就把他還原成類似C語言的代碼
然后我們看邏輯,將flag.txt文件的內容進行加密處理,并將結果寫入enflag.txt文件,所以上面那兩個文件enflag是被加密過的
?繼續看這段代碼,輸入的是Str,輸入Str這個值要干什么不知道,進去看看
發現這是從sub_401A70里面返回,然后進去看看具體做了什么
看不懂就扔豆包里看看代碼具體實現什么功能:
-
輸入處理:
- 接收用戶輸入的字符串
Str
(例如密碼或 flag)。 - 獲取
Str
的長度,用于后續循環處理。
- 接收用戶輸入的字符串
-
加密轉換:
- 異或操作:對輸入字符串
Str
的每個字符與固定值0x1F
(十進制 31)進行異或運算。 - 累加修改:將異或結果累加到另一個字符串
Str1
的對應位置上(Str1[i] += Str[i] ^ 0x1F
)。
- 異或操作:對輸入字符串
-
結果驗證:
- 將處理后的
Str1
與預設的目標字符串"DH~mqqvqxB^||zll@Jq~jkwpmvez{"
進行比較。 - 若匹配成功,輸出正確信息(如
Correct!
);否則輸出錯誤信息(Error!
)。
- 將處理后的
所以黃色的那段字符串就是密鑰,我們寫個腳本給他解回去
出來這么一段字符串,然后我們得返回去看他之后有干了什么
?其實看到這就能猜出來是個加密操作了,str是密鑰,v13是一開始寫入flag.txt里的內容,v12是將v13加密之后寫入enflag.txt的內容,v15和v14都沒有用,我們繼續點進去看
發現返回sub_4014E0這個函數,對應著剛才的值a1,a4,a5
?看黃色那段,用到的函數就有sub_4010EB這個函數
、
看這段,RC4加密,前三段強特征(可以搜一下RC4加密)
知道是RC4加密我們拿廚師解一下
拿到flag