摩托罗拉E6系统研究
这是很久以前研究摩托罗拉E6刷机包时总结的一些经验,不一定准确但留个纪念,希望会制作刷机包的高手交流学习。
-------------------------------------------------------------------------------------------------------------------------------
摩托罗拉E6系统研究
- MOTOROLA E6 FLASH MAPS
地址 | 名字 | 大小 | 分区 | 分段 |
0x00000000-0x00008000 | CADDO_SECOND | 32K | Mtd0 | B |
0x00008000-0x00010000 | ITUNES | 32K | Mtd1 | None |
0x00010000-0x00018000 | CADDO_PRIMARY | 32K | Mtd2 | None |
0x00018000-0x00020000 | FOTA_REV | 32K | Mtd3 | None |
0x00020000-0x00060000 | MBM | 256K | Mtd4 | |
0x00060000-0x00080000 | CONFIG | 128K | Mtd5 | CG31.smg |
0x00080000-0x000A0000 | BLOB | 128K | Mtd6 | CG32.smg |
0x000A0000-0x001A0000 | KERNEL | 1M | Mtd7 | CG33.smg |
0x001A0000-0x00BA0000 | data_resource | 10M | Roflash2 | CG34.smg |
0x00BA0000-0x011A0000 | USERFS_DB | 6M | Mtd8 | CG35.smg |
0x011A0000-0x01980000 | USERFS_GENERAL | 7.875M | Mtd9 | CG36.smg |
0x01980000-0x01988000 | MNT_RECORD | 32K | ||
0x01988000-0x019A0000 | PANICLOG | 96K | ||
0x019A0000-0x019C0000 | secure_setup | 128K | Roflash4 | CG37.smg |
0x019C0000-0x019E0000 | TEST_CMD | 128K | Mtd10 | |
0x019E0000-0x01A00000 | LOGO | 128K | Mtd11 | CG39.smg |
0x01A00000-0x01AC0000 | FOTA | 768K | Mtd12 | |
0x01AC0000-0x01AE0000 | RESERVE | 128K | Mtd13 | |
0x01AE0000-0x025E0000 | language | 11M | Roflash1 | CG41.smg |
0x025E0000-0x02600000 | setup | 128K | Roflash3 | CG42.smg |
0x02600000-0x04000000 | rootfs | 26M | roflash | CG43.smg |
备注:
MOTOROLA E6闪存型号是英特尔PF38F4476VVUBPD,总大小是64M的NOR闪存。Linux系统Flash地址0x00000000一般安排的是BLOB,但是MOTOROLA E6在128K这个空间0X00000000地址只有一条指令:87 C0 00 EA ,对于PXA270处理器,系统复位后的PC指针总是指向0x0地址,0x0~0x04是复位中断向量的入口点,所以在0x00~0x03装载一条无条件跳转语句。根据CG32.smg文件可以知道,BLOB开始还有800H的偏移,是摩托用来签名的,所以BLOB真实地址是0x00080800H。同样,BLOB加载Linux内核的实际地址是0x000A0800H。在上表中MBM(Motorola Boot Manager)就是按开机键和照相键进入的红屏刷机模式。刷机时绝对不能覆盖这段Flash空间,否则无法进入刷机模式连接电脑。如果0x00060000H之前的这段Flash空间改变,就只能用JTAG刷字库,或者拆芯片用编程器写入MBM。
查看Linux启动日志可以获得很重要的一些数据。
Linux启动日志Flash部分:
MTD:
//找到两块芯片
T[131]Probing Bulverde flash at physical address 0x00000000 (16-bit buswidth)
T[132]Bulverde flash: Found 1 x16 devices at 0x0 in 16-bit bank //32M
T[132]Bulverde flash: Found 1 x16 devices at 0x2000000 in 16-bit bank //32M
//使用英特尔和夏普的命令集
T[132] Intel/Sharp Extended Query Table at 0x0035
T[132] Intel/Sharp Extended Query Table at 0x0035
T[132]Using buffer write method
T[132]cfi_cmdset_0001: Erase suspend on write enabled
T[132]0: offset=0x0,size=0x8000,blocks=4
T[132]1: offset=0x20000,size=0x20000,blocks=255
T[132]2: offset=0x2000000,size=0x20000,blocks=255
T[132]3: offset=0x3fe0000,size=0x8000,blocks=4
T[132]Using static partition definition
//创建14个MTD分区,注意它们并不连续。
T[132]Creating 14 MTD partitions on "Bulverde flash":
T[132]0x00000000-0x00008000 : "CADDO_SECOND" //32k
T[132]0x00008000-0x00010000 : "ITUNES" //32k
T[132]0x00010000-0x00018000 : "CADDO_PRIMARY" //32k
T[132]0x00018000-0x00020000 : "FOTA_REV" //32k
T[132]0x00020000-0x00060000 : "MBM" //256k
T[132]0x00060000-0x00080000 : "CONFIG" //128k 131072B CG31
T[132]0x00080000-0x000a0000 : "BLOB" //128k 131072B CG32
T[132]0x000a0000-0x001a0000 : "KERNEL" //1M 1048576B CG33
T[132]0x00ba0000-0x011a0000 : "USERFS_DB" //CG35 6M
T[132]0x011a0000-0x01980000 : "USERFS_GENERAL" //CG36 7.875M
T[132]0x019c0000-0x019e0000 : "TEST_CMD"
T[132]0x019e0000-0x01a00000 : "LOGO" //CG39 128K
T[132]0x01a00000-0x01ac0000 : "FOTA"
T[132]0x01ac0000-0x01ae0000 : "RESERVE"
ROFLASH:
//挂载跟文件系统CG43.smg,其中3E00是设备号15872
T[0]Kernel command line: root=3e00 rootfstype=cramfs ip=off paniclog=on
T[138]cramfs_read_super: mounts on(3e00),LINEAR(10)
//跟文件系统的实际地址是0x2601000,因为分段前面有1000H的偏移。
T[138]cramfs: checking physical address 0x2601000 for linear cramfs image
//虚拟文件系统挂载
T[138]VFS: Mounted root (linear cramfs filesystem).
//注意下面的几个是在/etc/init.d/mountfs.sh文件中完成挂载
//挂载/dev/roflash1 language 语言包CG41.smg 挂载在CG43根文件系统
T[183]cramfs_read_super: mounts on(3e01),BLOCK
//挂载/dev/roflash2 data_resource 数据资源包CG34.smg 挂载在CG43根文件系统
T[185]do_kern_mount:dev_nr(i_dev)(15872)
T[185]do_kern_mount:dev_nr(i_rdev)(15874)
T[185]cramfs_read_super: mounts on(3e02),BLOCK
//挂载/dev/roflash3 setup 设置包CG42.smg 挂载在CG43根文件系统
T[186]do_kern_mount:dev_nr(i_dev)(15872)
T[186]do_kern_mount:dev_nr(i_rdev)(15875)
T[186]cramfs_read_super: mounts on(3e03),LINEAR(10)
T[186]cramfs: checking physical address 0x25e0000 for linear cramfs image
//挂载/dev/roflash4 secure_setup 安全设置包CG37.smg挂载在CG43根文件系统
T[188]do_kern_mount:dev_nr(i_dev)(15872)
T[188]do_kern_mount:dev_nr(i_rdev)(15876)
T[188]cramfs_read_super: mounts on(3e04),BLOCK
//挂载/dev/mtdblock8 JFFS2 用户数据包CG35.smg
T[190]mnt_record_enter begin
T[191]mnt_record_enter end (check 0)
T[193]SCAN.c: 211: empty_blocks(0), c->nr_erasing_blocks(0), c->nr_free_blocks(45)
//挂载/dev/mtdblock9 JFFS2 用户基础包CG36.smg
T[195]mnt_record_enter begin
T[195]mnt_record_enter end (check 0)
T[198]SCAN.c: 211: empty_blocks(0), c->nr_erasing_blocks(0), c->nr_free_blocks(57)
//挂载SD卡
T[202] mmca: mmca1
T[202]MSDOS FS: IO charset utf8
- MOTOROLA E6 SBF MAPS
地址 | 名字 | 大小 | 分区 | 分段 |
A0DE0000-A13FFFFFF | RDL3 | 6.4M | AP | RDL3.smg |
03FC8000-03FE7FF7 | RDL1 | 127K | BP | RDL1.smg |
10080000-100800C7 | 200B | BP | CG0.smg | |
100800C8-102ECE7F | 2.42M | BP | CG1.smg | |
10390000-103FFFFF | 448K | BP | CG2.smg | |
10040000-10066EB7 | 155K | BP | CG3.smg | |
10330000-103307FF | BP签名 | 2K | BP | CG18.smg |
00060000-0007FFFF | CONFIG | 128K | Mtd5 | CG31.smg |
00080000-0009FFFF | BLOB | 128K | Mtd6 | CG32.smg |
000A0000-0019FFFF | KERNEL | 1M | Mtd7 | CG33.smg |
001A0000-00B9FFFF | data_resource | 10M | Roflash2 | CG34.smg |
00BA0000-0119FFFF | USERFS_DB | 6M | Mtd8 | CG35.smg |
011A0000-0199FFFF | USERFS_GENERAL | 7.875M | Mtd9 | CG36.smg |
019A0000-019BFFFF | secure_setup | 128K | Roflash4 | CG37.smg |
019E0000-019FFFFF | LOGO | 128K | Mtd11 | CG39.smg |
01AE0000-025DFFFF | language | 11M | Roflash1 | CG41.smg |
025E0000-025EFFFF | setup | 128K | Roflash3 | CG42.smg |
02600000-03FFFFFF | rootfs | 26M | roflash | CG43.smg |
备注:
在刷机包SBF文件分段开头有闪存地址和大小,RSD根据该地址和大小把需要刷入的SMG分段文件刷入闪存。在研究清楚了Flash的布局之后,我们就可以调整BLOB和内核的加载地址,修改内核的MTD分区表和ROFLASH分区表,然后通过修改刷机包的写入地址实现分区的改写。
MOTOROLA E6总共有18个分段文件。
BP部分:
CG0.smg、CG1.smg、CG2.smg、CG3.smg、CG18.smg
AP部分:
CG31.smg、CG32.smg、CG33.smg、CG34.smg、CG35.smg、CG36.smg、CG37.smg、CG39.smg、CG41.smg、CG42.smg、CG43.smg
RDL1.smg是刷入BP时使用的刷机系统
RDL3.smg是刷入AP时使用的刷机系统,它里面包含了一个基于内存的操作系统,BLOB+KERNEL+RAMDISK+擦除表
三、导出SBF分段文件方法
刷机包AP部分我们可以通过解包SBF文件得到,也可以在手机中导出,手机中导出脚本如下:
#!/bin/bash
#MOTOROKR E6
#RAM=48M
#ROM=64M
mkdir /mmc/mmca1/AP
MMC=/mmc/mmca1/AP
#CADDO_SECOND 32KB
dd if=/dev/mtd0 of=$MMC/mtd0
#ITUNES 32KB
dd if=/dev/mtd1 of=$MMC/mtd1
#CADDO_PRIMARY 32KB
dd if=/dev/mtd2 of=$MMC/mtd2
#FOTA_REV 32KB
dd if=/dev/mtd3 of=$MMC/mtd3
#MBM FLASH MODE 256KB
dd if=/dev/mtd4 of=$MMC/MBM
#CONFIG 128KB
dd if=/dev/mtd5 of=$MMC/CG31.smg
#BLOB 128KB
dd if=/dev/mtd6 of=$MMC/CG32.smg
#Linux Kernel 1M
dd if=/dev/mtd7 of=$MMC/CG33.smg
#/ezx_user 6M
dd if=/dev/mtd8 of=$MMC/mtd8
#/ezxlocal 7.9M
dd if=/dev/mtd9 of=$MMC/mtd9
#TEST_CMD 128KB
dd if=/dev/mtd10 of=$MMC/mtd10
#LOGO 128KB
dd if=/dev/mtd11 of=$MMC/CG39.smg
#FOTA 768KB
dd if=/dev/mtd12 of=$MMC/mtd12
#RESERVE 128KB
dd if=/dev/mtd13 of=$MMC/mtd13
#/ezx_user 6M
dd if=/dev/mtdblock8 of=$MMC/CG35.smg
#/ezxlocal 7.9M
dd if=/dev/mtdblock9 of=$MMC/CG36.smg
#/ 26M
dd if=/dev/roflash of=$MMC/CG43.smg
#/usr/language 11M
dd if=/dev/roflash1 of=$MMC/CG41.smg
#/usr/data_resource 10M
dd if=/dev/roflash2 of=$MMC/CG34.smg
#/usr/setup 128KB
dd if=/dev/roflash3 of=$MMC/CG42.smg
#/usr/securesetup 124KB
dd if=/dev/roflash4 of=$MMC/CG37.smg
把这段脚本保存为export.sh文件,复制到手机上,在命令行中执行即可导出AP部分到内存卡上,复制到Linux系统进行修改,FAT16不支持软链接,所以不要在手机上修改。
- Motorola E6 Virtual address Maps
虚拟地址 | 大小 | 描述 |
0xFFFF8000-0xFFFFFFFF | 8K | 缓存映射 |
0xFFFF1000-0xFFFF8000 | 28K | 保留区 |
0xFFFF0000-0xFFFF1000 | 4K | 中断向量表 |
0xFFFE0000-0xFFFF0000 | 64K | Xscale缓存刷新区 |
0xFFF00000-0xFFFE0000 | 896K | 固定映射区 |
0xFFE00000-0xFFF00000 | PCI I/O映射空间 | |
0xFFDFF000-0xFFE00000 | DMA映射区 | |
0xFF000000-0xFFDFF000 | 4M | DMA保留区 |
0xF0000000-0x0xFF000000 | 240M | vmalloc() / ioremap() 空间 |
0xEFFFE000-0xF0000000 | 8M | VMalloc保留区 |
0xC0000000-0xEFFFE000 | 内核直接映射区 | |
0xBFFFF800-0xC0000000 | 2M | 内核持久映射区 |
0xBF000000-0xBFFFF800 | 14M | 内核模块映射区 |
0x00001000-0xBF000000 | 用户进程映射区 | |
0x00000000-0x00001000 | 4K | CPU向量页/空指针陷阱 |
备注:
Arm-Linux系统的每个进程独自拥有4G的虚拟地址,其中低端0x00000000-0xC0000000的3G分配给用户空间,0xC0000000-0xFFFFFFFF的1G分配给内核空间。
- MOTO E6 BLOB引导调用分析
BLOB第一阶段执行完后内存布局:
地址 | 说明 |
0xA4000000 | 物理内存结束地址 |
0xA0001000 | BLOB第二段的开始地址 |
0xa000000c | 保存开机原因地址 |
0xA0000008 | 保存BP信号地址 |
0xA0000004 | 保存睡眠中恢复地址 |
0xA0000000 | 物理内存开始地址 |
最后设完栈指针SP->0xA0100000后跳转到了0xA0001000BLOB第二段的开始地址处。
BLOB第二阶段执行完后的内存布局:
首先清除BSS段为0,设置栈指针,并跳转到了main函数。
地址 | 说明 |
0xA4000000 | 物理内存结束地址 |
0xA0400000 | RAM文件系统开始地址(未启用) |
0xA0200000 | Kernel内核开始地址 |
0xA0140000 | 内核参数开始地址(未启用) |
0xA0100000 | BLOB开始地址(未启用) |
0xA0001000 | BLOB第二段的开始地址 |
0xA0000100 | 内核启动参数的位置 |
0xa000000c | 保存开机原因地址 |
0xA0000008 | 保存BP信号地址 |
0xA0000004 | 保存睡眠中恢复地址 |
0xA0000000 | 物理内存开始地址 |
最后在boot_linux中调用0xA0200000Linux Kernel内核开始地址启动了linux内核。
---------------------------------------------------------------------------------------------------------------------------------
RDL3.smg研究:
经过研究发现刷机包SBF解开后产生的RDL3实际上是一个基于RAM的Linux操作系统,其中分为四部分:
1.blob-nohwinit
00000000——0000D637 是可以下载的BLOB引导加载器,主要是加载内核和根文件系统。
2.zImage-ramos
00020000——000E1087 是Linux内核代码,可以直接运行在RAM中。
3.rootfs_ramos.img
00220000——0046AFFF 是Rootfs根文件系统,里面包含了一些基本的linux命令,可以在linux系统下解包。
解包命令 #:mkdir rootfs
#:mount -o loop.o rootfs_ramos.img rootfs
4.erase_table
0061FD00——0061FD8F 是需要镲除的分区地址,详细地址如下表:
CG0 : 10080000-100800C7
CG1 : 100800C8-102ECE7F
CG2 : 10390000-103FFFFF
CG3 : 10040000-10066EB7
CG18 : 10330000-103307FF
------------------------
CG31 : 00060000-0007FFFF
CG32 : 00080000-0009FFFF
CG33 : 000A0000-0019FFFF
CG34 : 001A0000-00B9FFFF
CG35 : 00BA0000-0119FFFF
CG36 : 011A0000-0199FFFF
CG37 : 019A0000-019BFFFF
CG39 : 019E0000-019FFFFF
CG41 : 01AE0000-025DFFFF
CG42 : 025E0000-025EFFFF
CG43 : 02600000-03FFFFFF
------------------------
RDL1 : 03FC8000-03FE7FF7
RDL3 : A0DE0000-A13FFFFFF
相关文章:

