0x00 Flash
-
RAM:
-
可读可写
-
内存,一般在电路板上有多个引脚的芯片,就是内存芯片。
-
这里说的内存一般都是运行内存,对应计算机的内存条。
-
通常人们说的存储内存对应计算机中的硬盘(外设)
-
nand flash(文件系统、系统内核,不能直接运行代码,需要写入必须先擦除)
-
-
-
-
ROM:
-
易读难写
-
eeprom
-
nor flash(bootload、BIOS,可直接运行代码)
-
-
-
特性:长期保存数据,掉电也不丢失数据,读写速度一般
-
Flash(闪存)和RAM(内存)的区别:
-
判断方式:
-
可以通过引脚的位置判断,引脚在长方形的长边上的是RAM,在短边的是Flash
-
如果看不到引脚,也可以查询表面的型号标识判断
-
-
RAM是断电后丢失数据的,临时存储数据,速度较快
-
Flash是掉电后不会丢失数据的,拥有长期保存数据的功能,速度一般
-
0x01 Serial
-
串口,是采用串行通信方式的扩展接口。串行接口是指数据一位一位的顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
-
路由器中最多的是异步串行,是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。UART包括TTL电平的串口和RS232电平的串口。
-
TTL电平一般是3.3/5V供电,它定义0.8V一下是低电平,而2.0V以上是高电平,路由器中以这种为主。
-
RS232是负逻辑电平,它定义+5~+12V是低电平,而-12~-5V为高电平。
-
-
-
为了安全,厂商一般将串口阉割了,为了能调试、固件解析,可以找到路由器中的串口,并将其焊接,再用TTL串口转接线,获得一个shell。
0x02 TTL
-
引脚定义:
-
VCC:电源正极
-
GND:电源地
-
RXD:数据接收
-
TXD:数据发送
-
-
传输逻辑:
-
起始位:发送器是通过发送起始位而开始一个字符传送的,起始位数据线处于逻辑0状态,提示接收器数据传输即将开始。
-
数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6、7位的情况),低位(LSB)在前,高位(MSB)在后。
-
校验位:可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有没有错误,一般是奇偶校验。在使用中,该位常常取消。
-
停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态。
-
波特率:UART的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率9600bps(位/秒)。
-
TTL转串口(必备工具)
-
0x03 JTAG
-
JTAG(Joint Test Action Group 联合测试工作组):是一个国际标准测试协议,主要用于芯片内部测试。简单地说,JTAG协议接收用来控制CPU的。
-
JTAG接口:
-
TCK:测试时钟输入
-
TMS:测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式
-
TDI:测试数据输入,数据通过TDI输入JTAG口
-
TDO:测试数据输出,数据通过TDO从JTAG口输出
-
VCC:电源正极
-
GND:电源地
-
-
另外作用:JTAG可以读取nor flash(bootload存放处),当路由器变砖时,可以通过JTAG将做好的bootload重新写入到nor flash中(救砖方法)。
-
生产厂家:
-
J-Link(常用)
-
ULINK
-
ST-Link
-
。。。
-
常用的路由器存储结构
-
nor flash + nand flash
-
CFI(eeprom、epcs串行flash)+ nand flash
-
nand flash(改良,添加了stepstone(4K 启动引导向区))
-
运行的方式:先运行 nor flash 中的bootload或BIOS,bootload或BIOS初始化内存、外设等,再运行nand flash中的系统内核(将代码片段一点点搬运到bootload已经初始完成的内存里面再运行,而不是在nand flash中运行)
有些路由器可能系统文件是只读,或者可写,但是当写入之后,重启路由器,写入的读写就没了,因为路由器启动是通过重新解压tgz文件,而我们写入的文件是解压之后的文件,所以要想真正写入文件,可以替换解压之前的tgz文件中,或者通过类似web中的LFI,因为配置文件不会被重写,可以找到什么读取了配置文件,然后该程序是否调用了system或者其他系统函数,再想办法绕过校验。