• 抖音x-gorgen 0404开源


    # coding:utf-8
     
    from time import time
    from hashlib import md5
    from copy import deepcopy
    from urllib.parse import urlparse
    from urllib.parse import parse_qs
    from urllib.parse import urlencode
    import requests
    import json
     
     
    class XGorgon0404:
        def encryption(self):
            tmp = ''
            hex_zu = []
            for i in range(0, 256):
                hex_zu.append(i)
            for i in range(0, 256):
                if i == 0:
                    A = 0
                elif tmp:
                    A = tmp
                else:
                    A = hex_zu[i - 1]
                B = self.hex_str[i % 8]
                if A == 84:
                    if i != 1:
                        if tmp != 85:
                            A = 0
                C = A + i + B
                while C >= 256:
                    C = C - 256
                if C < i:
                    tmp = C
                else:
                    tmp = ''
                D = hex_zu[C]
                hex_zu[i] = D
            return hex_zu
     
        def initialize(self, debug, hex_zu):
            tmp_add = []
            tmp_hex = deepcopy(hex_zu)
            for i in range(self.length):
                A = debug[i]
                if not tmp_add:
                    B = 0
                else:
                    B = tmp_add[-1]
                C = hex_zu[i + 1] + B
                while C >= 256:
                    C = C - 256
                tmp_add.append(C)
                D = tmp_hex[C]
                tmp_hex[i + 1] = D
                E = D + D
                while E >= 256:
                    E = E - 256
                F = tmp_hex[E]
                G = A ^ F
                debug[i] = G
            return debug
     
        def handle(self, debug):
            for i in range(self.length):
                A = debug[i]
                B = choice(A)
                C = debug[(i + 1) % self.length]
                D = B ^ C
                E = rbpt(D)
                F = E ^ self.length
                G = ~F
                while G < 0:
                    G += 4294967296
                H = int(hex(G)[-2:], 16)
                debug[i] = H
            return debug
     
        def main(self):
            result = ''
            for item in self.handle(self.initialize(self.debug, self.encryption())):
                result = result + hex2string(item)
     
            a = hex2string(self.hex_str[7])
            b = hex2string(self.hex_str[3])
            return '0404{}{}0001{}'.format(a, b, result)
     
        def __init__(self, debug):
            self.length = 20
            self.debug = debug
            self.hex_str = [30, 0, 224, 200, 14, 69, 1, 208]
     
     
    def choice(num):
        tmp_string = hex(num)[2:]
        if len(tmp_string) < 2:
            tmp_string = '0' + tmp_string
        return int(tmp_string[1:] + tmp_string[:1], 16)
     
     
    def rbpt(num):
        result = ''
        tmp_string = bin(num)[2:]
        while len(tmp_string) < 8:
            tmp_string = '0' + tmp_string
        for i in range(0, 8):
            result = result + tmp_string[7 - i]
        return int(result, 2)
     
     
    def hex2string(num):
        tmp_string = hex(num)[2:]
        if len(tmp_string) < 2:
            tmp_string = '0' + tmp_string
        return tmp_string
     
     
    def X_Gorgon(url, data, cookie, model='utf-8'):
        gorgon = []
        # 1632828476
        Khronos = hex(1648964535)[2:]
        # Khronos = hex(int(time()))[2:]
        url_md5 = md5(bytearray(url, 'utf-8')).hexdigest()
        for i in range(0, 4):
            gorgon.append(int(url_md5[2 * i: 2 * i + 2], 16))
        if data:
            if model == 'utf-8':
                data_md5 = md5(bytearray(data, 'utf-8')).hexdigest()
                for i in range(0, 4):
                    gorgon.append(int(data_md5[2 * i: 2 * i + 2], 16))
            elif model == 'octet':
                data_md5 = md5(data).hexdigest()
                for i in range(0, 4):
                    gorgon.append(int(data_md5[2 * i: 2 * i + 2], 16))
        else:
            for i in range(0, 4):
                gorgon.append(0)
        if cookie:
            cookie_md5 = md5(bytearray(cookie, 'utf-8')).hexdigest()
            for i in range(0, 4):
                gorgon.append(int(cookie_md5[2 * i: 2 * i + 2], 16))
        else:
            for i in range(0, 4):
                gorgon.append(0)
        for i in range(0, 4):
            gorgon.append(0)
        for i in range(0, 4):
            gorgon.append(int(Khronos[2 * i: 2 * i + 2], 16))
        return {'X-Gorgon': XGorgon0404(gorgon).main(), 'X-Khronos': str(int(Khronos, 16))}
     
     
    # 从url中截取参数
    def splitParams(url):
        params = url.split('?')[1]
        return params
     
     
    # 替换url中的某些参数的值
    def replaceParams(url, parms):
        parseResult = urlparse(url)
        # print(parseResult)
        param_dict = parse_qs(parseResult.query)
        # print(param_dict)
        for k in parms:
            if param_dict.get(k):
                param_dict[k][0] = str(parms[k])
        # print(param_dict)
        _RES = {}
        for k in param_dict:
            _RES[k] = param_dict[k][0]
        return '%s://%s%s?%s' % (parseResult.scheme, parseResult.netloc, parseResult.path, urlencode(_RES))
     
     
    if __name__ == '__main__':
        param = "aid=1233&ssmix=a&tt_data=a&config_retry=b&language=ja&"
        cookie = ''
        body = '{"magic_tag":"ss_app_log",}'  # 没有传递空
        #
        xg = X_Gorgon(param, body, '')
        print(xg)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181

    VX:Ays971124

  • 相关阅读:
    始祖双碳新闻 | 2022年7月20日碳中和行业早知道
    Android 项目Gradle文件讲解(Groovy和Kotlin)
    (最新+详细+Pycharm远程调试GUI程序)解决qt.qpa.xcb: could not connect to display问题
    HOOPS Commuicator:基于Web的交互式2D/3D图形轻量化引擎
    Amazon Lightsail——兼具亚马逊云科技的强大功能与 VPS 的简易性
    进程终止(你真的学会递归了吗?考验你的递归基础)
    分布式事务:两阶段提交与三阶段提交
    【C语言】【百度笔试】写一个代码判断当前机器的字节序(大小端)
    Linux内核顶层Makefile前期工作分析一
    《500强高管谈VE》-VE活动带来的企业体制革新
  • 原文地址:https://blog.csdn.net/qq_41155858/article/details/125528596