摩托罗拉E6系统研究
这是很久以前研究摩托罗拉E6刷机包时总结的一些经验,不一定准确但留个纪念,希望会制作刷机包的高手交流学习。 ------------------------------------------------------------------------------------------------------------------------------- 摩…...

Spring中,ApplicationContext主要的实现类型包括?
Spring中,ApplicationContext主要的实现类型包括FileSystemXmlApplicationContext、ClassPathXmlApplicationContext、XmlWebApplicationContext、AnnotationConfigWebApplicationContext。 FileSystemXmlApplicationContext:这个实现从一个…...

JavaScript青少年简明教程:事件及处理
JavaScript青少年简明教程:事件及处理 在编程语言中,事件(Event)是一种使程序能够响应特定操作或条件发生的机制。它允许程序中的不同部分(比如对象、类或模块)在发生某些特定情况时互相通信或协作。事件驱…...

node_exporter
目录 指标详解常用指标 指标详解 指标描述node_arp_entriesARP(Address Resolution Protocol)表中的条目数量,用于将IP地址映射到MAC地址。node_boot_time_seconds系统启动时间的Unix时间戳,表示从1970年1月1日以来的秒数。node…...

近期在看
1. C Primer 2. 深入理解 FFmpeg 3. 鸿蒙 sdk 开发...

