1.Signatureï¼Checksumï¼Linkï¼ä»ä¹åºå«ï¼åºè¯¥ä¸è½½åªä¸ªï¼
2.WSL2 安装并下载、源码编译AOSP源码
3.第二届“祥云杯” WP-第三部分| WHT战队
4.CRC-8和CRC-16算法
5.PostgreSQL 校验和
Signatureï¼Checksumï¼Linkï¼ä»ä¹åºå«ï¼åºè¯¥ä¸è½½åªä¸ªï¼
Maven 3.2.3 (Binary tar.gz)ï¼Maven 3.2.3 (Source tar.gz)ï¼Maven 3.2.3 (Source zip)ï¼è¿ä¸ä¸ªï¼ç¬¬ä¸ä¸ªæ¯çæ£éè¦ä½¿ç¨çmavenå·¥å ·ï¼å两个æ¯mavençæºç ï¼ä¾å¦ä¹ mavenææ¯å®ç°ä½¿ç¨ãå¨eclipseä¸åºè¯¥ä½¿ç¨Maven 3.2.3 (Binary tar.gz)ï¼å½ç¶eclipseééè£ æmavenæ件ã
Signature表示æ°åç¾å
Checksumæ¯ä¸ç§md5ç çæ ¡éªåçæå·¥å ·
Linkï¼ä¸ç¥éä½ è¯´çå¥ææï¼è¡¨é¢ä¸ç解就æ¯è¿æ¥çææã
WSL2 安装并下载、源码编译AOSP源码
安装WSL2
参考链接:安装WSL要求Windows 版本及更高版本(内部版本及更高版本)或Windows 。源码在power shell或cmd执行如下命令。源码
执行完之后就安装了Linux for Windows,源码并且打开了Windows的源码dnf e源码虚拟机平台和Linux子系统功能,并设置wsl默认版本为2。源码也可以手动安装,源码先在控制面板中找到启用或关闭Windows功能,源码勾选虚拟机平台和适用于Linux的源码Windows子系统功能。然后在应用商店找到Linux子系统(例如Ubuntu)进行安装。源码
如果是源码升级安装wsl,可能还需要同时升级linux内核。源码直接下载msi升级安装文件,源码点击安装即可。源码具体可参考:旧版WSL的手动安装步骤
硬盘设置
这里分为两类,一是将AOSP源码放在Windows文件系统下,二是将源码放置在WSL中。对于前者,需要修改文件目录的大小写敏感,新建完源码目录后,用管理员身份打开Windows的Powershell,执行以下命令:
其中的path就是刚新建用来同步AOSP源码的目录,需要注意的是,这个命令只对指定的目录有效,不会改变已存在的子目录的大小写敏感,所以要在同步代码之前设置好。乌索源码下载根据文章:WSL编译AOSP必要的几个前置工作,还需要重新挂载磁盘。如果源码放在了Windows驱动器上,比如说F:\aosp,在WSL中的路径应该是/mnt/f/aosp这种形式的,此时需要以drvfs文件系统重新挂载盘符,否则编译到中途会报错:
注意,每次WSL重启,在编译之前都需要执行这步操作,也可以将它新建成WSL的一个开机服务,确保每次打开WSL都会执行这两段命令。如果是将源码放置在WSL中,需要注意WSL默认占用C盘空间,保证C盘有足够的空间,或者将WSL迁移到别的盘符。因为我的硬盘没有分区,不用担心占满C盘的空间,所以直接将源码放在WSL中编译。WSL安装之后默认是GB大小,对于AOSP的编译是不够的。可通过df命令查看容量,下面是我编译完之后的容量,可以看到占用了GB。
扩展WSL 2虚拟硬盘的大小 如何管理WSL磁盘空间
输出如下:
经过如上操作,将wsl的虚拟磁盘大小调整到1TB。
源码下载
创建bin,免费源码网站视频并加入path:
下载repo:
下载代码有两种方式,使用每月更新的初始化包或者传统初始化方式。
下载mirrors.tuna.tsinghua.edu.cn...,下载完成后记得根据checksum.txt的内容校验一下。由于所有代码都是从隐藏的.repo目录中checkout出来的,所以我们只保留了.repo目录,下载后解压再repo sync一遍即可得到完整的目录。使用方法如下:
此后,每次只需运行repo sync即可保持同步。
建立工作目录并初始化仓库: repo init -u mirrors.tuna.tsinghua.edu.cn... 如果需要某个特定的Android版本(列表): repo init -u mirrors.tuna.tsinghua.edu.cn... -b android-4.0.1_r1 同步源码树(以后只需执行这条命令来同步): repo sync 详细可见:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror Android源码(AOSP)下载与编译 - 掘金
设置WSL内存大小
直接编译源码,会因为内存不足导致失败,通过free -m查看内存,只有4GB内存,swap空间只有2GB。可以通过设置WSL配置文件来修改相关配置属性。在用户目录下新建.wslconfig文件,在文件管理器输入%USERPROFILE%可找到用户文件夹。注意这里新建.wslconfig文件不要用新建文本文件的方式,这样文件可能没法被正确识别。可以通过命令行输入code .wslconfig的方式。
配置文件如下,根据自己的硬件配置尽可能多的分配多点资源,在编译完成后也能修改回来。我电脑是GB内存,所以给WSL配置GB内存,还有GB swap空间。弹出视图源码分享
编译源码
编译源码就是常规流程,lunch项根据自己需要进行选择,编译线程数根据机器配置选择。
编译可能会报错缺少库文件,直接安装即可。sudo apt-get install libncurses5 如果需要编译出CMakeLists文件,方便导入CLion,需要在编译前添加环境变量。
编译成功!!
导入Clion效果。
若需要导入Android Studio中,还需要生成配置索引。
这一步需要Java环境,提前安装一下。sudo apt install openjdk--jdk
最终效果如下:
第二届“祥云杯” WP-第三部分| WHT战队
Rev_Dizzy
EXP:
链接: pan.baidu.com/s/1bdWuig... 提取码: g8f8
lemon
EXP:
Secrets_Of_Admin操作内容:
首先打开链接如下:
源码中有admin的密码
登录,是一个内容生成的共功能
审计代码,先看这个POST内容生成功能路由
content我们可以控制输入,输入的内容被写入在/api/files/一个文件中,名称可由传入checksum控制
filename、checksum、username均可控,那么就可以利用可控制的变量重新写入内容,限制是IP是.0.0.1
那么大致思路就是用content构造xss,然后就会去访问/api/files传三个参数写入到数据库种,接访问/api/files/id得到返回的奇缘源码库内容
不过这里对content有一些防范XSS的机制,过滤了一些关键字。需要想办法bypass
这里是Express的框架,includes()的检测对数组不起作用
所以使用传入数组形式即可绕过,有点类似PHP中的一些绕过方法
最终构造payload,payload如下:
访问/api/files/1下载
成功进行了任意文件读取,接着根据源码中的提示读取/files/flag即可得到flag
其实使用payload在burp里跑一下也可以得到答案,这是比赛的时候截取的当时做出来的,结果又使用上面的方案发现也能出答案:
CRC-8和CRC-算法
在汽车通信系统中,CRC校验是确保数据传输准确性的关键技术。以CRC8为例,它作为XOR校验的升级,主要用于检测报文中的错误。发送前,会通过Rolling counter和Checksum进行校验,Rolling counter用于检测丢帧,Checksum(如CRC8)则确保同一时刻的报文无误。
CRC8的原理是,发送端根据报文生成一个1字节的校验码,使用特定的生成多项式,如g(x)=1·x^8+0·x^7+0·x^6+1·x^5+1·x^4+0·x^3+0·x^2+0·x^1+1·x^0,转换为二进制即0x。接收端使用相同的生成多项式进行校验,若计算结果与接收到的校验码相符,就确认数据传输正确。
报文编码有Intel和Motorola两种格式,影响了字节的排列顺序。CAN报文按照高位MSB到低位LSB的顺序发送。举例来说,传输车速0x,Motorola编码方式会把高位放在低字节的高位,Intel编码则相反。
计算CRC8时,先将数据左移8位,然后逐位与生成多项式的二进制形式进行异或运算。对于每个字节,可能需要进行多次判断、移位和异或操作。使用查表法可以简化计算,预先计算所有字节的CRC结果,查询时直接获取,大大减少计算量。
CRC是CRC校验的另一种版本,它有多种标准,如CRC_CCITT、CRC_XMODEM等,尽管原理相似,但在数据输入和输出的处理方式上有所区别。CRC的计算流程通常包括选择初值、异或数据、根据最高位移位和异或多项式、重复处理所有输入数据,最终生成位校验码。
总的来说,CRC校验是通过复杂的算法保证数据传输的准确性和完整性,不同的版本(如CRC8和CRC)在计算细节和标准上有所差异,但核心原理是一致的。如果你对这些算法感兴趣,可以关注汽车控制与人工智能微信公众号获取更详细的源码资料。
PostgreSQL 校验和
在计算机系统中,校验和(checksum)用于检测数据在传输或存取过程中是否发生错误。PostgreSQL自9.3版本起支持校验和功能,旨在检测由磁盘或I/O系统导致的数据可用性问题。本文将详细介绍PostgreSQL中校验和的使用方法及其工作原理。
PostgreSQL通过在数据页上启用校验和功能,可以检测到由I/O系统引发的潜在数据损坏问题。用户可以通过在初始化时使用-k或--data-checksums参数开启此功能。然而,开启校验和可能导致性能下降,因此仅在初始化阶段设置,无法在运行时更改。一旦启用,校验和将应用于所有数据库中的所有对象。
校验和功能引入了一个名为ignore_checksum_failure的GUC参数,用于控制在校验和失败时的处理方式。如果设置为true,校验和失败不会产生错误,而是向客户端发送警告。然而,校验和失败表明磁盘上的数据已损坏,忽略此类错误可能导致数据损坏的扩散,甚至导致系统崩溃。因此,如果启用校验和,建议将ignore_checksum_failure参数设置为false。
在PostgreSQL中,校验和在从缓冲池刷入存储时设置。当数据页再次从存储读取到缓冲池时,会进行校验。在FlushBuffer过程中,通过复制数据页内容并计算校验和以确保数据页内容与校验和保持一致。如果存在其他进程在只加缓冲池共享锁的情况下并发修改数据页中的内容(如指示位),可能导致校验和值在刷盘过程中发生变化。为确保数据页内容与其校验和的一致性,PostgreSQL采用先复制页,然后计算并设置校验和值的方法。
校验和算法基于FNV-1a hash算法改造而来,结果为位无符号整型。PageHeaderData中的pd_checksum字段用于存储位无符号整型校验和值。pg_checksum_block函数计算数据页的位校验和值,具体算法在源码中详细实现。
当数据页从存储读入内存时,PostgreSQL会检测其可用性。检测不仅针对非零页(正常初始化的页),还针对全零页(所有内容均为零的页)。全零页的出现通常是在特定场景下,例如表中某个进程在扩展表时添加了新页,但在WAL日志写入存储之前,进程崩溃。重启时会读取到该全零页。
对于非零页,检测其校验和是否一致以及页头信息是否正确。若校验和失败但页头信息正确,根据ignore_checksum_failure值判断验证是否通过;对于全零页,如果为全零,则验证通过。若验证失败,则有两种处理方式:记录日志或不记录日志,具体取决于忽略校验和失败情况下的处理策略。
在数据页写入存储时,如果写入失败,可能导致数据页的部分损坏,即数据页的一部分数据写入成功,一部分数据写入失败。为解决此类问题,PostgreSQL引入了full_page_writes特性。此外,Hint Bits通常用于标识事务状态,但当使用校验和时,其变化可能导致校验和值改变。如果数据页发生部分写操作,恰好修改了某些Hint Bits,可能会导致校验和异常,但不影响数据页的正常使用。为应对这种情况,checkpoint后页面第一次标记为dirty时,需要记录一个全页快照至WAL日志中,以应对因Hint Bits更新导致的校验和失败问题。
为了查看数据页的校验和,PostgreSQL 在pageinspect插件中添加了函数page_checksum()。此外,使用page_header()函数也可以查看校验和值。
总结来说,校验和功能使PostgreSQL具备检测因硬件故障或传输导致的数据不一致的能力。一旦检测到异常,通常会终止当前事务,以便用户尽早察觉数据异常并进行恢复。尽管开启校验和会引入一定开销,但对于数据可用性要求较高的场景,建议同时开启full_page_writes和校验和功能。这样可以在避免数据丢失的同时,尽早发现并记录WAL日志中的全页快照,以应对数据损坏问题。