現在需要呼叫每個PE檔案的fcg,已經有的一種解決辦法是呼叫IDA的批處理模式和IDAPython腳本進行分析并得到呼叫圖。cmd命令及腳本如下:
# gen_fcg.py
# -*- coding: utf-8 -*-
# python 2
import pickle
import idaapi
import logging
import sys
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s - %(message)s')
def gen(out_name):
text_addr = ScreenEA()
fcg = dict()
for callee_addr in Functions():
callee_name = GetFunctionName(callee_addr)
for caller_addr in CodeRefsTo(callee_addr, 0):
caller_name = GetFunctionName(caller_addr)
logging.info(callee_name + '-' + caller_name)
fcg[caller_name] = fcg.get(caller_name, set())
fcg[caller_name].add(callee_name)
pickle.dump(fcg, open(out_name, 'w'))
print fcg
if __name__ == '__main__':
logging.info('sys.argv' + str(sys.argv))
idaapi.autoWait()
logging.info('start analyse...')
gen('D:\\Lab\\data_win\\fcg\\fcg.pkl')
idc.Exit(0)
命令列呼叫以下命令,來進行PE檔案的決議:
%IDAQ_PATH% -L./analysis.log -c -A -S./gen_cfg.py ./CRACKME.EXE
環境:IDA6.8,windows10,python2.7
但是這種方法得到的fcg圖,去掉sub開頭的方法(IDA識別的程式員寫的代碼),對于很多檔案來說,剩下得到的系統API函式只有3個:['DialogFunc', 'start', 'StartAddress']。這樣的結果占總檔案的比例接近50%,這是正常的嗎?
如果不是正常的,請問有什么其他方法來得到PE檔案的FCG圖呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/283823.html
標籤:安全技術/病毒
