首頁 > 軟體

Dephi逆向工具Dede匯出函數名MAP匯入到IDA中的實現方法

2022-08-03 14:03:05

1.背景

在逆向Dephi程式時,會出現Dede軟體可以看到函數的函數名,但是IDA逆向的時候看不到,為了解決這個問題,可以通過以下的方法來實現:

2.基礎知識

IDA因為沒有PDB檔案,無法還原函數的原始名稱,通過逆向工程師的組合程式碼識別,可以給函數手工重新命名,也可以使用IDC指令碼語言來給特定的地址命名:

MakeName(0x006E624C, "TSingleForm.ComboBox1Change");

基於這個原理,我們查詢一下DEde如何生成這樣的“地址:函數”的對應表。

3.實操

1.從Dede中匯出地址函數表

找到資料夾裡的events.txt,這就是包含函數地址和函數名的檔案。

2.執行python指令碼把events.txt轉化為IDC指令碼;

以下的指令碼開啟指令碼相同目錄下的events.txt,用.split()方法把地址和函數名裝入list[0]和list[1]中,無函數名的過濾掉。

import os
try:
    import chardet
except:
    os.system('pip install chardet')
    import chardet
def check_charset(file_path):
    import chardet
    with open(file_path, "rb") as f:
        data = f.read(4)
        charset = chardet.detect(data)['encoding']
    return charset
def map2idc(in_file, out_file):
    with open(out_file, 'w') as fout:
        fout.write('#include <idc.idc>n')
        fout.write('static main()n{n')
        with open(in_file,encoding=check_charset(in_file)) as fin:
            for line in fin:
                list = line.split()
                if len(list) == 2 and len(str(list[1])) == 8 and str(list[1]).isalnum():
                    if(list[1][-4:]!=list[0][-4:]):  #函數名==地址的,不要
                        fout.write('tMakeName(0x%s, "%s");n' % (list[1], list[0]))
        fout.write('}n')
def main():
    return map2idc("./events.txt","./ida.idc")

把上面的python複製到.py檔案裡,python指令碼和events.txt放在同一個目錄下,執行python指令碼,就會生成ida.idc檔案。一個簡單的idc指令碼如下:

#include <idc.idc>
static main()
{
	MakeName(0x0040178C, "TObject.System.GetSpace(Integer):TBlock;");
}

3.執行idc指令碼,重新命名函數

開啟Ida,File-->Script file,選擇剛才生成的ida.idc檔案,即可批次重新命名函數了。

這樣,你的dehpi就有函數名了。

4.總結

通過這個指令碼,我們就可以把專業dephi程式分析的結果,轉移到IDA專業逆向程式碼分析的平臺,實現聯動。

參考文獻:把MAP檔案匯入IDA Pro的小程式

到此這篇關於Dephi逆向工具Dede匯出函數名MAP匯入到IDA中的文章就介紹到這了,更多相關MAP匯入到IDA內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com