vxworks文件系统分析

参考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:breaksymbol_data = content[item:item+4] # Assuming 32-bit address, change the size as neededsymbol_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_basesymbol_address_offset = 0xc  # Offset where the symbol address is located in the filesymbol_offset = 0x001a728  # Offset of the symbol in the fileinit(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)):continuecreate_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.mzph.cn/news/19853.shtml

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

相关文章

数组中出现次数超过一半的数字——剑指 Offer 39

文章目录 题目描述法一 哈希表法二 摩尔投票 题目描述 法一 哈希表 使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。 class Solution { public:int maj…

Web与HTTP

目录 DNS与域名 DNS解析的方式 过程 注册域名 html 名词解释 html的语法 web web2.0 静态页面特点 动态页面 动态页面特点 http协议 工作流程 http的请求方式 get post 状态码 常用状态码 通信套接字 套接字调用的端口 DNS与域名 网络是基于tcp/ip协议进…

java中的字符流

使用字节流读取中文的时候,如果使用的编码是GBK,则占用2个字节;如果使用UTF-8编码,则占用3个字节,意味着我们读取中文文档的时候如果每次读取1个字节,那么输出的将会是乱码,因为是不完整的中文。…

面试攻略,Java 基础面试 100 问(六)

JAVA 泛型 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本 质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法, 能够对整型数组、字符串数组甚至其他任何类型的…

nohup Java -jar 生成的nohup.out 文件一直增加,如何处理

目录 1 实现 1 实现 除了使用echo "" > filename清空文件内容之外,还有其他几种方法可以删除文件中的内容而不删除文件本身:使用truncate命令:truncate命令可以用来截断文件并清空内容。使用以下命令清空文件内容:t…

程序的编译和调试

gcc编译器 gcc(GNU Compiler Collection)是GNU推出的多平台编译器,可将C、C源程序编译连接成可执行文件,支持以下后缀: .c c语言源代码 .h 程序所包含的头文件 .i 已经预处理过的C源代码文件 .s 汇编语言源代码文件 .o 编译后的目标文件…

解决SVN或GIT忽略提交文件的问题

背景 使用IDEA 的SVN插件提交文件是总是会提交一些不需要提交的文件; 我们可以通过一些简单设置忽略这些文件。 git 在项目根目录新建文本文件,修改后缀为.gitignore 文件中添加内容 *.iml .project .gradle/ .idea/ target/ build/ .vscode/ .settings/ .facto…

冒泡排序(c++题解)

题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 NN。 第二行包含 N 个空格隔开的正整数 ai​,为你需要进行排序的数。 输出格式 将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。 输入输出…

Elasticsearch:语义搜索 - Semantic Search in python

当 OpenAI 于 2022 年 11 月发布 ChatGPT 时,引发了人们对人工智能和机器学习的新一波兴趣。 尽管必要的技术创新已经出现了近十年,而且基本原理的历史甚至更早,但这种巨大的转变引发了各种发展的“寒武纪大爆炸”,特别是在大型语…

【html】学习记录

1.在建立一个页面的时候不是打开软件就开始写代码,要先规划好页面的布局框架,不然思想会很混乱,如做个人简历,要分区分块,把每个区域的内容搞清楚。 2.html的很多标签看上去作用都是一样的,但是实际有很大不…

SAP数据库表维护视图生成器的使用

在SAP中,经常需要自定义数据库表。而且可能需要人工维护数据库表中的数据,可以通过SM30进行维护数据;但是SM30事务的权限太大,不适宜将SM30直接分配;因此,可以通过给维护表分配事务代码,来达到控…

无涯教程-Perl - 环境配置

在开始编写Perl程序之前,让我们了解如何设置我们的Perl环境。 您的系统更有可能安装了perl。只需尝试在$提示符下给出以下命令- $perl -v 如果您的计算机上安装了perl,那么您将收到以下消息: This is perl 5, version 16, subversion 2 (v5.16.2) b…

MySQL数据库——DQL操作——基本查询

文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改,而其中数据的查询是使用最多,也…

同构多核架构(SMP)和异构多核架构(AMP)

同构多核架构(SMP)和异构多核架构(AMP)主要在两个角度上有区别: 处理器架构:在同构多核架构中,系统中的处理器在架构上是相同的,而异构多核架构则包含不同架构的处理器。运行模式&a…

Modbus TCP转Profinet网关modbus tcp转以太网

大家好,今天我们来聊一聊如何使用捷米特的Profinet转modbusTCP协议转换网关在博图上进行非透传型配置。 1, 首先,我们需要安装捷米特JM-TCP-PN的GSD文件,并根据现场设备情况配置modbusTCP地址。然后,在博图中添加该GSD文件&#x…

Redisson提供优秀的并发控制机制

1. JDK集合类 对于JDK的集合类&#xff0c;forEach方法其实并不能完全避免并发修改异常。 forEach本质上还是一个循环遍历&#xff0c;如果在循环体内直接对集合进行修改&#xff0c;仍然会产生ConcurrentModificationException。 例如&#xff1a; List<String> lis…

了解垃圾回收算法

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 垃圾回收&#xff08;Garbage Collect&#xff09;是Java语言中的一种自动内存管理机制&#xff0c;用于自动回收不再使用的对象所占用的内存空间。Java虚拟机会自动追踪和…

算法39:Excel 表列序号

一、需求 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1&#xff1a; 输入: columnTitle “A” 输出: 1 示例 2&…

Jenkins安装、配置、自动化构建前(nodejs)后端(maven)项目

文章目录 0、Jenkins卸载安装1、Jenkins配置2、后台启动脚本startup.sh3、后台关闭脚本stop.sh4、实时数据启动脚本startup.sh5、实时数据关闭脚本stop.sh6、jenkins制定完任务后&#xff0c;点击立即构建&#xff0c;控制台报错&#xff08;...无法生成父级目录&#xff09;7、…

uC-OS2 V2.93 STM32L476 移植:系统启动篇

前言 前两篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程&#xff0c;下载了 uC-OS2 V2.93 的源码&#xff0c;并把 uC-OS2 的源文件加入 Keil MDK5 工程 本篇适配 uC-OS2 的 系统定时器&#xff08;Systick&#xff09;与 PendSV_Handler&#xf…