vxworks文件系统分析

news2024/11/19 23:31:42

参考https://www.freebuf.com/articles/endpoint/335030.html

测试固件 https://service.tp-link.com.cn/detail_download_7989.html

固件提取

binwalk解压固件,在第一部分即为要分析的二进制文件,可以拖进ida分析

(img-rLhyFmpK-1691033042842)(https://secure2.wostatic.cn/static/uzN93pcTZUwkK1cPjkA2TV/image.png

设置为arm小端字节序,点set

在这里插入图片描述

随便选择加载地址

在这里插入图片描述

进来之后可以看到真正的加载地址

在这里插入图片描述

修复符号

VxWorks采用usrInit进行栈初始化,usrInit是VxWorks系统引导后运行的第一个函数。调用bzero函数对bss区的数据进行清零。

binwalk 解压得到所有内容,通过grep 搜索符号表

grep -nr "bzero" .

xxd得到对应的十六进制数

xxd -g 1 -u ./15CBBA >15CBBA.chr

确定符号表中符号的偏移,通过出现连续字符串的开始,即0x001a728

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNAqux7c-1691033042845)(https://secure2.wostatic.cn/static/nwoxbBWYMvVEe5bDYJ13iG/image.png?auth_key=1691033035-jSmBWdaxkSDidDnxYhjrqb-0-ae27733d97336f8f2c6794e7ad3842ce)]

在该文件的开头记录着符号表的偏移,54对应flag,0x40373684对应AES_CMAC的偏移

在这里插入图片描述

使用idapython脚本恢复符号表

  • 重定位加载地址
  • 读取符号表文件,定位到对应偏移分别得到地址和符号名
  • 创建函数并设置函数名
from  idaapi import *
import idc
def has_symbol(address):
    symbol_name = idc.get_name(address)
    return bool(symbol_name)

def read_symbol_table(filename, symbol_address_offset,symbol_offset):
    with open(filename, "rb") as f:
        f.seek(symbol_address_offset)
        content=f.read()
    with open(filename, "rb") as f:
        f.seek(symbol_offset)
        content_symbol=f.read()
    symbol_address=[]    
    for item in range(0,len(content),8):
        if item>=symbol_offset:
            break
        symbol_data = content[item:item+4] # Assuming 32-bit address, change the size as needed
        symbol_address.append(int.from_bytes(symbol_data, byteorder="big"))

    symbol_list=content_symbol.split(b"\x00")
    print("found address,symbol len",len(symbol_address),len(symbol_list))
    for a,s in zip(symbol_address,symbol_list):
        yield (a,s)


def create_symbol(symbol_address, symbol_name):
    add_func(symbol_address)
    idc.set_name(symbol_address, symbol_name.decode(), SN_NOCHECK)
def init(ida_load_addr):
    rebase_program(ida_load_addr,8) # 测试时ida会根据前一次的地址加上这个偏移得到基地址,刚开始设置为0,只执行一次即可

def main():
    filename = "/Users/guosiyu/Desktop/aiwencode/loudong_liyong/tplink/_wdr7660gv1-cn-up_2019-08-30_10.37.02.bin.extracted/15CBBA"
    current_base=get_imagebase()
    ida_load_addr=0x40205000-current_base
    symbol_address_offset = 0xc  # Offset where the symbol address is located in the file
    symbol_offset = 0x001a728  # Offset of the symbol in the file

    init(ida_load_addr)
    auto_wait()
    for addr,symbol in read_symbol_table(filename, symbol_address_offset,symbol_offset):
        print("found address,symbol:",hex(addr),symbol)
        if(has_symbol(addr)):
            continue
        create_symbol(addr, symbol)
    # symbol_address = base_address + symbol_address_offset


    # symbol_name = "your_symbol_name"  # Replace this with the desired symbol name

    
    # print(f"Created symbol: {symbol_name} at address: 0x{symbol_address:08X}")

if __name__ == "__main__":
    main()

补充

工具 https://github.com/PAGalaxyLab/vxhunter好像也可以,未测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爆火的“为i做e”梗,小红书如何成为年轻人的社交货币?

话题浏览超13亿,“新社交密码”抢占用户心智 2023-08-03 草稿临时预览,有效期剩余59分59秒 请勿包含诱导分享,虚假中奖,违法违纪等信息。 爆火的“为i做e”梗、将MBTI写进个人简介、花样百出的MBI梗图 ...... 从去年5月到现在&…

手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)

简介 首先声明此篇文章主要是针对测试菜鸟或者刚刚入门的小伙们或者童鞋们,大佬就没有必要往下看了。 写这篇文章的由来是因为后边要用这个工具,但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具,为了方便小伙伴们和童鞋们的后续学习…

第五届宁波市卫生健康系统信息化技能竞赛暨赛前培训成功举办 平凯星辰受邀授课

