ARM基础
ARM基础
什么是ARM
ARM架构,曾称为进阶精简指令集机器(Advanced RISC Machine)是一个32位精简指令集(RISC) 处理器架构
ARM大小端
最高有效位 MSB(Most Significant Bit)对应大端(Big-endian)
最低有效位LSB(Least Significant Bit)对应小端(Little-endian)
armel:arm eabi little endian的缩写,软件浮点
armhf:arm hard float的缩写,硬件浮点
arm64:64位的arm默认就是hf的
ARM运行模式
一共有9种模式,下图有7种模式。还有Hyp模式和Monitor模式
ARM工作状态
ARM状态:32位,执行字对准的ARM指令
Thumb状态:16位,字对准的Thumb指令。通过缩短指令长度来提高代码密度。
进入不同工作状态的方法
进入Thumb状态
(1)执行BX指令,并设置操作数寄存器的状态(位[0])为1。
(2)在Thumb状态进入异常(所有的异常都是ARM状态),当异常处理返回时自动转换Thumb指令
进入ARM状 ...
angr基础学习
项目地址:
https://github.com/jakespringer/angr_ctf
https://github.com/Hustcw/Angr_Tutorial_For_CTF
00_angr_find
123456789101112131415161718import angrproj = angr.Project('./00_angr_find',auto_load_libs=False)#不加载共享文件库state = proj.factory.entry_state()#构造一个已经准备好从函数入口点执行的状态sm = proj.factory.simulation_manager(state) #创建一个模拟管理器good = 0x0804867Dsm.explore(find = good)if sm.found: #如果found不为空 find_state = sm.found[0] #把found分类中的state传递给find_stateflag = find_state.posix.dumps(0) #获取输入print( ...
初识符号执行
符号执行的背景
软件中存在缺陷(漏洞)十分常见,一个项目中往往存在着大量的代码。为了查找和修复二进制文件漏洞。其中利用的关键技术都是基于符号执行,可以减少分析二进制文件代码的时间。
符号执行的基本概念
符号执行的概念
符号执行的过程类似于生成代数表达式。符号执行通过尽可能探索程序的执行路径找到潜在的漏洞为止,然后尝试解出利用该漏洞的特定输入。形象的来说就是设方程,然后解出设的未知数。这个未知数就是符号输入。
123若x^2+2x+1=0,求其中的x为多少x^2+2x+1=0对应到符号执行中为探索到特定路径之后引擎生成的表达式x=-1对应到符号执行中就是利用该漏洞的特定输入
约束的概念,举个例子
12345678910111213141516171819202122#include<stdio.h>int main(){ int i=0; scanf("%d",&i); if(i > 0){ printf("step one success!"); if(i>1){ printf ...
《IOT 废物学习之路》(6)--BooFuzz 的简单使用,以 CVE-2018-5797 为例
《IOT 废物学习之路》(6)–BooFuzz 的简单使用,以 CVE-2018-5797 为例
Tenda AC15 固件中所存在的缓冲区溢出。由于没有对用户的输入进行限制,导致 sscanf 函数直接将用户的输入直接拷贝到栈上,从而造成了栈溢出漏洞。
分析固件(qemu-user)
使用 binwalk 对固件进行解压
1binwalk -e US_AC15V1.0BR_V15.03.1.16_multi_TD01.bin
squashfs-root 文件夹是该路由器的文件系统,使用 qemu-arm-static 尝试启动 bin 下的 httpd:
123cp $(which qemu-arm-static) ./sudo chroot . ./qemu-arm-static ./bin/httpdsudo chroot . ./qemu-arm-static -g 1234 ./bin/httpd #调试模式
运行时程序卡住:
到 IDA 中对 httpd 进行分析。
直接进行字符串定位
发现两个需要注意的地方
导致死循环的原因就是因为 check_netwo ...
《IOT废物学习之路》(5)--修复固件运行环境
《IOT废物学习之路》(5)–修复固件运行环境
虽然可以利用firmadyne模拟运行固件,但是并不是所有的固件都能模拟运行成功,有的固件需要依赖于硬件,qemu无法完全模拟。所以需要修复固件的运行环境,从而模拟固件运行。
固件下载地址
https://support.dlink.com/resource/products/dir-605l/REVA/
利用firmadyne模拟运行一下试试
1sudo docker run --network host --privileged -it --rm -e USER=root -v $(pwd):$(pwd) asdqwe876/iot_analyze
启动容器并挂载当前盘符。
将固件复制到firmadyne。
1cp /home/zhuyuan/IOT/05/dir605L_FW_113.bin ./
设置id
1project_id=1
解压固件
1python3 ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "firmwa ...
《IOT废物学习之路》(4)--解密路由器固件
《IOT废物学习之路》(4)–解密路由器固件
固件下载地址:
https://support.dlink.com/resource/products/dir-605l/REVA/
研究路由器固件D-link-882。其中zip就是各版本的固件。
解压出来的固件版本从旧到新依次为:FW100B07 --> FW101B02 --> FW104B02 --> FW110B02 --> FW111B01 --> FW120B06 –> FW130B10,FW104B02 有点特别,而且通过名字也猜测到它是未加密的中间版本。
目前最新版是FW130B10,试一试用binwalk能否解析该固件。
发现binwalk失败。再试试更早版本的FW101B02,发现可以直接提取。
固件的版本是经过未加密到加密,所以肯定会有一个中间版本。
利用binwalk测试出中间版本FW104B02。可以从固件系统中找一找是否存在解密程序。可以在bin目录或者是usr/bin目录下寻找类似decrypt字眼的程序。
binwalk解析FW104B02固件
1234do ...
IOT废物学习之路》(3)--动态分析IOT固件
《IOT废物学习之路》(3)–动态分析IOT固件
动态分析固件之前,需要先把固件运行起来。没有路由器、摄像头之类的物联网硬件的话,就需要用到虚拟执行。虚拟执行就相当于一个虚拟机可以运行各种物联网OS。
虚拟执行固件
工具介绍
firmadyne
是一个IOT固件模拟程序
用于全自动模拟固件
本文使用的是iot的docker
1、首先使用如下指令快速启用firmadyne控制台
1sudo docker run --network host --privileged -it --rm -e USER=root asdqwe876/iot_analyze
命令解释
命令的含义是在一个交互式的Docker容器中运行名为 asdqwe876/iot_analyze 的镜像,并将容器内的 USER 环境变量设置为 root。容器在退出后将被立即删除。这个命令通常用于启动临时容器,用于特定的任务或交互式会话,而不需要长期保留容器。
2、接下来准备一个固件,使用一个DWP固件作为demo
1234cd /root/firmadynewget -N --continue \http ...
IOT废物学习之路》(2)--提取IOT固件与静态分析IOT固件
《IOT废物学习之路》(2)–提取IOT固件与静态分析IOT固件
1、提取固件
工具介绍
binwalk
提取固件系统的参数是-e,可以加上-t -vv参数查看详细的提取过程。
1binwalk -t -vv -e RT-N300_3.0.0.4_378_9317-g2f672ff.trx
通过输出信息,可以得知该固件系统没有加密压缩,且系统为Squashfs。
提取出来的文件夹系统为_RT-N300_3.0.0.4_378_9317-g2f672ff.trx.extracted。
其中的squashfs-root就是需要的固件文件系统。
binwalk原理
binwalk通过自带的强大的magic特征集,扫描固件中文件系统初始地址的特征码,若匹配成功,则将该段数据dump下来,这个magic特征集已公开。
1https://github.com/ReFirmLabs/binwalk/blob/62e9caa164305a18d7d1f037ab27d14ac933d3cf/src/binwalk/magic/filesystems
本次固件的例子,系统是squashfs文件 ...
《IOT废物学习之路》(1)--MIPS交叉编译环境搭建以及32位指令集
《IOT废物学习之路》(1)–MIPS交叉编译环境搭建以及32位指令集
先介绍一下指令集
一、指令集
指令集大体上可以分为两大类:
CISC(complex instruction set computer)(复杂指令计算机)
RISC(reduced instruction set computer)(精简指令计算机)
(1)CISC复杂指令架构
特点是拥有丰富而复杂的指令集。CISC架构的设计思想是**通过一条指令执行多个低级操作,以实现高级编程语言中的复杂操作。**所以,CISC处理器的复杂性和内部控制逻辑可能会导致较低的时钟速度和较高的功耗。像我们经常接触到的x86、x86-64等指令集都是CISC架构的具体表现。
(2)RISC复杂指令架构
特点是简单且精简的指令集。RISC架构的设计思想是将处理器的指令集保持简单和精简,以提高指令执行速度和效率。所以,RISC处理器的指令集包含较少、更加基本的指令、这些指令执行的操作通常是单一的,且需要相同的数量的时钟周期来执行。像ARM、MIPS等用于嵌入式等指令集都是RISC架构的具体表现。
二、CISC和RISC的区别
1、指 ...
网络协议基础02
网络协议基础02
1、HTTP基础知识
(1)HTTP是什么
HTTP是超文本传输协议,英文全称 HyperText Transfer Protocol。
是一种分布式、协作式和超媒体信息系统的应用层协议。是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的互联网文件都必须遵守。
HTTP(超文本传输协议)分为三个部分
超文本
传输
协议
1、协议
确定计算机之间的交流通信方式(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范),理解为一种约定。
2、传输
HTTP协议是一个双向协议。专门用来在两点之间传输数据的约定和规范。
3、超文本
HTTP传输的内容是[超文本]
超文本就是超越普通文本的文本,是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。
总结:
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
(2)统一资源定位符(URL)
常说的网址就是URL。
由协议、主机名、域名、端口、路径、以及文件名这个六个部 ...