首页
社区
课程
招聘
[分享]使用ida脚本 恢复/提取 ida未能识别的ELF文件符号表
发表于: 2025-7-24 16:13 449

[分享]使用ida脚本 恢复/提取 ida未能识别的ELF文件符号表

2025-7-24 16:13
449

前言

如果想跳过博主的心路历程请直接到适用范围开始浏览
最近在分析一个mips架构的elf,阅读其他大手子的文章时,他文章中所分析的一个函数只给出了一个准确的函数名,但是我ida的func names里面没有这个函数。然后我想要找这个功能点,于是在Strings里面搜索对应的字符串,是有这个字符串的
图片描述
然后我顺着xref下去找,xref表中是没有这个函数调用的
图片描述
图片描述
但是我留意到0x0048F00C这个地址前后的字符串内容都非常像函数的命名,并且sub_44DC54是一个函数,简单分析一下发现这个函数是符合命名的,再简单检查了几个函数,发现这里就是一张隐藏的符号表!搜了一下没有搜索到别人造的轮子,于是用GPT写了一个脚本,确实可以达到在ida中进行批量重命名来应用这个隐藏符号表的作用。希望这个脚本以及思路能够解决相同的问题!

该脚本的适用范围

ida没有识别到函数的符号信息,但是二进制文件中存在有以下格式的 字符串+函数地址 时,它极有可能是函数的符号表信息。此时可以使用我提供的脚本来在ida中恢复符号表以及导出符号表
图片描述

如何寻找可能的符号信息?

如果你不知道你的二进制文件中是否存在这样子的信息,请尝试按照以下方法寻找文件中的符号信息

找可能的函数名

可以使用shift+f12打开Strings窗口,在字符串海中寻找可能的函数名。或者根据你对函数功能、一些你所知的命名习惯进行猜测,然后在Strings窗口里面找有没有对应的信息
图片描述

找交叉引用

找到可能的函数名后,双击找到它的引用
图片描述
然后再次双击旁边的xref地址,看是否存在与适用范围中相同的地址信息
图片描述

脚本

git链接:github
git clone 094K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6d9K9f1#2#2j5i4N6S2i4K6u0r3K9h3c8S2i4K6u0V1M7%4W2E0j5X3!0D9i4K6u0V1k6i4S2@1M7X3q4U0N6r3!0J5i4K6u0W2k6$3W2@1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from idc import *
from idautils import *
from ida_bytes import *
from ida_name import set_name
from ida_funcs import add_func
from ida_funcs import get_func
from ida_kernwin import msg
 
# set your own address here
start_addr = 0x00
end_addr   = 0x00
 
addr = start_addr
while addr + 8 <= end_addr:
    str_ptr  = get_wide_dword(addr)
    func_ptr = get_wide_dword(addr + 4)
 
    func_name = get_strlit_contents(str_ptr, -1, STRTYPE_C)
    if not func_name:
        msg("Skipping %X: Invalid string address %X\n" % (addr, str_ptr))
        addr += 8
        continue
 
    func_name = func_name.decode('utf-8')
 
    if not set_name(func_ptr, func_name, SN_CHECK):
        msg("Failed to name: %X -> %s\n" % (func_ptr, func_name))
    else:
        msg("Named function %X as %s\n" % (func_ptr, func_name))
 
    if not get_func(func_ptr):
        add_func(func_ptr)
 
    addr += 8

保存为.py文件/下载python文件后打开,填入你的地址信息,然后在ida中的File → Script file...打开脚本,就可以完成命名了


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回