C++篇:C++入门基础(1)
C前言: C 的发展历史可以追溯到1979年,当时C语言以其效率和灵活性成为广泛使用的系统编程语言,但它也有一些限制,例如缺乏直接支持面向对象编程(OOP)的特性。 之后Bjarne Stroustrup(也就是C之父)是C的创始…...

【Linux】网络编程_3
文章目录 十、网络基础5. socket编程socket 常见APIsockaddr结构简单的UDP网络程序 未完待续 十、网络基础 5. socket编程 socket 常见API // 创建 socket 文件描述符 (TCP/UDP, 客户端 服务器) int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服…...

Kafka设计与原理详解
RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即…...

IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
首先是防火墙的常规配置和区域配置 标的有点乱但是选项含义都做了解释,看不懂可以直接按图抄作业。 其次是对需要访问的端口做访问放通 情况1 DDNS位于openwrt网关上,外网访问openwrt,通过端口转发访问内部服务器。此情况需要设置端口转发。 …...

单调栈② | Java | LeetCode 接雨水 最大的矩形
42. 接雨水 暴力法 for循环遍历每一个柱子,内层for循环找到左边和右边比它高的柱子 时间复杂度 n^2 优化:添加一个预处理 定义一个数组,存放该柱子右边比他高的柱子是哪一个 再用一个数组,存放该柱子左边比他高的柱子是哪一个 …...

