IDAPython第三講 搜索功能 與交叉引用功能


IDAPython第三講 搜索功能 與交叉引用功能

一丶搜索函數簡介

​ 在IDAPython中如果我們想查詢某些 數據 代碼 二進制 都可以用都搜索函數.

搜索函數可以是向上搜索 也可以是向下搜索. 搜索失敗就會返回-1 也就是BADADDR

而搜索功能也常常用於去除花指令當中.

在官網中可以點擊此鏈接進行觀看學習:

IDAPython 升級版查找函數

IDAPython中 isxxx判斷函數

IDAPtyhon中的引用功能

flag的取值如下:

flag取值有:
 
SEARCH_DOWN 向下搜索
 
SEARCH_UP 向上搜索
 
SEARCH_NEXT 獲取下一個找到的對象。
 
SEARCH_CASE 指定大小寫敏感度
 
SEARCH_UNICODE 搜索 Unicode 字符串。

常見的函數如下: (IDA7.5之前版本與IDA7.5改版后的高級支持版本)

老函數 作用 新函數
idc.FindBinary 查找二進制找到返回地址沒找到返回-1(BADADDR) idc.find_binary(ea, flag, searchstr, radix=16, from_bc695=False)
idc.FindData 從ea還是返回查找的數據 idc.find_data 或者ida_search.find_data
idc.FindCode 查找代碼找到指定地址的代碼 idc.find_code 可以使用 ida_search.find_code 也可以使用
idc.Jump 跳轉到ea位置 ida_kernwin.jumpto(ea)

例子:

ea = here()
value = idc.find_binary(ea,SEARCH_DOWN,'8B 4D 08')  從ea位置向下查找 查找的二進制為8B 4D 08 返回查找到的地址

value1 = idc.find_code(ea,SEARCH_DOWN)  從ea還是查找找到ea下的第一行code代碼地址
value2 = idc.find_data(ea,SEARCH_DOWN)

其中常見的就是上方表示的幾個函數

IDA升級之后其查找函數都變為了 ida_search.find_xxx了. 擇優選擇去官網學習.

而后可以使用 is_code is_data is_xxx函數來判斷獲取的值是否是對的.

二丶數據校驗函數

數據校驗函數就是isxxx 但是它的參數是一個flag所以我們要先使用函數來獲取flag 然后在將獲取的值傳入isxxx 來進行判斷.

老函數 作用 新函數
idc.GetFlags(ea) 獲取標志 ida_bytes.get_full_flags
idc.isCode(f) 判斷是否是代碼傳入標志 根據標志返回True or False ida_bytes.is_code(f)
idc.isData(f) 同上 只不過是判斷是否是數據 ida_bytes.is_data(f)

示例如下:

import idc
ea = here()
value1 = idc.find_code(ea,SEARCH_DOWN)
print(hex(value1))

flag = ida_bytes.get_full_flags(value1)
print(flag)

print(ida_bytes.is_code(flag))

三丶交叉引用功能

​ 在我們實際在IDA的操作中 我們常常會對一個函數按X快捷鍵來查看誰引用了. 或者對數據看看誰引用了他. 這些在IDAPython中都給我們提供了函數功能. 下面來看看如何操作吧.

這里只介紹如何對引用做操作. 至於添加引用刪除引用 可以觀看文檔.

IDAPtyhon中的引用功能

函數 作用
CodeRefsTo( long Address, bool Flow ) 獲取地址處引用位置 A調用B 對B函數地址使用此函數則找到A調用 返回列表.遍歷列表則可以找出所有引用位置. 參數1是ea也就是地址,參數2告訴IDA是否跟蹤這些代碼.
CodeRefsFrom( long Address, bool Flow ) 返回address的代碼引用了何處的代碼. 返回一個列表
DataRefsTo( long Address ) 返回一個列表告訴address位置的數據被誰引用了
DataRefsFrom( long Address ) 同上 告訴我們address引用了誰.

代碼如下:

import idc
ea = here()
for i in CodeRefsTo(ea,False):
    print(hex(i))
    
# DataRefsTo(ea):
#DataRefsTo(ea)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM