如何提取windows PE文件的函数调用图(fcg)? 以及我得到的fcg为什么很奇怪?

life_bre 2021-05-11 04:49:08
现在需要调用每个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图呢?
...全文
2846 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
life_bre 2021-05-15
  • 打赏
  • 举报
回复
引用 1 楼 aabbabababaa 的回复:
FCG图是啥?处理日志用的?
函数调用图,function call graph
aabbabababaa 2021-05-13
  • 打赏
  • 举报
回复
FCG图是啥?处理日志用的?

9,515

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