2024年全国青少年信息素养大赛总决赛日赛程表
2024全国青少年信息素养大赛赛程表分赛场(浙江传媒学院桐乡校区、桐乡技师学院)日期地点时间赛项16日传媒学院8:00-9:00检录 9:00-10:30开赛图形化编程挑战赛(小学1-3年级)A组12:00-13:00检录 13:00-14:30开赛图形化编程挑战赛&am…...

PHP:连接钉钉接口-钉钉回调事件,本地测试数据
前置数据参考 数据说明:参见官方文档回调事件消息体加解密 - 钉钉开放平台 (dingtalk.com) URL后面带的参数: signature5a65ceeef9aab2d149439f82dc191dd6c5cbe2c0×tamp1445827045067&noncenEXhMP4r Post参数: { &quo…...

【C++标准模版库】vector的介绍及使用
vector 一.vector的介绍二.vector的使用1.vector 构造函数2.vector 空间增长3.vector 增删查改4.vector 迭代器的使用1.正向迭代器2.反向迭代器 5.victor 迭代器失效问题(重点) 三.vector不支持 流提取与流插入四.vector存储自定义类型1.存储string2.存储…...

数说故事|引爆社媒的森贝儿IP,品牌如何实现流量变现?
以可爱、雅痞、贱萌......的外表加魔性舞姿出圈的可爱小狗——森贝儿贵宾犬Milo,用“可爱微怒”的表情演绎着当代打工人的“疯态”,并迅速晋升成不少打工人高频使用的表情包。 最近几年,“萌系”爆款IP频出,用小动物的形象、可爱…...

使用openpyxl库对Excel条件格式的深度探索
哈喽,大家好,我是木头左! openpyxl中的条件格式 在openpyxl中,可以使用ConditionalFormatting类来创建和管理条件格式。这个类有两个主要的方法:add_conditional_formatting()和remove_conditional_formatting(),分别用于添加和删除条件格式。 add_conditional_formatt…...

原生javascript中的ajax通信技术
AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。也就是实现前后端交互的功能。以下是使用AJAX的基本步骤和代码演示: 1.创建一个XMLHttpRequest对象: var xhr…...

SpringBoot Vue用自签名证书SSL配置https,http转发到https(整理文章)
要配置https地址访问,需要向服务器商申请和使用SSL证书。由于是测试阶段,我们自己创建SSL证书,叫作自签名证书。 1.创建自签名证书 Vue前端生成自签名证书我们用openssl 参考文章一 参考文章二SpringBoot后端生成自签名证书用JDK自带的keyt…...

嵌入式人工智能(41-基于树莓派4B的串口蓝牙模块AT09-cc2541)
1、串口蓝牙模块AT-09 AT-09是一种串口蓝牙模块,可实现串口与蓝牙之间的数据传输。AT-09模块基于蓝牙4.0技术,具有低功耗、高传输速率和广泛的应用范围。 AT-09模块支持AT指令,通过串口与外部设备进行通信。用户可以使用AT指令对模块进行配…...

C++ 动态规划
子序列子串相关 单个指一个数组或字符串,两个指两个数组或字符串。 最长上升子序列-单个 dp[i]:以下标i为结尾的递增的最长子序列长度。 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 class Solution { public:int l…...

回溯问题总结
一、子集问题 模板问题 给定一个序列[1,n],求这个序列的所有子集 输入描述: 一个正整数n(1 < n < 12) 输出描述: 每个子集一行,输出所有子集。 输出顺序为: (1)元素个数少的子集优先输出;…...

GraphRAG如何使用ollama提供的llm model 和Embedding model服务构建本地知识库
使用GraphRAG踩坑无数 在GraphRAG的使用过程中将需要踩的坑都踩了一遍(不得不吐槽下,官方代码有很多遗留问题,他们自己也承认工作重心在算法的优化而不是各种模型和框架的兼容性适配性上),经过了大量的查阅各种资料以…...

.net # 检查 带有pdf xss
1.解决pdf含javasprct脚本动作,这里是验证pdf内部事件。相关pdf文件下载: 测试pdf文件 相关包 iTextSharp 5.5.13.4 iTextSharp using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser;private Boolean IsPdfSafe(Stream stream){// PdfReader…...

【React】探讨className的正确使用方式
文章目录 一、className的正确用法二、常见错误解析三、实例解析四、错误分析与解决五、注意事项六、总结 在React开发中,正确使用className属性对组件进行样式设置至关重要。然而,由于JavaScript和JSX的特殊性,开发者常常会犯一些小错误&…...

打靶记录5——靶机hard_socnet2
靶机: https://download.vulnhub.com/boredhackerblog/hard_socnet2.ova目标: 取得root权限 涉及攻击方法 主机发现端口扫描SQL注入文件上传蚁剑上线XMLRPC命令执行逆向工程动态调试漏洞利用代码编写 方法 CVE-2021-3493缓冲器溢出漏洞 学习目标 …...

独立站+TikTok达人:自主营销与创意内容的完美结合
在全球电商市场迅猛发展的今天,独立站和TikTok达人的结合正在创造一种全新的电商营销模式。独立站作为电商平台,其自主性和灵活性为商家提供了广阔的发展空间;而TikTok达人凭借其独特的内容创作能力和庞大的粉丝基础,成为推动销售…...

【启明智显分享】适用于多功能养生壶、茶吧机的2.8寸触摸彩屏解决方案
健康生活理念不断深入人心,多功能养生壶、茶吧机等智能产品成为现代家庭的热门小家电。为推动智能家居个性化、多样化发展,启明智显推出了基于SC05 Plus 2.8寸触摸彩屏的多功能养生壶、茶吧机的解决方案,旨在提升养生壶与茶吧机的用户体验与操…...

WAF绕过技术(PKAV团队)
目录 主流WAF的绕过技术 Web容器的特性 1. IIS+ASP的神奇% 2. IIS的Unicode编码字符 3. HPP(HTTP Parameter Pollution): HTTP参数污染 4. 畸形HTTP请求 Web应用层的问题 1. 多重编码问题 2. 多数据来源的问题 WAF自身的问题 1. 白名单机制 2. 数据获取方式存在缺陷…...

『 Linux 』POSIX 信号量与基于环形队列的生产者消费者模型
文章目录 信号量概念POSIX 信号量基于环形队列的生产者消费者模型基于环形队列的生产者消费者模型编码实现基于环形队列的生产者消费者模型发送任务测试 信号量概念 信号量是一种用于多线程或多进程间同步的机制; 其定义是一个整形变量,本质上信号量可以看成是一个计数器,用来描…...

python中的字符串方法
python中的字符串 举个例子先 name = 貂蝉开大 #声明了一个字符串 print(name) # 打印了一个字符串 print(name[0:1] #输出貂蝉 print(name[2:3] #输出开大 扩展方法 find() # 查找字符串中某个字符的索引 index_ = name.find("貂") print(index_) # 输出 …...

python实现consul的服务注册与注销
我在使用consul的时候主要用于prometheus的consul服务发现,把数据库、虚拟机信息发布到consul,prometheus通过consul拿到数据库、虚拟机信息去采集指标信息。 此篇文章前提是已经安装好consul服务以后,安装consul请参考二进制方式部署consul…...