ransomware ctf逆向分析

題目來源於網上,具體未知。

運行軟件後如圖:
在這裏插入圖片描述
看起來很嚇人有沒有?

實際點擊頁面後,發現只是一張圖片,輸入框可以輸入,輸入完成後,只有Decrypt可以點擊。
在這裏插入圖片描述
先查下殼有沒有,發現沒有,發現編譯器是VS2017。
在這裏插入圖片描述
使用IDA打開,IDA首先找到了WinMain入口。
在這裏插入圖片描述
因爲是GUI程序, 所以入口點是WinMain。不過目前關注的重點不是在這裏,先要找到合適的位置下斷點。

GUI程序存在輸入框,所以尋找下獲取輸入框內容的API函數,這裏找到了GetDlgItemTextA,下斷點調試後發現確實是。

在IDA裏找交叉引用的地方找到GetDlgItemTextA,F5翻譯下。
在這裏插入圖片描述
很清楚顯示爲對話框過程函數,這裏應該就是主邏輯了。
在這裏插入圖片描述
來到下面GetDlgItemTextA調用處
在這裏插入圖片描述
大概的處理流程爲先獲取輸入框的內容,接着判斷輸入字符串的長度是不是18個字節。

如果是則繼續往下執行,如果不是則直接返回錯誤並彈窗。

這裏我們跟進等於18的流程裏,sub_4013B0函數爲複製輸入框內容的值到Dst空間。

sub_401010函數爲算法核心部分,如果返回值爲1則成功,返回爲0則失敗彈窗。

雙擊進入sub_401010裏,查看源彙編指令可知a1這裏翻譯錯了,應該爲String。
在這裏插入圖片描述
在這裏插入圖片描述
這裏的處理流程爲,將String每個字節與0xCC進行異或運算的結果再賦值給源地址。

之後再每個字節與byte_404000地址空間的每個字節進行比較,如果每個都相等則最後返回值爲1。

所以我們可以寫出註冊機,逆算法。

# coding=utf-8
key = [
  0xFD, 0x93, 0xA8, 0x83, 0x93, 0xA2, 0xFC, 0xB8, 0x93, 0xBB,
  0x8D, 0xA2, 0xA2, 0xAD, 0x93, 0xAF, 0xBE, 0xB5
]

flag = ""

for i in range(len(key)):
    flag += chr(key[i] ^ 0xCC)
print(flag)

在這裏插入圖片描述
在這裏插入圖片描述

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