近日, 第五届宁波市卫生健康系统第五届信息化技能竞赛暨赛前培训在宁波饭店成功举办 。本次培训吸引了来自区、县、市属各级医疗单位的信息化相关负责人参与。宁波市卫生信息中心副主任唐玲作主题发言, 平凯星辰作为中国数据库代表厂商,受邀进…

企业级,Pytest自动化测试框架脚本编写总结,看这篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 用到的知识点&…

web爬虫第四弹 - JS逆向入门(猿人学第一题)

0- 前言 爬虫是一门需要实战的学问。 而对于初学者来说,要想学好反爬,js逆向则是敲门砖。今天给大家带来一个js逆向入门实例,接下来我们一步一步来感受下入门的逆向是什么样的。该案例选自猿人学练习题。猿人学第一题 1- 拿到需求 进入页面…

矩阵怎么求导数(学习笔记)

当标量 拓展到向量的时候 需要弄清楚形状 这里 看图大概是不清晰的 先要看清楚谁是向量 y 是向量 x 是标量 求导之后 仍然还是向量 y 是标量 x 是向量 求导之后 仍然还是向量 两个都是向量 求导之后 是矩阵 标量大家都会的 啊 求导 的意义很重要 如图所示 梯度一定指…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED

目录 前言 一、原理图及知识点介绍 1.1、LED原理图 1.2、MCU51原理图 二、代码分析 知识点一:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 知识点二:你知道sfr P0 0x80;是怎么来的呢为什么要赋值0x80&#xff…

Java基础面试题2

Java基础面试题 一、IO和多线程专题 1.介绍下进程和线程的关系 进程:一个独立的正在执行的程序 线程:一个进程的最基本的执行单位,执行路径 多进程:在操作系统中,同时运行多个程序 多进程的好处:可以充…

7种有效安全的网页抓取方法,如何避免被禁止?

网页抓取是一种从互联网上抓取网页内容的过程,但在网络抓取种相信您也经常遇到障碍?尤其是做跨境业务的,在抓取国外的网站时更有难度。但我们站在您的立场上,提供七种有效的方法来进行网页抓取而不被阻止,最大限度地降…

JVM面试突击班2

JVM面试突击班2 对象被判定为不可达对象之后就“死”了吗 对象的生命周期 创建阶段 (1)为对象分配存储空间 (2)开始构造对象 (3)从超类到子类对static成员进行初始化 (4)超类成…

如何搭建WordPress博客网站,并且发布至公网上?

如何搭建WordPress博客网站,并且发布至公网上? 文章目录 如何搭建WordPress博客网站,并且发布至公网上?概述前置准备1 安装数据库管理工具1.1 安装图形图数据库管理工具,SQL_Front 2 创建一个新数据库2.1 创建数据库2.…

基于DiscordMidjourney API接口实现文生图

https://discord.com/api/v9/interactions 请求头: authorization:取自 浏览器中discord 文生图请求头中的 authorization 的值 Content-Type:application/json 请求体: {“type”:2,“application_id”:“93692956130267xxxx”,“guild_id”:“1135900…

Error message “error:0308010C:digital envelope routines::unsupported“

https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported nvm install 16即可解决

Python接口自动化之使用requests库发送http请求

requests库 ​ 什么是Requests ?Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。 ​ 安装:cmd命…

Vivado常见critical warning 、error

综合 Designutils 20-1281 如下图所示 可能原因 在复制Vivado工程时,IP文件缺少导致 解决方法 重新生成IP即可

【雕爷学编程】MicroPython动手做(29)——物联网之SIoT 2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

Chat模块封装

封装保存用户类 utils/chat.js class Chat{constructor(){// 当前登录的用户this._user null;// 会话数组 和多个人this._sessions []; //user message// 当前会话 (和谁在聊天)this._current_session null;}setUser(user){this._user user} }exp…

百度贴吧视频推送排名软件怎么卖

百度贴吧视频上传工具 软件有月卡、季卡、半年卡、年卡 【有时软件个别卡种售空,价格有上涨下降不定,需要的话联系客服获取当日价格】 视频教程: 软件功能: 1.软件不限制账号,可以批量循环发布 2.贴吧同步功能&am…

2023,谁在引领实时互动进入高清时代?

实践是检验真理的唯一标准,技术是行业进步的核心动能。在实时互动的新时代里,不断进化的声网已然完成自证。 作者|斗斗 出品|产业家 “一个医疗行业的客户,曾向我们提出一个需求,希望在120急救场景下,可以远程看清…

二进制的运算

二进制的运算 位与(&)位或(|)异或(^) 位与(&) 类似于逻辑与运行,当条件都为true时,结果才为true。 0 & 0 0 0 & 1 0 1 & 0 0 1 &…