[原创]某摄像头协议分析 | 宜武汇-ag真人国际厅网站

def p2p_decrypt(a1, a2, a3):

 

    # 计算填充的字节数

 

    padding_bytes = (4 - (a2 % 4)) % 4

 

    # 添加填充字节

 

    a1 = b'\x00' * padding_bytes

 

    # 将a1字节数组转换为四字节整数的列表

 

    enc_data = list(struct.unpack(f"<{len(a1) // 4}i", a1))

 

    # 将a3字节数组转换为四字节整数的列表

 

    v3 = np.full(4, a3, dtype=np.int32)

 

    print("解密key四字节整数的列表: ", v3)

 

    # 小端计算

 

    # v9 = [0x8271635a, 0x38172e4b, 0x5a6c7f8d, 0x1f2d3c4b]

 

    v9 = [0x1f2d3c4b, 0x5a6c7f8d, 0x38172e4b, 0x8271635a]

 

 

    v10 = [0x863f1a2b, 0xa5c6f7d8, 0x8371e1b4, 0x17f2d3a5]

 

    # 将v3和v9整数列表里的整数一一对应相加

 

    v4 = list(map(lambda x, y: x y, v3, v9))

 

    # print(v4)

 

    v7 = len(a1) >> 2

 

    print("解密数据循环次数: ", v7)

 

    # 将v3和v10整数列表里的整数一一对应相加

 

    v10 = list(map(lambda x, y: x y, v10, v3))

 

    # 将v4和v10整数列表里的整数一一对应相加

 

    v9 = v4 v10

 

    if v7 > 0:

 

        for v6 in range(v7):

 

            # print(hex(a1[v6]), hex(v9[v6 & 7]))

 

            # 将加密数据整数列表里的整数与v9整数列表里的整数进行异或

 

            enc_data[v6] ^= v9[v6 & 7]

 

    # a1[a2] = 0

 

    # 转换为小端存储的十六进制字符串

 

    hex_string = ''.join([struct.pack('hex() for num in enc_data])

 

    hex_string_len = len(bytes.fromhex(hex_string))

 

    if padding_bytes > 0:

 

        hex_string = bytes.fromhex(hex_string)[:hex_string_len - padding_bytes]

 

        print("解密数据异或后16进制数据: ", hex_string)

 

        return hex_string

 

    else:

 

        hex_string = bytes.fromhex(hex_string)

 

        print("解密数据异或后16进制数据: ", hex_string)

 

        return hex_string

原文链接:https://bbs.kanxue.com/thread-277987.htm

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/原创某摄像头协议分析/

发表评论

邮箱地址不会被公开。 必填项已用*标注

网站地图