对基于VxWorks的TP-Link路由器固件符号修复代码改造

参考链接:[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.com/developer/article/2063716

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值