網(wǎng)站首頁 編程語言 正文
1.背景
在逆向Dephi程序時,會出現(xiàn)Dede軟件可以看到函數(shù)的函數(shù)名,但是IDA逆向的時候看不到,為了解決這個問題,可以通過以下的方法來實現(xiàn):
2.基礎(chǔ)知識
IDA因為沒有PDB文件,無法還原函數(shù)的原始名稱,通過逆向工程師的匯編代碼識別,可以給函數(shù)手工重新命名,也可以使用IDC腳本語言來給特定的地址命名:
MakeName(0x006E624C, "TSingleForm.ComboBox1Change");
基于這個原理,我們查找一下DEde如何生成這樣的“地址:函數(shù)”的對應(yīng)表。
3.實操
1.從Dede中導(dǎo)出地址函數(shù)表
找到文件夾里的events.txt,這就是包含函數(shù)地址和函數(shù)名的文件。
2.運(yùn)行python腳本把events.txt轉(zhuǎn)化為IDC腳本;
以下的腳本打開腳本相同目錄下的events.txt,用.split()方法把地址和函數(shù)名裝入list[0]和list[1]中,無函數(shù)名的過濾掉。
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:]): #函數(shù)名==地址的,不要
fout.write('\tMakeName(0x%s, "%s");\n' % (list[1], list[0]))
fout.write('}\n')
def main():
return map2idc("./events.txt","./ida.idc")
把上面的python復(fù)制到.py文件里,python腳本和events.txt放在同一個目錄下,運(yùn)行python腳本,就會生成ida.idc文件。一個簡單的idc腳本如下:
#include <idc.idc>
static main()
{
MakeName(0x0040178C, "TObject.System.GetSpace(Integer):TBlock;");
}
3.運(yùn)行idc腳本,重命名函數(shù)
打開Ida,F(xiàn)ile-->Script file,選擇剛才生成的ida.idc文件,即可批量重命名函數(shù)了。
這樣,你的dehpi就有函數(shù)名了。
4.總結(jié)
通過這個腳本,我們就可以把專業(yè)dephi程序分析的結(jié)果,轉(zhuǎn)移到IDA專業(yè)逆向代碼分析的平臺,實現(xiàn)聯(lián)動。
參考文獻(xiàn):把MAP文件導(dǎo)入IDA Pro的小程序
原文鏈接:https://blog.csdn.net/qq_20031585/article/details/126122558
相關(guān)推薦
- 2022-09-26 Transformer模型Encoder和Decoder的Pytorch逐行實現(xiàn)
- 2022-12-30 React高階組件使用教程詳解_React
- 2022-05-19 聊聊Python代碼中if?__name__?==?‘__main__‘的作用是什么_python
- 2022-08-17 VMWare虛擬機(jī)為Windows?Server?2008設(shè)置靜態(tài)IP的方法_VMware
- 2022-10-18 AJAX跨域問題解決方案詳解_AJAX相關(guān)
- 2022-10-12 字節(jié)封裝React組件手機(jī)號自動校驗格式FormItem_React
- 2022-06-08 nacos項目啟動報錯:Connection refused: no further informa
- 2022-11-26 python?布爾注入原理及滲透過程示例_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支