[CISCN 2022 東北]hana 題解(易語言逆向)

S1nyer發表於2024-04-28

[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)

相關文章