恢复函数名

通过签名文件恢复

  1. 找到用于静态编译的静态库。

  2. 用FLAIR解析器为该库创建一个pat文件。

  3. 用sigmake来处理生成的pat文件,并生成一个签名文件。

  4. 将生成的签名文件复制到IDA的/sig/目录中

  5. 在IDA中shift+F5,选择添加sig文件进行解析

通过符号表恢复

  1. 找到加载地址、起始地址和结束地址

  2. 通过python脚本恢复

#coding=utf-8
from idaapi import *
from idc import *

symbol_interval = 16 #符号表间隔
load_address =  #固件内存加载基址
symbol_table_start =  + load_address   #符号表起始地址
symbol_table_end =  + load_address #符号表结束地址
ea = symbol_table_start
eaEnd = symbol_table_end

while ea < eaEnd:
  offset = 0   #4个字节为一组数据
  #将函数名指针位置的数据转换为字符串
  create_strlit(get_wide_dword(ea-offset), BADADDR)
  #将函数名赋值给变量sName
  sName = get_strlit_contents(get_wide_dword(ea))
  print(sName)
  if sName:
      #将bytes转为str
      sName = str(sName,encoding="utf-8")
      #开始修复函数名
      eaFunc = get_wide_dword(ea - offset +4)
      set_name(eaFunc, sName)
      create_insn(eaFunc)
      ida_funcs.add_func(eaFunc, BADADDR)
  ea += symbol_interval

通过生成新的符号表来恢复

找到源文件,编译源文件来生成新的符号表

通过bindiff恢复

通过bindiff有符号的和无符号的文件恢复函数名(一半很少用bindiff这样的重型工具)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值