参考链接:[RTOS] 基于VxWorks的TP-Link路由器固件的通用解压与修复思路-腾讯云开发者社区-腾讯云
IDA版本与版本之间的差异化函数查询:Porting from IDAPython 6.x-7.3, to 7.4
在《基于VxWorks的TP-Link路由器固件的通用解压与修复思路》中,修复符号表是python2版本的,通过上IDA官方找对应函数,改造成python3版本。
# encoding:utf-8
#symfile_path: 刚刚搜索到的符号文件的路径
#symbols_table_start : 符号表起始偏移,从16进制编辑器看出来是8(前8字节作用不清楚,也不重要)
#strings_table_start : 字符串起始偏移,也是从16进制编辑器看出来
import binascii
import idautils
import idc
import idaapi
import ida_funcs
symfile_path = r"D:\15CBBA"
symbols_table_start = 8
strings_table_start = 0x1a728
with open(symfile_path, 'rb') as f:
symfile_contents = f.read()
symbols_table = symfile_contents[symbols_table_start:strings_table_start]
strings_table = symfile_contents[strings_table_start:]
def get_string_by_offset(offset):
index = 0
while True:
if strings_table[offset+index] != 0:
index += 1
else:
break
return strings_table[offset:offset+index]
def get_symbols_metadata():
symbols = []
for offset in range(0, len(symbols_table),8):
symbol_item = symbols_table[offset:offset+8]
flag = symbol_item[0]
string_offset = int(binascii.b2a_hex((symbol_item[1:4])).decode("ascii"), 16)
string_name = get_string_by_offset(string_offset)
target_address = int(binascii.b2a_hex((symbol_item[-4:])).decode("ascii"), 16)
symbols.append((flag, string_name, target_address))
return symbols
def add_symbols(symbols_meta_data):
for flag, string_name, target_address in symbols_meta_data:
idc.set_name(target_address, string_name.decode("utf8"))
if flag == 0x54:
idc.create_insn(target_address)
ida_funcs.add_func(target_address)
if __name__ == "__main__":
symbols_metadata = get_symbols_metadata()
add_symbols(symbols_metadata)
我的git仓库:对基于VxWorks的TP-Link路由器固件符号修复代码改造: 在《基于VxWorks的TP-Link路由器固件的通用解压与修复思路》中,修复符号表是python2版本的,通过上IDA官方找对应函数,改造成python3版本。原文链接:https://cloud.tencent/developer/article/2063716