HttpCanary解密gzip数据包

cooolr 于 2021-03-23 发布
import gzip

def httpcanary_decompress(body):
    """
    Args:
        body (bytes): 二进制文本
    Returns:
        responseBody (bytes) gzip解密后的二进制文本
    """
    index = body.index(b"\r\n\r\n") + 4
    responseBody = body[index:]

    if responseBody[:2] == b'\x1f\x8b':  # Magic code of gzip
        responseRawBody = responseBody
    else:
        responseRawBody = b''
        while True:
            index = responseBody.index(b'\r\n')
            if index == 0:
                responseBody = responseBody[index + 2:]
                continue
            length = int(responseBody[:index].decode(), 16)
            if length == 0:
                break
            responseBody = responseBody[index + 2:]
            responseRawBody += responseBody[:length]
            responseBody = responseBody[length:]

    responseBody = gzip.decompress(responseRawBody)
    return responseBody