[CISCN 2022 東北]hana
脫殼過程
首先看一下程式資訊
程式檢測到了UPX的特徵,但是下面的特徵又顯示是VMP殼
使用010 Editor開啟檔案
將兩個VMP0和VMP1改成UPX0和UPX1並儲存檔案,接下來使用UPX脫殼
分析程式
這裡需要用到一個易語言反編譯外掛以及一個易語言函式查詢網站
IDA易語言反編譯外掛E-Decompiler - 『逆向資源區』 - 吾愛破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
易語言知識庫 - 最新易語言線上幫助手冊 (125.la)
把exe用IDA開啟,一路動態除錯會進入主要函式,位置在0x4010b0
(可能會有花指令,不多可以寫個指令碼或者手動去除)
找到之後用易語言反編譯器外掛,會將裡面的函式重新命名,方便閱讀。不過我的IDA虛擬碼介面好像不支援中文顯示,所以程式碼使用外掛後看起來有點抽象(可以點選函式然後按n,這樣就能顯示了),但是在彙編檢視裡沒有問題
接下來就是函式流程分析了,搭配線上易語言函式查詢網站使用。
下面是要用到的結構體
typdef struct 位元組集
{
int unkown;
int length;
char* bytes;
};
函式虛擬碼如下
主函式()
{
文字 = 標準輸入(1);
文字長度 = 取文字長度(文字);
緩衝區1 = 到位元組集(文字);
緩衝區2 = 解壓資料(&unk_48049D); // unk_48049D是儲存金鑰的位元組集結構體的地址
金鑰 = 到文字(緩衝區2);
緩衝區3 = 加密資料(緩衝區1, 金鑰, 2);
if(位元組集比較(緩衝區1, &dword_4804C3[2], 文字長度)) // dword_4804C3是儲存密文的位元組集結構體地址
標準輸出(“Right!”);
else
標準輸出(“Wrong!”);
}
透過函式查詢網站可知,加密資料函式的描述如下
語法: 位元組集 加密資料 (位元組集資料, 密碼文字, [加密演算法])
引數名 描 述
位元組集資料 必需的; 位元組集。為命令提供所需的位元組集資料。
密碼文字 必需的; 文字型。
加密演算法 可選的; 整數型。指定具體使用的加密演算法,可以為以下常量值之一:1: #DES演算法; 2: #RC4演算法。加密和解密必須使用相同的演算法,有關演算法的具體說明請參閱有關文獻。如果本引數被省略,則預設值為1,即DES演算法。
這裡傳入的加密演算法引數為2,即RC4加密演算法。透過動態除錯可知金鑰的值是 Wrong!
編寫指令碼
之後我們將密文資料匯出然後寫個python指令碼解密即可
from Crypto.Cipher import ARC4
key = b"Wrong!"
rc4 = ARC4.new(key)
enc = bytes.fromhex("56ECA0DC5707F4A3E977BF93BC8652A5146AA5BDB5D27F0B9B671D08EFC9325D43ED1E014B7B")
flag = rc4.decrypt(enc)
print(flag)