OpenHarmony编译
学习一波,之前搞过hi3861开发板的oh源码编译,不过那个是轻量系统liteos-m,看看全量编译是什么情况。 环境 Ubuntu 20.04虚拟机 已配置gitee ssh公钥 sudo dpkg-reconfigure dash切换shell为bash 安装依赖1sudo apt-get update; sudo apt-get install binutils; sudo apt-get install binutils-dev; sudo apt-get install git; sudo apt-get install git-lfs; sudo apt-get install gnupg; sudo apt-get install flex; sudo apt-get install bison; sudo apt-get install gperf; sudo apt-get install build-essential; sudo apt-get install zip; sudo apt-get install curl; sudo apt-get...
OpenHarmony浅析
阅读下OpenHarmony的gitee仓库 组件成分系统架构内核层、系统服务层、框架层、应用层 内核层内核层包括内核子系统与驱动子系统,内核子系统包括Linux kernel和lite os,Linux Kernel为标准全量系统;lite os为RTOS系统,分为轻量系统和小型系统,轻量系统适合硬件资源极其有限的硬件设备(ARM Cortex-M),,小型系统则介于标准系统与轻量系统之间(ARM...
Hi3861 OTA功能介绍
StashRecvDataToBuffer函数功能分析函数功能概述StashRecvDataToBuffer函数是OTA升级过程中的核心数据存储函数,负责将接收到的升级数据缓存到内存或写入到存储设备的HAL层。 函数签名1static int StashRecvDataToBuffer(unsigned char *buffer, unsigned int startAddr, unsigned int endAddr) 参数说明 buffer: 要存储的数据缓冲区 startAddr: 数据的起始地址(相对于当前组件的偏移) endAddr: 数据的结束地址(相对于当前组件的偏移) 函数执行流程1. 信息组件处理分支123456if (g_currentDloadComp.isInfoComp) { if (CopyToDloadCompBuffer(buffer, (endAddr - startAddr)) != OHOS_SUCCESS) { printf("StashRecvDataToBuffer...
CVE-2021-37975复现
CVE-2021-37975复现环境配置 v8源码 tag: 9.4.146.16 depot_tools 修改depot_tools python版本为<3.10(python3_bin_reldir.txt) 漏洞背景知识CVE-2021-37975 是产生在V8 GC模块的UAF漏洞,利用堆喷可以在原地址申请一个对象,新对象跟释放对象的类型不一致,可以造成类型混淆,从而实现利用。 WeakMapjs中的WeakMap不支持迭代以及key(),values()和entries()方法,只有以下方法: weakMap.get(key) weakMap.set(key, value) weakMap.delete(key) weakMap.has(key)也就是说,想要获取value,只能通过get方法,传入key获取。当key被delete时,value无法被访问。在GC过程中,当weakMap的key能被访问时,value也能被访问,即key, value都为黑色。当delete后,两者都为白色。 四种数据结构 next_ephemerons: 当(key,...
Mark Compact Sweep
V8的内存回收机制之Mark-Compact的Sweep功能其定义位于//v8/src/heap/mark-compact.cc的MarkCompactCollector::Sweep函数:完成工作: 按照特定顺序清理v8堆中的各个内存空间(大对象,普通页,新生代对象) 检查是否为MemoryChunk::BLACK_ALLOCATED标志位,代表为存活对象,不是则进行下一步检查 检查是否标记过,是则代表存活,否则代表对象已死亡,需要释放;普通页以及新生代内存释放操作在evacuate阶段进行。showLineNumbers123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869void MarkCompactCollector::Sweep() { DCHECK(!sweeper_->sweeping_in_progress()); ...
CVE-2021-3449漏洞原理分析与复现
CVE-2021-3449空指针引用漏洞原理分析漏洞描述该漏洞为公开漏洞,漏洞编号为CVE-2021-3449,漏洞类型为空指针引用漏洞,存在于OpenSSL的1.1.1-1.1.1j版本,包含11.1.4目标PA设备中的开源组件OpenSSL版本1.1.1g。官方描述信息如下: 漏洞原理当TLS 1.2服务器在重新协商时,若客户端发送的ClientHello消息省略了初始握手存在的signature_algorithms扩展,但包含signature_algorithms_cert扩展,会触发空指针解引用,导致服务崩溃(拒绝服务攻击)。 发送恶意ClientHello请求后,在下图代码1732行tls1_lookup_sigalg函数位置发生空指针引用漏洞,其中由于signature_algorithms被省略,导致ptmp指针为空,出现空指针引用漏洞。 漏洞验证当建立renegotiation信息时,存在空指针引用漏洞。验证漏洞POC报文如下: 发送POC,测试程序ASAN检测到空指针引用错误,产生崩溃时的函数调用链如下图:
Write Barrier
V8 Write Barrier 在垃圾回收(Garbage Collection, GC)中,write barrier(写屏障) 是一种机制,用于在程序运行时,监控和记录堆内存中对象引用的变化,以便垃圾回收器能够正确地管理内存。它是一个非常重要的优化技术,尤其是在现代垃圾回收器中,比如 V8 引擎的 GC。 写屏障的作用写屏障的主要作用是在对象引用发生变化时,通知垃圾回收器,从而使垃圾回收器能够高效地完成以下任务: 1. 支持分代垃圾回收(Generational GC)在分代垃圾回收中,堆被分为两代: 新生代(Young Generation):存放生命周期较短的对象。 老年代(Old Generation):存放生命周期较长的对象。 分代垃圾回收的一个关键点是记录老年代对象对新生代对象的引用,因为垃圾回收器在回收新生代时,只扫描新生代对象和这些老年代到新生代的引用,而不扫描整个老年代。 写屏障的作用在于: 当老年代对象的某个字段指向了一个新生代对象时,写屏障会记录这个引用关系,通常通过一个记忆集(Remembered...
CVE-2021-23840漏洞原理分析与复现
CVE-2021-23840整数溢出漏洞漏洞概述该漏洞为公开漏洞,漏洞编号为CVE-2021-3449,漏洞类型为空指针引用漏洞,存在于OpenSSL的1.1.1-1.1.1i版本,包含11.1.4目标PA设备中的开源组件OpenSSL版本1.1.1g。官方描述信息如下: 漏洞原理比对修复版本,在修复版本增加的内容check如下: 根据其注释,要求(inl-j) & ~(bl -1)的值不能超过 INT_MAX - bl。 存在漏洞代码如下,在漏洞函数evp_EncryptDecryptUpdate内第350行进入if(i !=0)分支,在第351行进入else分支,此时openssl会进行加密算法的padding部分,即将不是规定分组大小整数倍的长度补充到分组大小整数倍。此时会将*outl +=...
V8内存回收机制
V8内存回收机制V8 采用的垃圾回收算法(2019年)内存回收机制的基本组成部分 识别存活/已死亡对象 回收死亡对象的内存 整合分片化内存(可选) v8垃圾回收机制分为Major GC和Minor GC两种内存回收器 Major GC:Mark Compact(针对整个堆空间) Minor GC:Scavenge & Minor Mark Sweep(针对新生代) Major GC (Full Mark-Compact)major gc负责从整个堆内存中回收垃圾内存。 上图为最简单的版本,将Major GC 分为三个阶段: marking,...
鸿蒙CTF出题
很荣幸能给鸿蒙CTF出题,最近一直在忙别的活,因此出题有不足的地方请见谅。。。(听说决赛上一开始没给固件然后大家都卡在了提固件上,出题人就情不自禁地轻哼起来XD 以下为出题过程的记录总结,可能思路存在跳跃、逻辑不清晰、前后不一致等问题,请各位师傅见谅 1. 出题思路在openharmony的系统内存放了升级包固件的解密程序,即已获得旧版本固件shell(或者说有能力获取shell),需要利用升级程序中的解密程序解包更新后的加密固件。flag则打包存放在更新加密固件中。 2. 环境搭建使用的工具和环境 Windows 11 Ubuntu 20.04 Visual Studio Code DevEco Device Tool 小熊派Hi3861开发板 0x01 搭建开发环境(Windows)下载安装DevEco Device...
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)