├── README.md ├── RSAUtil.py ├── akamai1.75 ├── 1.js ├── akamai1.75_ast.js └── test.py ├── gee4 ├── 1.js ├── bg.jpg ├── geet4.py └── slice.jpg ├── hlg.zip ├── 云汉芯城.js ├── 拼刀刀-店铺后台数据采集 ├── README.md ├── express_api.js ├── main.exe ├── pdd-易语言源码.e ├── pdd_anti-content.js └── python-demo.py ├── 数美ast.js ├── 数美滑块.py └── 豆瓣.py /README.md: -------------------------------------------------------------------------------- 1 | # JsReverse 2 | js逆向代码-成品 3 | -------------------------------------------------------------------------------- /RSAUtil.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @Time : 2023/9/26 4 | @Author : luoyu 5 | """ 6 | from Crypto.PublicKey import RSA 7 | from Crypto.Cipher import PKCS1_OAEP 8 | import base64 9 | import binascii 10 | 11 | 12 | class RSAUtil: 13 | def __init__(self, key_str: str = None, modulus: str | int = None, exponent: str | int = None): 14 | """ 15 | 参数样式 16 | :param key_str: 17 | 第一种: 18 | "-----BEGIN PUBLIC KEY-----\n" \ 19 | "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5gsH+AA4XWONB5TDcUd+xCz7ejOFHZKlcZDx+pF1i7Gsvi1vjyJoQhRtRSn950x498VUkx7rUxg1/ScBVfrRxQOZ8xFBye3pjAzfb22+RCuYApSVpJ3OO3KsEuKExftz9oFBv3ejxPlYc5yq7YiBO8XlTnQN0Sa4R4qhPO3I2MQIDAQAB\n" \ 20 | "-----END PUBLIC KEY-----" 21 | 第二种: 22 | 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5gsH+AA4XWONB5TDcUd+xCz7ejOFHZKlcZDx+pF1i7Gsvi1vjyJoQhRtRSn950x498VUkx7rUxg1/ScBVfrRxQOZ8xFBye3pjAzfb22+RCuYApSVpJ3OO3KsEuKExftz9oFBv3ejxPlYc5yq7YiBO8XlTnQN0Sa4R4qhPO3I2MQIDAQAB' 23 | 24 | :param modulus: 25 | 第一种(str类型): 26 | '00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81' 27 | 第二种(int类型): 28 | 136153462421446847404340432441046996374735571025589056967906613334049032306309642600950180794472974184474850029075084679952125029724775675860862428869529368335136951744118770626613042094193316007621445630035543273179259178158896311604233203144417656446177150555868699549873157540592293125574640692009097735041 29 | 30 | :param exponent: 31 | 第一种(str类型): 32 | "010001" 33 | 第二种(int类型): 34 | 65537 35 | """ 36 | if key_str and "-----" in key_str: 37 | key_str = key_str.replace("\n", "").replace(" ", "").split("-----") 38 | key_str = [x for x in key_str if len(x) > 25][0] 39 | key_bytes = base64.b64decode(key_str) 40 | public_key = RSA.importKey(key_bytes) 41 | elif key_str: 42 | key_bytes = base64.b64decode(key_str) 43 | public_key = RSA.importKey(key_bytes) 44 | elif modulus and exponent: 45 | if isinstance(modulus, str) and isinstance(exponent, str): 46 | modulus = int(modulus, 16) 47 | exponent = int(exponent, 16) 48 | public_key = RSA.construct((modulus, exponent)) 49 | else: 50 | raise Exception("搞什么,给的key不合符类型啊~") 51 | self.bits_len = int(public_key.size_in_bits() / 1024 * 100) 52 | self.cipher = PKCS1_OAEP.new(public_key) 53 | 54 | def __encrypt(self, plaintext: str) -> bytes: 55 | # 这里采用分段加密,防止明文太长 56 | ciphertext = b"" 57 | for i in range(0, len(plaintext), self.bits_len): 58 | ciphertext += self.cipher.encrypt(plaintext[i: i + self.bits_len].encode()) 59 | return ciphertext 60 | 61 | def encrypt_toString(self, plaintext: str) -> str: 62 | # 一般来说,都报错,因为不能保证你的结果就一定能转成str 63 | return self.__encrypt(plaintext).decode('utf-8') 64 | 65 | def encrypt_toBase64(self, plaintext: str) -> str: 66 | return base64.b64encode(self.__encrypt(plaintext)).decode('utf-8') 67 | 68 | def encrypt_toHexStr(self, plaintext: str) -> str: 69 | return binascii.b2a_hex(self.__encrypt(plaintext)).decode('utf-8') 70 | 71 | def encrypt_toBytes(self, plaintext: str) -> bytes: 72 | return self.__encrypt(plaintext) 73 | 74 | 75 | if __name__ == '__main__': 76 | # 使用示例 77 | plaintext = "Spider 乾坤!" 78 | 79 | public_key_str = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAok58IrYXjeFjb6hPgrcvKis43ARDVIqowS2AJKivDp4+8uKDCWnjzBZTsuVvwKPzvVCxBzON2/DPpHU3wnRtdKSVzWju7HMKhuLxe04FsVw8+xvZTmguBj4jTczNLSLjK13lQr46J8j7JrmVUlPqGxIL/Bd3HNAIFuarZQkDsgx5fvdNrMbmT4edr1b3A8wRkhfo9tuE5Tmlx0YVUwybzcI6hgLggCfNwwaClXyBt08NbGSIBcKYKjiQErND0EOnWcGyto7EhkpgGRfAeESo3hbmsiabThLd4t9iOWVHFSl+7B0q+1IGFjSo9qkvNdMUI4ZYdIKq+nCHufpuFMl7SwIDAQAB" 80 | # public_key_str = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5gsH+AA4XWONB5TDcUd+xCz7ejOFHZKlcZDx+pF1i7Gsvi1vjyJoQhRtRSn950x498VUkx7rUxg1/ScBVfrRxQOZ8xFBye3pjAzfb22+RCuYApSVpJ3OO3KsEuKExftz9oFBv3ejxPlYc5yq7YiBO8XlTnQN0Sa4R4qhPO3I2MQIDAQAB\n-----END PUBLIC KEY-----" 81 | # public_key_str = """ 82 | # -----BEGIN PUBLIC KEY----- 83 | # MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxswpnvTGXHaDHawDl6Vs 84 | # wYeL3Y05jFB8JWpVSFqk6XzElvKOByeDx1CQ0J4T3L1wb3O35KkSb+37+cBFB0vj 85 | # E510/gQg3n1DLYGy2QYa7rJ5e0sCyHZZBL1f8cN5Ei1PemOCeEk8uKHUe50AEBpf 86 | # 4GsJMSJ2QdZ7Wn46hjex9J/nVi/OPgsLUwzL6Ty92kV/96dWypHxRqBqXsY1WOeZ 87 | # S6nIObKv+5/6nDoatEe5R8L0W7iCAwJbrCP4BsD/CAig0vlk12e0u+CRPJzg11KL 88 | # kIGFCTIY3SgLyAg8RYaP6WQkDrKBCdLqQITvo3KShA+UZM0ftToVqObCG7dspSW/ 89 | # CIiwq/RXX9D/PJkvFJjMrpC18yTUZFE0cjVmYh9fr8E3BZZFtgo1/Aoi62QCnK8F 90 | # vpv8hEN4b4m5pyM6WsXDZCmT1EPzCYJgYIaZHNC0eb9YVE3Wh/GAw7JhAsZXF4Ex 91 | # xkH2E1Hm13ae7xoF8ly4h1nsVi8+E80GyIvTHo3+mDD7qZOetQyxV5jG1fhFk+tD 92 | # uf7Jp4Ruu6YOmDT3jW8uSsLIMz9NiB7zunxj+nZU6a6GSgIdyE6gLKXhFQzA0M3d 93 | # kMjNflT2vUnrHocJl9v3EgJKJ/InY0qjFYCfQ2EZKHGwqDw2u0i/NBRzPlbcSClx 94 | # ekX0cxtzTKuVLhoMYrSrVNMCAwEAAQ== 95 | # -----END PUBLIC KEY----- 96 | # """ 97 | rsa = RSAUtil(key_str=public_key_str) 98 | # 99 | # e = "010001" 100 | # m = '00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81' 101 | # rsa = RSAUtil(modulus=m, exponent=e) 102 | 103 | # e = 65537 104 | # m = 136153462421446847404340432441046996374735571025589056967906613334049032306309642600950180794472974184474850029075084679952125029724775675860862428869529368335136951744118770626613042094193316007621445630035543273179259178158896311604233203144417656446177150555868699549873157540592293125574640692009097735041 105 | # rsa = RSAUtil(modulus=m, exponent=e) 106 | 107 | # 加密 108 | encrypted_text = rsa.encrypt_toBase64(plaintext) 109 | # encrypted_text = rsa.encrypt_toHexStr(plaintext) 110 | # encrypted_text = rsa.encrypt_toString(plaintext) 111 | # encrypted_text = rsa.encrypt_toBytes(plaintext) 112 | print("加密结果:", encrypted_text) 113 | -------------------------------------------------------------------------------- /akamai1.75/1.js: -------------------------------------------------------------------------------- 1 | window=global; 2 | location={ 3 | href:'https://www.koreanair.com/booking/select-flight/departure' 4 | } 5 | var document={ 6 | "URL":'https://www.koreanair.com/booking/select-flight/departure', 7 | "abck_old_cookie":'99D882422C9A970CB9EC64BA1B8E0EF6~0~YAAQD4yUGzbQKyKCAQAA4jAQVwg8pEwjmxZiqx68t6jfyAxBdlJiF4lDVkJi0L00iSyxxNmv9cyF1BMFfEfn5/bSV2MzWCJU9DcbuSFkHZnJf128HCUzKVGV9c65rF2ctwHu8d2UYRaa6ITvgPm854bclqbafAEchY/7vvsedsikk4/LLGXHxJA7thjcNZ6qARL2Nk+bTnZuXiblixm/ayhFBqMF+ubaiQ751KSjbnbr2BJdSUjwaydpYYoJ8P8fmKuK074QY6g8NNm59d36+NilLTw8Vou5n6LbIg/gLr1DfANdVCssuiL2kllN+CLrJn1EDfUWGGqqi17gKJfcLTgeUPSw9KBceBgvGge1VQ4QlBX/11jxuYExXBDBHggqR1y+7aNTZmSe4Se3sgeDl+b6cIkW4HXt9CQQ~-1~-1~-1', 8 | 9 | } 10 | var navigator={ 11 | "pua":"Mozilla/5.0 (Windows;14.0.0;x86;64;) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36", 12 | "userAgent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36', 13 | "productSub": "20030107", 14 | "language": 'zh-CN', 15 | "product": 'Gecko', 16 | "plugins": {0: {},1: {},2: {},3: {}} 17 | } 18 | var screen = { 19 | "availHeight": 1104, 20 | "availWidth": 2048, 21 | "width": 2048, 22 | "height": 1152 23 | } 24 | window["navigator"]=navigator 25 | window["document"]=document 26 | 27 | window["screen"] = screen; 28 | window["innerHeight"] = 1002; 29 | window["innerWidth"] = 2048; 30 | window["outerWidth"] = 160; 31 | 32 | var bmak = { 33 | ver: 1.75, 34 | ke_cnt_lmt: 150, 35 | mme_cnt_lmt: 100, 36 | mduce_cnt_lmt: 75, 37 | pme_cnt_lmt: 25, 38 | pduce_cnt_lmt: 25, 39 | tme_cnt_lmt: 25, 40 | tduce_cnt_lmt: 25, 41 | doe_cnt_lmt: 10, 42 | dme_cnt_lmt: 10, 43 | vc_cnt_lmt: 100, 44 | doa_throttle: 0, 45 | dma_throttle: 0, 46 | session_id: "default_session", 47 | js_post: !1, 48 | loc: "", 49 | cf_url: "https://", 50 | params_url: 'https://www.koreanair.com/get_params', 51 | auth: "", 52 | api_public_key: "afSbep8yjnZUjq3aL010jO15Sawj2VZfdYK8uY90uxq", 53 | aj_lmt_doact: 1, 54 | aj_lmt_dmact: 1, 55 | aj_lmt_tact: 1, 56 | ce_js_post: 0, 57 | init_time: 0, 58 | informinfo: "", 59 | prevfid: -1, 60 | fidcnt: 0, 61 | sensor_data: 0, 62 | pua: "", 63 | ins: null, 64 | cns: null, 65 | enGetLoc: 0, 66 | enReadDocUrl: 1, 67 | disFpCalOnTimeout: 0, 68 | xagg: -1, 69 | pen: -1, 70 | brow: "", 71 | browver: "", 72 | psub: "-", 73 | lang: "-", 74 | prod: "-", 75 | plen: -1, 76 | doadma_en: 0, 77 | sdfn: [], 78 | d2: 0, 79 | d3: 0, 80 | thr: 0, 81 | cs: "0a46G5m17Vrp4o4c", 82 | hn: "unk", 83 | z1: 0, 84 | o9: 0, 85 | vc: "", 86 | y1: 2016, 87 | ta: 0, 88 | tst: -1, 89 | t_tst: 0, 90 | ckie: "_abck", 91 | n_ck: "0", 92 | ckurl: 0, 93 | bm: !1, 94 | mr: "-1", 95 | altFonts: !1, 96 | rst: !1, 97 | runFonts: !1, 98 | fsp: !1, 99 | firstLoad: !0, 100 | pstate: !1, 101 | mn_mc_lmt: 10, 102 | mn_state: 0, 103 | mn_mc_indx: 0, 104 | mn_sen: 0, 105 | mn_tout: 100, 106 | mn_stout: 1e3, 107 | mn_ct: 1, 108 | mn_cc: "", 109 | mn_cd: 1e4, 110 | mn_lc: [], 111 | mn_ld: [], 112 | mn_lcl: 0, 113 | mn_al: [], 114 | mn_il: [], 115 | mn_tcl: [], 116 | mn_r: [], 117 | mn_rt: 0, 118 | mn_wt: 0, 119 | mn_abck: "", 120 | mn_psn: "", 121 | mn_ts: "", 122 | mn_lg: [], 123 | ipr: !1, 124 | loap: 1, 125 | dcs: 0, 126 | fpcf:{ 127 | "td": Math.floor(Math.random() * (80 - 10)) + 10, 128 | "data":function (){ 129 | return '448809179;54595805;dis;,7;true;true;true;-480;true;24;24;true;false;-1' 130 | }, 131 | "fpValstr":'448809179;54595805;dis;,7;true;true;true;-480;true;24;24;true;false;-1' 132 | } 133 | , 134 | ir: function () { 135 | bmak["start_ts"] = Date["now"]() , bmak["kact"] = "", bmak["ke_cnt"] = 0, bmak["ke_vel"] = 0, bmak["mact"] = "", bmak["mme_cnt"] = 0, bmak["mduce_cnt"] = 0, bmak["me_vel"] = 0, bmak["pact"] = "", bmak["pme_cnt"] = 0, bmak["pduce_cnt"] = 0, bmak["pe_vel"] = 0, bmak["tact"] = "", bmak["tme_cnt"] = 0, bmak["tduce_cnt"] = 0, bmak["te_vel"] = 0, bmak["doact"] = "", bmak["doe_cnt"] = 0, bmak["doe_vel"] = 0, bmak["dmact"] = "", bmak["dme_cnt"] = 0, bmak["dme_vel"] = 0, bmak["vcact"] = "", bmak["vc_cnt"] = 0, bmak["aj_indx"] = 0, bmak["aj_ss"] = 0, bmak["aj_type"] = -1, bmak["aj_indx_doact"] = 0, bmak["aj_indx_dmact"] = 0, bmak["aj_indx_tact"] = 0, bmak["me_cnt"] = 0, bmak["pe_cnt"] = 0, bmak["te_cnt"] = 0, bmak["nav_perm"] = "", bmak["brv"] = 0, bmak["hbCalc"] = !1, bmak["fmh"] = "", bmak["fmz"] = "", bmak["ssh"] = "", bmak["wv"] = "", bmak["wr"] = "", bmak["weh"] = "", bmak["wl"] = 0, bmak["pdet"] = !0; 136 | }, 137 | get_cf_date: function () { 138 | return Date["now"]() ; 139 | }, 140 | uar: function () { 141 | return navigator["userAgent"]; 142 | }, 143 | gd: function () { 144 | var t = bmak["uar"](), 145 | a = "" + bmak["ab"](t), 146 | e = bmak["start_ts"] / 2, 147 | n = window["screen"]["availWidth"], 148 | o = window["screen"]["availHeight"], 149 | m = window["screen"]["width"], 150 | r = window["screen"]["height"], 151 | i = window["innerHeight"], 152 | c = window["innerWidth"], 153 | b = window["outerWidth"]; 154 | 155 | bmak["z1"] = parseInt(bmak["start_ts"] / (bmak["y1"] * bmak["y1"])); 156 | var d = Math["random"](), 157 | s = parseInt(1000 * d / 2), 158 | k = d + ""; 159 | return k = k["slice"](0, 11) + s, bmak["get_browser"](), bmak["bmisc"](), t + ",uaend," + 12147 + "," + bmak["psub"] + "," + bmak["lang"] + "," + bmak["prod"] + "," + bmak["plen"] + "," + bmak["pen"] + "," + bmak["wen"] + "," + bmak["den"] + "," + bmak["z1"] + "," + bmak["d3"] + "," + n + "," + o + "," + m + "," + r + "," + c + "," + i + "," + b + "," + bmak["bd"]() + "," + a + "," + k + "," + e + "," + bmak["brv"] + ",loc:" + bmak["loc"]; 160 | }, 161 | od: function (t, a) { 162 | try { 163 | t = String(t), a = String(a); 164 | var e = [], 165 | n = a["length"]; 166 | 167 | if (n > 0) { 168 | for (var o = 0; o < t["length"]; o++) { 169 | var m = t["charCodeAt"](o), 170 | r = t["charAt"](o), 171 | i = a["charCodeAt"](o % n); 172 | m = bmak["rir"](m, 47, 57, i), m != t["charCodeAt"](o) && (r = String["fromCharCode"](m)), e["push"](r); 173 | } 174 | 175 | if (e["length"] > 0) return e["join"](""); 176 | } 177 | } catch (t) {} 178 | 179 | return t; 180 | }, 181 | get_browser: function () { 182 | navigator["productSub"] && (bmak["psub"] = navigator["productSub"]), navigator["language"] && (bmak["lang"] = navigator["language"]), navigator["product"] && (bmak["prod"] = navigator["product"]), bmak["plen"] = 5; 183 | }, 184 | bmisc: function () { 185 | bmak["pen"] = 0, bmak["wen"] = 0, bmak["den"] =0; 186 | }, 187 | bd: function () { 188 | return ',cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1'; 189 | }, 190 | fas: function () { 191 | // return Boolean(navigator["credentials"]) + (Boolean(navigator["appMinorVersion"]) << 1) + (Boolean(navigator["bluetooth"]) << 2) + (Boolean(navigator["storage"]) << 3) + (Boolean(Math["imul"]) << 4) + (Boolean(navigator["getGamepads"]) << 5) + (Boolean(navigator["getStorageUpdates"]) << 6) + (Boolean(navigator["hardwareConcurrency"]) << 7) + (Boolean(navigator["mediaDevices"]) << 8) + (Boolean(navigator["mozAlarms"]) << 9) + (Boolean(navigator["mozConnection"]) << 10) + (Boolean(navigator["mozIsLocallyAvailable"]) << 11) + (Boolean(navigator["mozPhoneNumberService"]) << 12) + (Boolean(navigator["msManipulationViewsEnabled"]) << 13) + (Boolean(navigator["permissions"]) << 14) + (Boolean(navigator["registerProtocolHandler"]) << 15) + (Boolean(navigator["requestMediaKeySystemAccess"]) << 16) + (Boolean(navigator["requestWakeLock"]) << 17) + (Boolean(navigator["sendBeacon"]) << 18) + (Boolean(navigator["serviceWorker"]) << 19) + (Boolean(navigator["storeWebWideTrackingException"]) << 20) + (Boolean(navigator["webkitGetGamepads"]) << 21) + (Boolean(navigator["webkitTemporaryStorage"]) << 22) + (Boolean(Number["parseInt"]) << 23) + (Boolean(Math["hypot"]) << 24); 192 | return 30261693 193 | }, 194 | getmr: function () { 195 | bmak["mr"]= '20,20,40,20,20,40,40,20,20,20,20,20,20,100,' 196 | }, 197 | sed: function () { 198 | return '0,0,0,0,1,0,0' 199 | }, 200 | x2: function () { 201 | return Date.now() 202 | }, 203 | np: function () { 204 | bmak["nav_perm"]= '11321144241322243122' 205 | }, 206 | cpa: function (t, a) { 207 | try { 208 | var e = !1; 209 | 210 | if (1 == a && bmak["pme_cnt"] < bmak["pme_cnt_lmt"] || 1 != a && bmak["pduce_cnt"] < bmak["pduce_cnt_lmt"]) { 211 | var n = t || window["event"]; 212 | 213 | if (n && "mouse" != n["pointerType"]) { 214 | e = !0; 215 | var o = -1, 216 | m = -1; 217 | n && n["pageX"] && n["pageY"] ? (o = Math["floor"](n["pageX"]), m = Math["floor"](n["pageY"])) : n && n["clientX"] && n["clientY"] && (o = Math["floor"](n["clientX"]), m = Math["floor"](n["clientY"])); 218 | var r = bmak["get_cf_date"]() - bmak["start_ts"], 219 | i = bmak["pe_cnt"] + "," + a + "," + r + "," + o + "," + m; 220 | void 0 !== n["isTrusted"] && !1 === n["isTrusted"] && (i += ",0"), bmak["pe_vel"] = bmak["pe_vel"] + bmak["pe_cnt"] + a + r + o + m, bmak["pact"] = bmak["pact"] + i + ";", bmak["ta"] += r, 1 == a ? bmak["pme_cnt"]++ : bmak["pduce_cnt"]++; 221 | } 222 | } 223 | 224 | 1 == a ? bmak["pme_cnt"]++ : bmak["pduce_cnt"]++, bmak["pe_cnt"]++, bmak["js_post"] && 3 == a && e && (bmak["aj_type"] = 2, bmak["bpd"](), bmak["pd"](!0), bmak["ce_js_post"] = 1); 225 | } catch (t) {} 226 | }, 227 | ab: function (t) { 228 | if (null == t) return -1; 229 | 230 | try { 231 | for (var a = 0, e = 0; e < t["length"]; e++) { 232 | var n = t["charCodeAt"](e); 233 | n < 128 && (a += n); 234 | } 235 | 236 | return a; 237 | } catch (t) { 238 | return -2; 239 | } 240 | }, 241 | cal_dis: function (t) { 242 | var a = t[0] - t[1], 243 | e = t[2] - t[3], 244 | n = t[4] - t[5], 245 | o = Math["sqrt"](a * a + e * e + n * n); 246 | return Math["floor"](o); 247 | }, 248 | cc: function (t) { 249 | var a = t % 4; 250 | 2 == a && (a = 3); 251 | var e = 42 + a, 252 | n = function (t, a) { 253 | return 0; 254 | }; 255 | 256 | if (42 == e) var n = function (t, a) { 257 | return t * a; 258 | };else if (43 == e) var n = function (t, a) { 259 | return t + a; 260 | };else var n = function (t, a) { 261 | return t - a; 262 | }; 263 | return n; 264 | }, 265 | to: function () { 266 | var t = Date.now() % 10000000; 267 | bmak["d3"] = t; 268 | for (var a = t, e = 3, n = 0; n < 5; n++) { 269 | var o = parseInt(t / Math["pow"](10, n)) % 10, 270 | m = o + 1; 271 | a = bmak["cc"](o)(a, m); 272 | } 273 | bmak["o9"] = a * e; 274 | }, 275 | jrs: function (t) { 276 | for (var a = Math["floor"](1e5 * Math["random"]() + 1e4), e = String(t * a), n = 0, o = [], m = e["length"] >= 18; o["length"] < 6;) o["push"](parseInt(e["slice"](n, n + 2))), n = m ? n + 3 : n + 2; 277 | return [a, bmak["cal_dis"](o)]; 278 | }, 279 | rir: function(t, a, e, n) { 280 | return t > a && t <= e && (t += n % (e - a)) > e && (t = t - e + a), 281 | t 282 | }, 283 | fm: function () { 284 | bmak["fmz"] = 1.25; 285 | }, 286 | form_submit: function () { 287 | try { 288 | if (bmak["bpd"](), 0 == bmak["sdfn"]["length"]) { 289 | if (document["getElementById"]("bm-telemetry") && (document["getElementById"]("bm-telemetry")["value"] = bmak["sensor_data"]), void 0 !== document["getElementsByName"]("bm-telemetry")) for (var t = document["getElementsByName"]("bm-telemetry"), a = 0; a < t["length"]; a++) t[a]["value"] = bmak["sensor_data"]; 290 | } else for (var a = 0; a < bmak["sdfn"]["length"]; a++) document["getElementById"](bmak["sdfn"][a]) && (document["getElementById"](bmak["sdfn"][a])["value"] = bmak["sensor_data"]); 291 | } catch (t) { 292 | bmak["sd_debug"](",s7:" + t + "," + bmak["sensor_data"]); 293 | } 294 | }, 295 | get_telemetry: function () { 296 | return bmak["bpd"](), bmak["ir"](), bmak["sensor_data"]; 297 | }, 298 | getdurl: function () { 299 | return document["URL"] 300 | }, 301 | x1: function () { 302 | return Math["floor"](16777216 * (1 + Math["random"]()))["toString"](36); 303 | }, 304 | gck: function () { 305 | var t = bmak["x1"]() + bmak["x1"]() + bmak["x1"]() + bmak["x1"](); 306 | return bmak["set_cookie"](bmak["ckie"], t + "_" + bmak["ab"](t)), t; 307 | }, 308 | 309 | get_cookie: function () { 310 | var t = bmak["cookie_chk_read"](bmak["ckie"]); 311 | return t; 312 | }, 313 | cookie_chk_read: function (t) { 314 | return document.abck_old_cookie; 315 | }, 316 | build_pua: function () { 317 | try { 318 | navigator["userAgentData"]["getHighEntropyValues"](["architecture", "model", "platform", "platformVersion", "uaFullVersion", "bitness"])["then"](function (t) { 319 | var a = []; 320 | a["push"]("Mozilla/5.0 ("); 321 | var e = []; 322 | e["push"](t["platform"], t["platformVersion"], t["architecture"], t["bitness"], t["model"]), a["push"](e["join"](";") + ")"), a["push"](" AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"), a["push"](t["uaFullVersion"]), navigator["userAgentData"]["mobile"] && a["push"](" Mobile"), a["push"](" Safari/537.36"), bmak["pua"] = a["join"](""); 323 | }); 324 | } catch (t) { 325 | bmak["pua"] = ""; 326 | } 327 | }, 328 | isChrome: function () { 329 | return true; 330 | }, 331 | updatet: function () { 332 | return bmak["get_cf_date"]() - bmak["start_ts"]; 333 | }, 334 | bpd: function () { 335 | var t = 0; 336 | 337 | try { 338 | t = bmak["get_cf_date"](); 339 | var a = bmak["updatet"](), 340 | e = "3"; 341 | bmak["ckie"] && (e = bmak["get_cookie"]()); 342 | var n = bmak["gd"](), 343 | o = "do_en", 344 | m = "dm_en", 345 | r = "t_en", 346 | i = o + "," + m + "," + r, 347 | c = "", 348 | b = location.href, 349 | d = bmak["aj_type"] + "," + bmak["aj_indx"]; 350 | //!bmak["fpcf"]["fpValCalculated"] && (0 == bmak["js_post"] || bmak["aj_indx"] > 0) && bmak["fpcf"]["fpVal"](); 351 | 352 | var s = bmak["ke_vel"] + bmak["me_vel"] + bmak["doe_vel"] + bmak["dme_vel"] + bmak["te_vel"] + bmak["pe_vel"], 353 | l = 'PiZtE', 354 | u = bmak["jrs"](bmak["start_ts"]), 355 | _ = bmak["get_cf_date"]() - bmak["start_ts"], 356 | f = parseInt(bmak["d2"] / 6), 357 | p = bmak["fas"](), 358 | h = 0, 359 | v = -1, 360 | g = [bmak["ke_vel"] + 1, bmak["me_vel"] + 32, bmak["te_vel"] + 32, bmak["doe_vel"], bmak["dme_vel"], bmak["pe_vel"], s, a, bmak["init_time"], bmak["start_ts"], bmak["fpcf"]["td"], bmak["d2"], bmak["ke_cnt"], bmak["me_cnt"], f, bmak["pe_cnt"], bmak["te_cnt"], _, bmak["ta"], bmak["n_ck"], e, bmak["ab"](e), bmak["fpcf"]["rVal"], bmak["fpcf"]["rCFP"], p, l, u[0], u[1], h, v], 361 | w = g["join"](","), 362 | y = "" + bmak["ab"](bmak["fpcf"]["fpValstr"]); 363 | bmak["fmh"]='b70ca7d25d21c53971815e2b7f03804af1fbd2ad0f6c3155b9cd8b617e7b2627' 364 | bmak["ssh"]='e6a6b62042f2333998b8357baa6fe8b776aaad3c0b1692df334f2afaf3954baf' 365 | bmak["wv"]='Google Inc. (Intel)' 366 | bmak["wr"]='ANGLE (Intel, Intel(R) Iris(R) Xe Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)' 367 | bmak["weh"]='95f5b71fe531f867faa814bdd4050dd8057206d53ecec1163523560525884870' 368 | bmak["wl"]=33 369 | !bmak["hbCalc"] && (0 == bmak["js_post"] || bmak["aj_indx"] > 0) && (bmak["fm"](), bmak["hbCalc"] = !0); 370 | var E = ""; 371 | bmak["hbCalc"] && (E = bmak["fmh"] + "," + bmak["fmz"] + "," + bmak["ssh"] + "," + bmak["wv"] + "," + bmak["wr"] + "," + bmak["weh"] + "," + bmak["wl"]); 372 | 373 | var S = bmak["sed"](), 374 | C = [], 375 | A = "", 376 | B = "", 377 | x = ""; 378 | 379 | if (void 0 !== C[1]) { 380 | var M = C[1]; 381 | void 0 !== bmak["mn_r"][M] && (A = bmak["mn_r"][M]); 382 | } 383 | 384 | if (void 0 !== C[2]) { 385 | var j = C[2]; 386 | void 0 !== bmak["mn_r"][j] && (B = bmak["mn_r"][j]); 387 | } 388 | 389 | if (void 0 !== C[3]) { 390 | var L = C[3]; 391 | void 0 !== bmak["mn_r"][L] && (x = bmak["mn_r"][L]); 392 | } 393 | debugger 394 | true && bmak["isChrome"]() && bmak["build_pua"](), bmak["sensor_data"] = bmak["ver"] + "-1,2,-94,-100," + n + "-1,2,-94,-131," + bmak["pua"] + "-1,2,-94,-101," + i + "-1,2,-94,-105," + bmak["informinfo"] + "-1,2,-94,-102," + c + "-1,2,-94,-108," + bmak["kact"] + "-1,2,-94,-110," + bmak["mact"] + "-1,2,-94,-117," + bmak["tact"] + "-1,2,-94,-111," + bmak["doact"] + "-1,2,-94,-109," + bmak["dmact"] + "-1,2,-94,-114," + bmak["pact"] + "-1,2,-94,-103," + bmak["vcact"] + "-1,2,-94,-112," + b + "-1,2,-94,-115," + w + "-1,2,-94,-106," + d, bmak["sensor_data"] = bmak["sensor_data"] + "-1,2,-94,-119," + bmak["mr"] + "-1,2,-94,-122," + S + "-1,2,-94,-123," + A + "-1,2,-94,-124," + B + "-1,2,-94,-126," + x + "-1,2,-94,-127," + bmak["nav_perm"]; 395 | var P = 24 ^ bmak["ab"](bmak["sensor_data"]); 396 | bmak["sensor_data"] = bmak["sensor_data"] + "-1,2,-94,-70," + bmak["fpcf"]["fpValstr"] + "-1,2,-94,-80," + y + "-1,2,-94,-116," + bmak["o9"] + "-1,2,-94,-118," + P + "-1,2,-94,-129," + E + "-1,2,-94,-121,"; 397 | } catch (t) { 398 | var T = ""; 399 | console.log("错误分支") 400 | 401 | t["stack"] && "string" == typeof t["stack"] ? T = t["stack"]["replace"](/\"/g, "\\'") : "string" == typeof t && (T = t["replace"](/\"/g, "\\'")), T = T["slice"](0, 1e3), bmak["sensor_data"] = bmak["ver"] + "-1,2,-94,-100," + bmak["uar"]() + "-1,2,-94,-120," + T; 402 | 403 | } 404 | 405 | try { 406 | var F = bmak["od"](bmak["cs"], bmak["api_public_key"])["slice"](0, 16), 407 | D = Math["floor"](bmak["get_cf_date"]() / 36e5), 408 | N = bmak["get_cf_date"](), 409 | R = F + bmak["od"](D, F) + bmak["sensor_data"]; 410 | bmak["sensor_data"] = R + ";" + (bmak["get_cf_date"]() - t) + ";" + bmak["tst"] + ";" + (bmak["get_cf_date"]() - N); 411 | } catch (t) { 412 | console.log("error") 413 | } 414 | 415 | 416 | } 417 | }; 418 | 419 | bmak["ir"](), bmak["t_tst"] = bmak["get_cf_date"](), bmak["to"](), bmak["tst"] = bmak["get_cf_date"]() - bmak["t_tst"], bmak["disFpCalOnTimeout"] 420 | bmak["calc_fp"] 421 | 422 | function get_sensor_data(){ 423 | bmak.bpd(); 424 | return bmak.sensor_data; 425 | } 426 | -------------------------------------------------------------------------------- /akamai1.75/akamai1.75_ast.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs");//文件读写 2 | const parse = require("@babel/parser"); //解析为ast 3 | const traverse = require('@babel/traverse').default;//遍历节点 4 | const types = require('@babel/types'); 5 | const parser = require("@babel/parser"); 6 | //类型 7 | const generator = require('@babel/generator').default;//ast解析为代码 8 | 9 | let jscode = fs.readFileSync( 10 | './demo.js', { 11 | encoding: 'utf-8' 12 | } 13 | ); 14 | 15 | let ast = parse.parse(jscode);//js转ast 16 | 17 | 18 | let visitorArray = { 19 | "VariableDeclarator"(path) { 20 | let {id, init} = path.node; 21 | if (!init || init.type !== "ArrayExpression" || init.elements.length < 1) return; 22 | let binding = path.scope.getBinding(id.name); 23 | if (binding.references === 0) { 24 | path.remove; 25 | return 26 | } 27 | if (init.elements.every(element => element.type === "StringLiteral")) { 28 | //获取父级函数,如果没有就说明是最外层定义的数组 29 | let funcName = path.getFunctionParent(); 30 | if (funcName === null) { 31 | console.log("大数组名字应该是:", id.name) 32 | global["largeArrayName"]= id.name; 33 | global["largeArray"] = path.toString(); 34 | path.remove; 35 | // 父级作用域传给另外一个函数操作 36 | //getDecName(path.parentPath) 37 | } 38 | 39 | } 40 | 41 | }, 42 | } 43 | 44 | 45 | traverse(ast, visitorArray); 46 | eval(global["largeArray"]) 47 | 48 | 49 | let Replacement={ 50 | "MemberExpression"(path){ 51 | let {node}=path; 52 | if(!node.object&&node.object.type!=="Identifier")return; 53 | if(node.object.name!==global["largeArrayName"])return; 54 | if(!node.property&&node.property.type!=="NumericLiteral")return; 55 | //console.log(node.property.value); 56 | let value = node.property.value; 57 | 58 | path.replaceWith(types.valueToNode(eval(global["largeArrayName"])[value])); 59 | 60 | 61 | } 62 | } 63 | 64 | traverse(ast, Replacement); 65 | 66 | let {code} = generator(ast, opts = { 67 | //compact: true, 68 | //jsescOption: {minified: true, retainFunctionParens: true, retainLines: true} 69 | }) 70 | fs.writeFile('./demoNew.js', code, (err) => { 71 | }); -------------------------------------------------------------------------------- /akamai1.75/test.py: -------------------------------------------------------------------------------- 1 | 垃圾代码。没用的垃圾 2 | -------------------------------------------------------------------------------- /gee4/1.js: -------------------------------------------------------------------------------- 1 | window = global; 2 | navigator = { 3 | "appName": "Netscape" 4 | }; 5 | window.navigator = navigator; 6 | 7 | 8 | function get_track(e) { 9 | for (var t, s, n, a = [], o = 0, r = 0, i = e['length'] - 1; r < i; r += 1) { 10 | t = Math['round'](e[r + 1][0] - e[r][0]); 11 | s = Math['round'](e[r + 1][1] - e[r][1]); 12 | n = Math['round'](e[r + 1][2] - e[r][2]); 13 | 0 === t && 0 === s && 0 === n || (0 === t && 0 === s ? o += n : (a['push']([t, s, n + o]), o = 0)); 14 | } 15 | return 0 !== o && a['push']([t, s, o]), a; 16 | } 17 | 18 | function n_encrypt() { 19 | var n = function () { 20 | var e; 21 | var s = Object['create'] || function () { 22 | function s() { 23 | } 24 | 25 | return function (e) { 26 | var t; 27 | return s["prototype"] = e, t = new s(), s['prototype'] = null, t; 28 | }; 29 | }(); 30 | var t = {}; 31 | var n = t['lib'] = {}; 32 | var a = n['Base'] = { 33 | "extend": function (e) { 34 | var t = s(this); 35 | return e && t['mixIn'](e), t['hasOwnProperty']('init') && this['init'] !== t['init'] || (t['init'] = function () { 36 | t['$super']['init']['apply'](this, arguments); 37 | }), (t['init']['prototype'] = t)['$super'] = this, t; 38 | }, 39 | "create": function () { 40 | var e = this['extend'](); 41 | return e['init']['apply'](e, arguments), e; 42 | }, 43 | "init": function () { 44 | }, 45 | "mixIn": function (e) { 46 | for (var t in e) e['hasOwnProperty'](t) && (this[t] = e[t]); 47 | e['hasOwnProperty']('toString') && (this['toString'] = e['toString']); 48 | } 49 | }; 50 | var u = n["WordArray"] = a["extend"]({ 51 | "init": function (e, t) { 52 | e = this['words'] = e || []; 53 | t != undefined ? this['sigBytes'] = t : this['sigBytes'] = 4 * e["length"]; 54 | }, 55 | "concat": function (e) { 56 | var t = this['words']; 57 | var s = e['words']; 58 | var n = this['sigBytes']; 59 | var a = e['sigBytes']; 60 | if (this["clamp"](), n % 4) for (var o = 0; o < a; o++) { 61 | var r = s[o >>> 2] >>> 24 - o % 4 * 8 & 255; 62 | t[n + o >>> 2] |= r << 24 - (n + o) % 4 * 8; 63 | } else for (o = 0; o < a; o += 4) t[n + o >>> 2] = s[o >>> 2]; 64 | return this['sigBytes'] += a, this; 65 | }, 66 | "clamp": function () { 67 | var e = this['words']; 68 | var t = this['sigBytes']; 69 | e[t >>> 2] &= 4294967295 << 32 - t % 4 * 8; 70 | e["length"] = Math["ceil"](t / 4); 71 | } 72 | }); 73 | var o = t["enc"] = {}; 74 | var p = o["Latin1"] = { 75 | "parse": function (e) { 76 | for (var t = e['length'], s = [], n = 0; n < t; n++) s[n >>> 2] |= (255 & e["charCodeAt"](n)) << 24 - n % 4 * 8; 77 | 78 | return new u["init"](s, t); 79 | } 80 | }; 81 | var r = o["Utf8"] = { 82 | "parse": function (e) { 83 | return p["parse"](unescape(encodeURIComponent(e))); 84 | } 85 | }; 86 | var i = n["BufferedBlockAlgorithm"] = a["extend"]({ 87 | "reset": function () { 88 | this['$_JAr'] = new u["init"](); 89 | this["$_BCFd"] = 0; 90 | }, 91 | "$_BCGa": function (e) { 92 | 'string' == typeof e && (e = r["parse"](e)); 93 | this['$_JAr']["concat"](e); 94 | this["$_BCFd"] += e['sigBytes']; 95 | }, 96 | "$_BCHV": function (e) { 97 | var t = this['$_JAr']; 98 | var s = t['words']; 99 | var n = t['sigBytes']; 100 | var a = this['blockSize']; 101 | var o = n / (4 * a); 102 | var r = (e ? o = Math["ceil"](o) : o = Math["max"]((0 | o) - this["$_BCIO"], 0)) * a; 103 | var i = Math["min"](4 * r, n); 104 | 105 | if (r) { 106 | for (var _ = 0; _ < r; _ += a) this["$_BCJO"](s, _); 107 | 108 | var c = s["splice"](0, r); 109 | t['sigBytes'] -= i; 110 | } 111 | 112 | return new u['init'](c, i); 113 | }, 114 | "$_BCIO": 0 115 | }); 116 | var _ = t["algo"] = {}; 117 | var c = n["Cipher"] = i['extend']({ 118 | "cfg": a['extend'](), 119 | "createEncryptor": function (e, t) { 120 | return this['create'](this['$_BDAS'], e, t); 121 | }, 122 | "init": function (e, t, s) { 123 | this["cfg"] = this["cfg"]['extend'](s); 124 | this["$_BDBd"] = e; 125 | this["$_BDCs"] = t; 126 | this["reset"](); 127 | }, 128 | "reset": function () { 129 | i["reset"]["call"](this); 130 | this["$_BDDg"](); 131 | }, 132 | "process": function (e) { 133 | 134 | return this["$_BCGa"](e), this["$_BCHV"](); 135 | }, 136 | "finalize": function (e) { 137 | 138 | return e && this["$_BCGa"](e), this["$_BDEO"](); 139 | }, 140 | "keySize": 4, 141 | "ivSize": 4, 142 | "$_BDAS": 1, 143 | "$_BDFj": 2, 144 | "$_BDGs": function (c) { 145 | 146 | return { 147 | "encrypt": function (e, t, s) { 148 | t = p['parse'](t); 149 | s && s["iv"] || ((s = s || {})["iv"] = p['parse']("0000000000000000")); 150 | for (var n = b["encrypt"](c, e, t, s), a = n["ciphertext"]['words'], o = n["ciphertext"]['sigBytes'], r = [], i = 0; i < o; i++) { 151 | var _ = a[i >>> 2] >>> 24 - i % 4 * 8 & 255; 152 | r["push"](_); 153 | } 154 | 155 | return r; 156 | } 157 | }; 158 | } 159 | }); 160 | var g = t["mode"] = {}; 161 | var l = n["BlockCipherMode"] = a['extend']({ 162 | "createEncryptor": function (e, t) { 163 | 164 | return this["Encryptor"]['create'](e, t); 165 | }, 166 | "init": function (e, t) { 167 | this["$_BDHv"] = e; 168 | this["$_BDIy"] = t; 169 | } 170 | }); 171 | var d = g["CBC"] = ((e = l['extend']())["Encryptor"] = e['extend']({ 172 | "processBlock": function (e, t) { 173 | var s = this["$_BDHv"]; 174 | var n = s['blockSize']; 175 | (function r(e, t, s) { 176 | var n = this["$_BDIy"]; 177 | if (n) { 178 | var a = n; 179 | this['$_BDIy'] = undefined; 180 | } else var a = this["$_BDJH"]; 181 | 182 | for (var o = 0; o < s; o++) e[t + o] ^= a[o]; 183 | })['call'](this, e, t, n); 184 | s["encryptBlock"](e, t); 185 | this["$_BDJH"] = e["slice"](t, t + n); 186 | } 187 | }), e); 188 | var h = (t["pad"] = {})["Pkcs7"] = { 189 | "pad": function (e, t) { 190 | for (var s = 4 * t, n = s - e['sigBytes'] % s, a = n << 24 | n << 16 | n << 8 | n, o = [], r = 0; r < n; r += 4) o["push"](a); 191 | var i = u['create'](o, n); 192 | e["concat"](i); 193 | } 194 | }; 195 | var f = n["BlockCipher"] = c['extend']({ 196 | "cfg": c['cfg']['extend']({ 197 | "mode": d, 198 | "padding": h 199 | }), 200 | "reset": function () { 201 | c['reset']['call'](this); 202 | var e = this['cfg']; 203 | var t = e['iv']; 204 | var s = e["mode"]; 205 | if (this["$_BDBd"] == this['$_BDAS']) var n = s["createEncryptor"]; 206 | 207 | if (this['$_BEAZ'] && this['$_BEAZ']["$_BEB_"] == n) { 208 | this['$_BEAZ']['init'](this, t && t['words']); 209 | } else { 210 | this['$_BEAZ'] = n['call'](s, this, t && t['words']); 211 | this['$_BEAZ']["$_BEB_"] = n; 212 | } 213 | }, 214 | "$_BCJO": function (e, t) { 215 | this['$_BEAZ']["processBlock"](e, t); 216 | }, 217 | "$_BDEO": function () { 218 | var e = this['cfg']['padding']; 219 | 220 | if (this["$_BDBd"] == this["$_BDAS"]) { 221 | e["pad"](this['$_JAr'], this["blockSize"]); 222 | var t = this["$_BCHV"](!0); 223 | } 224 | 225 | return t; 226 | }, 227 | "blockSize": 4 228 | }); 229 | var m = n["CipherParams"] = a['extend']({ 230 | "init": function (e) { 231 | this["mixIn"](e); 232 | } 233 | }); 234 | var b = n["SerializableCipher"] = a['extend']({ 235 | "cfg": a['extend'](), 236 | "encrypt": function (e, t, s, n) { 237 | n = this["cfg"]['extend'](n); 238 | var a = e["createEncryptor"](s, n); 239 | var o = a["finalize"](t); 240 | var r = a['cfg']; 241 | return m["create"]({ 242 | "ciphertext": o, 243 | "key": s, 244 | "iv": r["iv"], 245 | "algorithm": e, 246 | "mode": r["mode"], 247 | "padding": r['padding'], 248 | "blockSize": e['blockSize'], 249 | "formatter": n['format'] 250 | }); 251 | } 252 | }); 253 | var v = []; 254 | var w = []; 255 | var x = []; 256 | var y = []; 257 | var k = []; 258 | var C = []; 259 | var E = []; 260 | var A = []; 261 | var z = []; 262 | var T = []; 263 | !function () { 264 | for (var e = [], t = 0; t < 256; t++) if (t < 128) { 265 | e[t] = t << 1; 266 | } else { 267 | e[t] = t << 1 ^ 283; 268 | } 269 | var s = 0; 270 | var n = 0; 271 | for (t = 0; t < 256; t++) { 272 | var a = n ^ n << 1 ^ n << 2 ^ n << 3 ^ n << 4; 273 | a = a >>> 8 ^ 255 & a ^ 99; 274 | v[s] = a; 275 | var o = e[w[a] = s]; 276 | var r = e[o]; 277 | var i = e[r]; 278 | var _ = 257 * e[a] ^ 16843008 * a; 279 | x[s] = _ << 24 | _ >>> 8; 280 | y[s] = _ << 16 | _ >>> 16; 281 | k[s] = _ << 8 | _ >>> 24; 282 | C[s] = _; 283 | _ = 16843009 * i ^ 65537 * r ^ 257 * o ^ 16843008 * s; 284 | E[a] = _ << 24 | _ >>> 8; 285 | A[a] = _ << 16 | _ >>> 16; 286 | z[a] = _ << 8 | _ >>> 24; 287 | T[a] = _; 288 | s ? (s = o ^ e[e[e[i ^ o]]], n ^= e[e[n]]) : s = n = 1; 289 | } 290 | }(); 291 | var B = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; 292 | var D = _['AES'] = f['extend']({ 293 | "$_BDDg": function () { 294 | if (!this['$_BECV'] || this['$_BEDc'] !== this['$_BDCs']) { 295 | for (var e = this['$_BEDc'] = this['$_BDCs'], t = e['words'], s = e['sigBytes'] / 4, n = 4 * (1 + (this['$_BECV'] = 6 + s)), a = this['$_BEEZ'] = [], o = 0; o < n; o++) if (o < s) a[o] = t[o]; else { 296 | var r = a[o - 1]; 297 | o % s ? 6 < s && o % s == 4 && (r = v[r >>> 24] << 24 | v[r >>> 16 & 255] << 16 | v[r >>> 8 & 255] << 8 | v[255 & r]) : (r = v[(r = r << 8 | r >>> 24) >>> 24] << 24 | v[r >>> 16 & 255] << 16 | v[r >>> 8 & 255] << 8 | v[255 & r], r ^= B[o / s | 0] << 24); 298 | a[o] = a[o - s] ^ r; 299 | } 300 | 301 | for (var i = this['$_BEFH'] = [], _ = 0; _ < n; _++) { 302 | o = n - _; 303 | if (_ % 4) r = a[o]; else r = a[o - 4]; 304 | if (_ < 4 || o <= 4) { 305 | i[_] = r; 306 | } else { 307 | i[_] = E[v[r >>> 24]] ^ A[v[r >>> 16 & 255]] ^ z[v[r >>> 8 & 255]] ^ T[v[255 & r]]; 308 | } 309 | } 310 | } 311 | }, 312 | "encryptBlock": function (e, t) { 313 | this['$_BEGu'](e, t, this['$_BEEZ'], x, y, k, C, v); 314 | }, 315 | "$_BEGu": function (e, t, s, n, a, o, r, i) { 316 | for (var _ = this['$_BECV'], c = e[t] ^ s[0], u = e[t + 1] ^ s[1], p = e[t + 2] ^ s[2], g = e[t + 3] ^ s[3], l = 4, d = 1; d < _; d++) { 317 | var h = n[c >>> 24] ^ a[u >>> 16 & 255] ^ o[p >>> 8 & 255] ^ r[255 & g] ^ s[l++]; 318 | var f = n[u >>> 24] ^ a[p >>> 16 & 255] ^ o[g >>> 8 & 255] ^ r[255 & c] ^ s[l++]; 319 | var m = n[p >>> 24] ^ a[g >>> 16 & 255] ^ o[c >>> 8 & 255] ^ r[255 & u] ^ s[l++]; 320 | var b = n[g >>> 24] ^ a[c >>> 16 & 255] ^ o[u >>> 8 & 255] ^ r[255 & p] ^ s[l++]; 321 | c = h; 322 | u = f; 323 | p = m; 324 | g = b; 325 | } 326 | 327 | h = (i[c >>> 24] << 24 | i[u >>> 16 & 255] << 16 | i[p >>> 8 & 255] << 8 | i[255 & g]) ^ s[l++]; 328 | f = (i[u >>> 24] << 24 | i[p >>> 16 & 255] << 16 | i[g >>> 8 & 255] << 8 | i[255 & c]) ^ s[l++]; 329 | m = (i[p >>> 24] << 24 | i[g >>> 16 & 255] << 16 | i[c >>> 8 & 255] << 8 | i[255 & u]) ^ s[l++]; 330 | b = (i[g >>> 24] << 24 | i[c >>> 16 & 255] << 16 | i[u >>> 8 & 255] << 8 | i[255 & p]) ^ s[l++]; 331 | e[t] = h; 332 | e[t + 1] = f; 333 | e[t + 2] = m; 334 | e[t + 3] = b; 335 | }, 336 | "keySize": 8 337 | }); 338 | return t['AES'] = f['$_BDGs'](D), t['AES']; 339 | }(); 340 | return n; 341 | } 342 | 343 | function _() { 344 | 345 | var a = function () { 346 | function s() { 347 | this['i'] = 0; 348 | this['j'] = 0; 349 | this['S'] = []; 350 | } 351 | 352 | s['prototype']['init'] = function E(e) { 353 | var t; 354 | var s; 355 | var n; 356 | for (t = 0; t < 256; ++t) this['S'][t] = t; 357 | for (t = s = 0; t < 256; ++t) { 358 | s = s + this['S'][t] + e[t % e['length']] & 255; 359 | n = this['S'][t]; 360 | this['S'][t] = this['S'][s]; 361 | this['S'][s] = n; 362 | } 363 | this["i"] = 0; 364 | this["j"] = 0; 365 | }; 366 | 367 | s['prototype']['next'] = function A() { 368 | var e; 369 | return this['i'] = this['i'] + 1 & 255, this['j'] = this['j'] + this['S'][this['i']] & 255, e = this['S'][this['i']], this['S'][this['i']] = this['S'][this['j']], this['S'][this['j']] = e, this['S'][e + this['S'][this['i']] & 255]; 370 | }; 371 | 372 | var n; 373 | var a; 374 | var o; 375 | var t; 376 | var r = 256; 377 | 378 | if (null == a) { 379 | var i; 380 | if (a = [], o = 0, window['crypto'] && window['crypto']['getRandomValues']) { 381 | var _ = new Uint32Array(256); 382 | for (window['crypto']['getRandomValues'](_), i = 0; i < _['length']; ++i) a[o++] = 255 & _[i]; 383 | } 384 | var c = 0; 385 | var u = function u(t) { 386 | if (256 <= (c = c || 0) || r <= o) { 387 | 388 | } else try { 389 | var s = t["x"] + t["y"]; 390 | a[o++] = 255 & s; 391 | c += 1; 392 | } catch (e) { 393 | console.log(e); 394 | } 395 | }; 396 | 397 | } 398 | 399 | function p() { 400 | n = new s(); 401 | while (o < r) { 402 | var e = Math['floor'](65536 * Math['random']()); 403 | a[o++] = 255 & e; 404 | } 405 | for (n['init'](a), o = 0; o < a['length']; ++o) a[o] = 0; 406 | o = 0; 407 | return n['next'](); 408 | } 409 | 410 | function g() { 411 | } 412 | 413 | g['prototype']['nextBytes'] = function z(e) { 414 | var t; 415 | for (t = 0; t < e['length']; ++t) e[t] = p(); 416 | }; 417 | 418 | function v(e, t, s) { 419 | null != e && ('number' == typeof e ? this['fromNumber'](e, t, s) : null == t && 'string' != typeof e ? this['fromString'](e, 256) : this['fromString'](e, t)) 420 | } 421 | 422 | function w() { 423 | return new v(null); 424 | } 425 | 426 | "Microsoft Internet Explorer" == navigator["appName"] ? t = (v['prototype']['am'] = function T(e, t, s, n, a, o) { 427 | var r = 32767 & t; 428 | var i = t >> 15; 429 | while (0 <= --o) { 430 | var _ = 32767 & this[e]; 431 | var c = this[e++] >> 15; 432 | var u = i * _ + c * r; 433 | a = ((_ = r * _ + ((32767 & u) << 15) + s[n] + (1073741823 & a)) >>> 30) + (u >>> 15) + i * c + (a >>> 30); 434 | s[n++] = 1073741823 & _; 435 | } 436 | return a; 437 | }, 30) : 'Netscape' != navigator['appName'] ? t = (v['prototype']['am'] = function B(e, t, s, n, a, o) { 438 | while (0 <= --o) { 439 | var r = t * this[e++] + s[n] + a; 440 | a = Math["floor"](r / 67108864); 441 | s[n++] = 67108863 & r; 442 | } 443 | return a; 444 | }, 26) : t = (v['prototype']['am'] = function D(e, t, s, n, a, o) { 445 | var r = 16383 & t; 446 | var i = t >> 14; 447 | while (0 <= --o) { 448 | var _ = 16383 & this[e]; 449 | var c = this[e++] >> 14; 450 | var u = i * _ + c * r; 451 | a = ((_ = r * _ + ((16383 & u) << 14) + s[n] + a) >> 28) + (u >> 14) + i * c; 452 | s[n++] = 268435455 & _; 453 | } 454 | return a; 455 | }, 28); 456 | 457 | v['prototype']['DB'] = t; 458 | v['prototype']['DM'] = (1 << t) - 1; 459 | v['prototype']['DV'] = 1 << t; 460 | v['prototype']["FV"] = Math['pow'](2, 52); 461 | v['prototype']['F1'] = 52 - t; 462 | v['prototype']['F2'] = 2 * t - 52; 463 | var l; 464 | var d; 465 | var h = '0123456789abcdefghijklmnopqrstuvwxyz'; 466 | var f = []; 467 | 468 | for (l = '0'['charCodeAt'](0), d = 0; d <= 9; ++d) f[l++] = d; 469 | 470 | for (l = 'a'['charCodeAt'](0), d = 10; d < 36; ++d) f[l++] = d; 471 | 472 | for (l = 'A'['charCodeAt'](0), d = 10; d < 36; ++d) f[l++] = d; 473 | 474 | function m(e) { 475 | return h["charAt"](e); 476 | } 477 | 478 | function b(e) { 479 | var t = w(); 480 | return t["fromInt"](e), t; 481 | } 482 | 483 | function x(e) { 484 | var t; 485 | var s = 1; 486 | return 0 != (t = e >>> 16) && (e = t, s += 16), 0 != (t = e >> 8) && (e = t, s += 8), 0 != (t = e >> 4) && (e = t, s += 4), 0 != (t = e >> 2) && (e = t, s += 2), 0 != (t = e >> 1) && (e = t, s += 1), s; 487 | } 488 | 489 | function y(e) { 490 | this['m'] = e; 491 | } 492 | 493 | function k(e) { 494 | this['m'] = e; 495 | this["mp"] = e["invDigit"](); 496 | this["mpl"] = 32767 & this["mp"]; 497 | this["mph"] = this['mp'] >> 15; 498 | this["um"] = (1 << e['DB'] - 15) - 1; 499 | this["mt2"] = 2 * e["t"]; 500 | 501 | } 502 | 503 | function C() { 504 | this["setPublic"]("00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81", "10001"); 505 | 506 | } 507 | 508 | return y['prototype']["convert"] = function S(e) { 509 | return e["s"] < 0 || 0 <= e["compareTo"](this['m']) ? e["mod"](this['m']) : e; 510 | }, y['prototype']["revert"] = function M(e) { 511 | return e; 512 | }, y['prototype']["reduce"] = function R(e) { 513 | e["divRemTo"](this['m'], null, e); 514 | }, y['prototype']["mulTo"] = function F(e, t, s) { 515 | e["multiplyTo"](t, s); 516 | this["reduce"](s); 517 | }, y['prototype']["sqrTo"] = function O(e, t) { 518 | 519 | e["squareTo"](t); 520 | this['reduce'](t); 521 | }, k['prototype']["convert"] = function j(e) { 522 | var t = w(); 523 | return e["abs"]()["dlShiftTo"](this['m']['t'], t), t["divRemTo"](this['m'], null, t), e['s'] < 0 && 0 < t["compareTo"](v["ZERO"]) && this['m']["subTo"](t, t), t; 524 | }, k['prototype']["revert"] = function P(e) { 525 | var t = w(); 526 | return e["copyTo"](t), this['reduce'](t), t; 527 | }, k['prototype']['reduce'] = function I(e) { 528 | 529 | while (e['t'] <= this["mt2"]) e[e['t']++] = 0; 530 | 531 | for (var t = 0; t < this['m']['t']; ++t) { 532 | var s = 32767 & e[t]; 533 | var n = s * this["mpl"] + ((s * this["mph"] + (e[t] >> 15) * this['mpl'] & this["um"]) << 15) & e["DM"]; 534 | e[s = t + this['m']['t']] += this['m']["am"](0, n, e, t, 0, this['m']['t']); 535 | 536 | while (e[s] >= e["DV"]) { 537 | e[s] -= e["DV"]; 538 | e[++s]++; 539 | } 540 | } 541 | 542 | e["clamp"](); 543 | e["drShiftTo"](this['m']['t'], e); 544 | 0 <= e['compareTo'](this['m']) && e["subTo"](this['m'], e); 545 | }, k['prototype']["mulTo"] = function N(e, t, s) { 546 | 547 | e["multiplyTo"](t, s); 548 | this['reduce'](s); 549 | }, k['prototype']["sqrTo"] = function q(e, t) { 550 | 551 | e["squareTo"](t); 552 | this['reduce'](t); 553 | }, v['prototype']["copyTo"] = function L(e) { 554 | for (var t = this['t'] - 1; 0 <= t; --t) e[t] = this[t]; 555 | e['t'] = this['t']; 556 | e['s'] = this['s']; 557 | }, v['prototype']["fromInt"] = function H(e) { 558 | this['t'] = 1; 559 | e < 0 ? this['s'] = -1 : this['s'] = 0; 560 | 0 < e ? this[0] = e : e < -1 ? this[0] = e + this['DV'] : this['t'] = 0; 561 | }, v['prototype']["fromString"] = function $(e, t) { 562 | var s; 563 | if (16 == t) s = 4; else if (8 == t) s = 3; else if (256 == t) s = 8; else if (2 == t) s = 1; else if (32 == t) s = 5; else { 564 | if (4 != t) return void this["fromRadix"](e, t); 565 | s = 2; 566 | } 567 | this['t'] = 0; 568 | this['s'] = 0; 569 | var n; 570 | var a; 571 | var o = e['length']; 572 | var r = !1; 573 | var i = 0; 574 | while (0 <= --o) { 575 | if (8 == s) { 576 | var _ = 255 & e[o]; 577 | } else { 578 | var _ = (n = o, null == (a = f[e["charCodeAt"](n)]) ? -1 : a); 579 | } 580 | if (_ < 0) { 581 | "-" == e["charAt"](o) && (r = !0); 582 | } else { 583 | r = !1; 584 | 0 == i ? this[this['t']++] = _ : i + s > this["DB"] ? (this[this['t'] - 1] |= (_ & (1 << this["DB"] - i) - 1) << i, this[this['t']++] = _ >> this['DB'] - i) : this[this['t'] - 1] |= _ << i; 585 | (i += s) >= this['DB'] && (i -= this['DB']); 586 | } 587 | } 588 | 8 == s && 0 != (128 & e[0]) && (this['s'] = -1, 0 < i && (this[this['t'] - 1] |= (1 << this['DB'] - i) - 1 << i)); 589 | this['clamp'](); 590 | r && v["ZERO"]['subTo'](this, this); 591 | }, v['prototype']['clamp'] = function X() { 592 | var e = this['s'] & this["DM"]; 593 | while (0 < this['t'] && this[this['t'] - 1] == e) --this['t']; 594 | }, v['prototype']["dlShiftTo"] = function U(e, t) { 595 | var s; 596 | for (s = this['t'] - 1; 0 <= s; --s) t[s + e] = this[s]; 597 | for (s = e - 1; 0 <= s; --s) t[s] = 0; 598 | t['t'] = this['t'] + e; 599 | t['s'] = this['s']; 600 | }, v['prototype']["drShiftTo"] = function V(e, t) { 601 | for (var s = e; s < this['t']; ++s) t[s - e] = this[s]; 602 | t['t'] = Math["max"](this['t'] - e, 0); 603 | t['s'] = this['s']; 604 | }, v['prototype']["lShiftTo"] = function W(e, t) { 605 | var s; 606 | var n = e % this['DB']; 607 | var a = this['DB'] - n; 608 | var o = (1 << a) - 1; 609 | var r = Math["floor"](e / this['DB']); 610 | var i = this['s'] << n & this['DM']; 611 | for (s = this['t'] - 1; 0 <= s; --s) { 612 | t[s + r + 1] = this[s] >> a | i; 613 | i = (this[s] & o) << n; 614 | } 615 | for (s = r - 1; 0 <= s; --s) t[s] = 0; 616 | t[r] = i; 617 | t['t'] = this['t'] + r + 1; 618 | t['s'] = this['s']; 619 | t['clamp'](); 620 | }, v['prototype']["rShiftTo"] = function G(e, t) { 621 | t['s'] = this['s']; 622 | var s = Math["floor"](e / this["DB"]); 623 | if (s >= this['t']) t['t'] = 0; else { 624 | var n = e % this['DB']; 625 | var a = this['DB'] - n; 626 | var o = (1 << n) - 1; 627 | t[0] = this[s] >> n; 628 | for (var r = s + 1; r < this['t']; ++r) { 629 | t[r - s - 1] |= (this[r] & o) << a; 630 | t[r - s] = this[r] >> n; 631 | } 632 | 0 < n && (t[this['t'] - s - 1] |= (this['s'] & o) << a); 633 | t['t'] = this['t'] - s; 634 | t["clamp"](); 635 | } 636 | }, v['prototype']['subTo'] = function Y(e, t) { 637 | 638 | var s = 0; 639 | var n = 0; 640 | var a = Math["min"](e['t'], this['t']); 641 | 642 | while (s < a) { 643 | n += this[s] - e[s]; 644 | t[s++] = n & this['DM']; 645 | n >>= this['DB']; 646 | } 647 | 648 | if (e['t'] < this['t']) { 649 | n -= e['s']; 650 | 651 | while (s < this['t']) { 652 | n += this[s]; 653 | t[s++] = n & this['DM']; 654 | n >>= this['DB']; 655 | } 656 | n += this['s']; 657 | } else { 658 | n += this['s']; 659 | 660 | while (s < e['t']) { 661 | n -= e[s]; 662 | t[s++] = n & this['DM']; 663 | n >>= this['DB']; 664 | } 665 | 666 | n -= e['s']; 667 | } 668 | 669 | n < 0 ? t['s'] = -1 : t['s'] = 0; 670 | n < -1 ? t[s++] = this['DV'] + n : 0 < n && (t[s++] = n); 671 | t['t'] = s; 672 | t['clamp'](); 673 | }, v['prototype']["multiplyTo"] = function Z(e, t) { 674 | var s = this["abs"](); 675 | var n = e["abs"](); 676 | var a = s["t"]; 677 | t['t'] = a + n['t']; 678 | while (0 <= --a) t[a] = 0; 679 | for (a = 0; a < n['t']; ++a) t[a + s['t']] = s["am"](0, n[a], t, a, 0, s['t']); 680 | 681 | t["s"] = 0; 682 | t["clamp"](); 683 | this['s'] != e['s'] && v["ZERO"]["subTo"](t, t); 684 | }, v['prototype']["squareTo"] = function Q(e) { 685 | var t = this["abs"](); 686 | var s = e["t"] = 2 * t['t']; 687 | 688 | while (0 <= --s) e[s] = 0; 689 | 690 | for (s = 0; s < t['t'] - 1; ++s) { 691 | var n = t["am"](s, t[s], e, 2 * s, 0, 1); 692 | (e[s + t['t']] += t["am"](s + 1, 2 * t[s], e, 2 * s + 1, n, t['t'] - s - 1)) >= t["DV"] && (e[s + t['t']] -= t["DV"], e[s + t['t'] + 1] = 1); 693 | } 694 | 695 | 0 < e['t'] && (e[e['t'] - 1] += t['am'](s, t[s], e, 2 * s, 0, 1)); 696 | e["s"] = 0; 697 | e["clamp"](); 698 | }, v['prototype']["divRemTo"] = function J(e, t, s) { 699 | var n = e["abs"](); 700 | if (!(n["t"] <= 0)) { 701 | var a = this['abs'](); 702 | if (a['t'] < n['t']) return null != t && t["fromInt"](0), void (null != s && this["copyTo"](s)); 703 | null == s && (s = w()); 704 | var o = w(); 705 | var r = this["s"]; 706 | var i = e['s']; 707 | 708 | var _ = this["DB"] - x(n[n['t'] - 1]); 709 | 710 | if (0 < _) { 711 | n["lShiftTo"](_, o); 712 | a["lShiftTo"](_, s); 713 | } else { 714 | n["copyTo"](o); 715 | a['copyTo'](s); 716 | } 717 | 718 | var c = o['t']; 719 | var u = o[c - 1]; 720 | 721 | if (0 != u) { 722 | var p = u * (1 << this["F1"]) + (1 < c ? o[c - 2] >> this["F2"] : 0); 723 | var g = this["FV"] / p; 724 | var l = (1 << this["F1"]) / p; 725 | var d = 1 << this["F2"]; 726 | var h = s['t']; 727 | var f = h - c; 728 | 729 | if (null == t) { 730 | var m = w(); 731 | } else { 732 | var m = t; 733 | } 734 | 735 | o["dlShiftTo"](f, m); 736 | 0 <= s["compareTo"](m) && (s[s['t']++] = 1, s["subTo"](m, s)); 737 | v["ONE"]["dlShiftTo"](c, m); 738 | m["subTo"](o, o); 739 | 740 | while (o["t"] < c) o[o['t']++] = 0; 741 | 742 | while (0 <= --f) { 743 | var b = s[--h] == u ? this["DM"] : Math["floor"](s[h] * g + (s[h - 1] + d) * l); 744 | 745 | if ((s[h] += o["am"](0, b, s, f, 0, c)) < b) { 746 | o["dlShiftTo"](f, m); 747 | s['subTo'](m, s); 748 | 749 | while (s[h] < --b) s['subTo'](m, s); 750 | } 751 | } 752 | 753 | null != t && (s["drShiftTo"](c, t), r != i && v["ZERO"]['subTo'](t, t)); 754 | s['t'] = c; 755 | s["clamp"](); 756 | 0 < _ && s["rShiftTo"](_, s); 757 | r < 0 && v["ZERO"]['subTo'](s, s); 758 | } 759 | } 760 | }, v['prototype']["invDigit"] = function K() { 761 | 762 | if (this["t"] < 1) return 0; 763 | var e = this[0]; 764 | if (0 == (1 & e)) return 0; 765 | var t = 3 & e; 766 | return 0 < (t = (t = (t = (t = t * (2 - (15 & e) * t) & 15) * (2 - (255 & e) * t) & 255) * (2 - ((65535 & e) * t & 65535)) & 65535) * (2 - e * t % this["DV"]) % this["DV"]) ? this['DV'] - t : -t; 767 | }, v['prototype']["isEven"] = function ee() { 768 | return 0 == (0 < this['t'] ? 1 & this[0] : this["s"]); 769 | }, v['prototype']["exp"] = function te(e, t) { 770 | if (4294967295 < e || e < 1) return v["ONE"]; 771 | var s = w(); 772 | var n = w(); 773 | var a = t["convert"](this); 774 | var o = x(e) - 1; 775 | a["copyTo"](s); 776 | while (0 <= --o) if (t["sqrTo"](s, n), 0 < (e & 1 << o)) t["mulTo"](n, a, s); else { 777 | var r = s; 778 | s = n; 779 | n = r; 780 | } 781 | return t["revert"](s); 782 | }, v['prototype']["toString"] = function se(e) { 783 | if (this["s"] < 0) return "-" + this["negate"]()["toString"](e); 784 | var t; 785 | if (16 == e) t = 4; else if (8 == e) t = 3; else if (2 == e) t = 1; else if (32 == e) t = 5; else { 786 | if (4 != e) return this["toRadix"](e); 787 | t = 2; 788 | } 789 | var s; 790 | var n = (1 << t) - 1; 791 | var a = !1; 792 | var o = ""; 793 | var r = this["t"]; 794 | var i = this["DB"] - r * this['DB'] % t; 795 | if (0 < r--) { 796 | i < this['DB'] && 0 < (s = this[r] >> i) && (a = !0, o = m(s)); 797 | while (0 <= r) { 798 | i < t ? (s = (this[r] & (1 << i) - 1) << t - i, s |= this[--r] >> (i += this['DB'] - t)) : (s = this[r] >> (i -= t) & n, i <= 0 && (i += this['DB'], --r)); 799 | 0 < s && (a = !0); 800 | a && (o += m(s)); 801 | } 802 | } 803 | 804 | return a ? o : "0"; 805 | }, v['prototype']["negate"] = function ne() { 806 | var e = w(); 807 | return v["ZERO"]["subTo"](this, e), e; 808 | }, v['prototype']["abs"] = function ae() { 809 | 810 | return this['s'] < 0 ? this['negate']() : this; 811 | }, v['prototype']['compareTo'] = function oe(e) { 812 | 813 | var t = this['s'] - e['s']; 814 | if (0 != t) return t; 815 | var s = this['t']; 816 | if (0 != (t = s - e['t'])) return this['s'] < 0 ? -t : t; 817 | 818 | while (0 <= --s) if (0 != (t = this[s] - e[s])) return t; 819 | 820 | return 0; 821 | }, v['prototype']["bitLength"] = function re() { 822 | return this["t"] <= 0 ? 0 : this["DB"] * (this['t'] - 1) + x(this[this['t'] - 1] ^ this["s"] & this["DM"]); 823 | }, v['prototype']["mod"] = function ie(e) { 824 | var t = w(); 825 | return this["abs"]()["divRemTo"](e, null, t), this['s'] < 0 && 0 < t["compareTo"](v["ZERO"]) && e["subTo"](t, t), t; 826 | }, v['prototype']["modPowInt"] = function $_CEW(e, t) { 827 | var s; 828 | return e < 256 || t["isEven"]() ? s = new y(t) : s = new k(t), this["exp"](e, s); 829 | }, v["ZERO"] = b(0), v["ONE"] = b(1), C['prototype']["doPublic"] = function ce(e) { 830 | return e["modPowInt"](this["e"], this['n']); 831 | }, C['prototype']["setPublic"] = function ue(e, t) { 832 | if (null != e && null != t && 0 < e['length'] && 0 < t['length']) { 833 | this['n'] = function s(e, t) { 834 | 835 | return new v(e, t); 836 | }(e, 16); 837 | 838 | this['e'] = parseInt(t, 16); 839 | } else { 840 | console && console["error"] && console['error']("Invalid RSA public key"); 841 | } 842 | }, C['prototype']['encrypt'] = function pe(e) { 843 | var t = function i(e, t) { 844 | if (t < e["length"] + 11) return console && console["error"] && console['error']("Message too long for RSA"), null; 845 | var s = []; 846 | var n = e['length'] - 1; 847 | while (0 <= n && 0 < t) { 848 | var a = e["charCodeAt"](n--); 849 | if (a < 128) { 850 | s[--t] = a; 851 | } else { 852 | if (127 < a && a < 2048) { 853 | s[--t] = 63 & a | 128; 854 | s[--t] = a >> 6 | 192; 855 | } else { 856 | s[--t] = 63 & a | 128; 857 | s[--t] = a >> 6 & 63 | 128; 858 | s[--t] = a >> 12 | 224; 859 | } 860 | } 861 | } 862 | s[--t] = 0; 863 | var o = new g(); 864 | var r = []; 865 | while (2 < t) { 866 | r[0] = 0; 867 | while (0 == r[0]) o["nextBytes"](r); 868 | s[--t] = r[0]; 869 | } 870 | return s[--t] = 2, s[--t] = 0, new v(s); 871 | }(e, this['n']['bitLength']() + 7 >> 3); 872 | 873 | if (null == t) return null; 874 | var s = this['doPublic'](t); 875 | if (null == s) return null; 876 | var n = s['toString'](16); 877 | return 0 == (1 & n['length']) ? n : '0' + n; 878 | }, C; 879 | }(); 880 | 881 | return a; 882 | } 883 | function w(e) { 884 | for (var t = [], s = 0, n = 0; n < 2 * e.length; n += 2) { 885 | t[n >>> 3] |= parseInt(e[s], 10) << 24 - n % 8 * 4; 886 | s++; 887 | } 888 | 889 | for (var a = [], o = 0; o < e.length; o++) { 890 | var r = t[o >>> 2] >>> 24 - o % 4 * 8 & 255; 891 | a.push((r >>> 4).toString(16)); 892 | a.push((15 & r).toString(16)); 893 | } 894 | 895 | return a.join(""); 896 | } 897 | 898 | function get_w(e, track) { 899 | var eee = e; // var n = c.guid() 900 | 901 | var n = "c2fa6d0dde9fd7da"; 902 | eee.track = get_track(track); 903 | var a = new (_())().encrypt(n); 904 | var o = n_encrypt().encrypt(JSON.stringify(eee), n); 905 | return w(o) + a; 906 | } 907 | -------------------------------------------------------------------------------- /gee4/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jxhczhl/spider/4d874822d79d0947786248d8d4111b9193202a30/gee4/bg.jpg -------------------------------------------------------------------------------- /gee4/geet4.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @Time : 2022/4/12 15:22 4 | @Auth : 黑脸怪 5 | @File :geet4.py 6 | 7 | """ 8 | import json 9 | import random 10 | import time 11 | import urllib.parse 12 | import uuid 13 | import execjs 14 | import ddddocr 15 | import requests 16 | 17 | 18 | class Geet4(): 19 | static_domain = "https://static.geetest.com/" 20 | bg_url = "" 21 | slice_url = "" 22 | lot_number = "" 23 | ptime = 0 24 | 25 | def __init__(self, captcha_id): 26 | # self.r 保持session 27 | self.r = requests.session() 28 | self.captcha_id = captcha_id 29 | self.challenge = uuid.uuid4() 30 | with open("./1.js") as f: 31 | js = f.read() 32 | self.js_exec = execjs.compile(js) 33 | 34 | def _get_nowTime(self): 35 | return int(time.time() * 1000) 36 | 37 | def One_reg(self): 38 | params = { 39 | "captcha_id": self.captcha_id, 40 | "challenge": self.challenge, 41 | "client_type": "web", 42 | "risk_type": "slide", 43 | "lang": "zh", 44 | "callback": "geetest_{}".format(self._get_nowTime()) 45 | } 46 | url = "https://gcaptcha4.geetest.com/load" 47 | res = self.r.get(url, params=params).text 48 | res = res.replace(params["callback"], "")[1:-1] 49 | res_json = json.loads(res) 50 | self.bg_url = urllib.parse.urljoin(self.static_domain, res_json["data"]["bg"]) 51 | self.slice_url = urllib.parse.urljoin(self.static_domain, res_json["data"]["slice"]) 52 | self.lot_number = res_json["data"]["lot_number"] 53 | 54 | def get_bg_slice(self): 55 | bg = requests.get(self.bg_url).content 56 | slice = requests.get(self.slice_url).content 57 | # with open("./bg.jpg","wb") as f: 58 | # f.write(self.bg) 59 | # with open("./slice.jpg","wb") as f: 60 | # f.write(self.slice) 61 | return bg, slice 62 | 63 | def notch_position_x(self, bg, slice): 64 | det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False) 65 | res = det.slide_match(slice, bg, simple_target=True) 66 | return res["target"][0] 67 | 68 | def get_track(self, distance): 69 | def __ease_out_expo(sep): 70 | if sep == 1: 71 | return 1 72 | else: 73 | return 1 - pow(2, -10 * sep) 74 | 75 | if not isinstance(distance, int) or distance < 0: 76 | raise ValueError(f"distance类型必须是大于等于0的整数: distance: {distance}, type: {type(distance)}") 77 | # 初始化轨迹列表 78 | slide_track = [ 79 | [random.randint(-50, -10), random.randint(-50, -10), 0], 80 | [0, 0, 0], 81 | ] 82 | # 共记录count次滑块位置信息 83 | count = 30 + int(distance / 2) 84 | # 初始化滑动时间 85 | t = random.randint(50, 100) 86 | # 记录上一次滑动的距离 87 | _x = 0 88 | _y = 0 89 | for i in range(count): 90 | # 已滑动的横向距离 91 | x = round(__ease_out_expo(i / count) * distance) 92 | # 滑动过程消耗的时间 93 | t += random.randint(10, 20) 94 | if x == _x: 95 | continue 96 | slide_track.append([x, _y, t]) 97 | _x = x 98 | slide_track.append(slide_track[-1]) 99 | self.ptime = slide_track[-1][-1] 100 | return slide_track 101 | 102 | def get_w(self, distance, track): 103 | eee = { 104 | "device_id": "A59C", 105 | "em": "{ph: 0, cp: 0, ek: '11', wd: 1, nt: 0, sc: 0,si: 0}", 106 | "ep": "123", 107 | "geetest": "captcha", 108 | "lang": "zh", 109 | "lot_number": self.lot_number, 110 | "passtime": self.ptime, 111 | "setLeft": distance + 1, 112 | "userresponse": (distance + 1) / 1.0059466666666665, 113 | "fxy6": "143036667" 114 | } 115 | res = self.js_exec.call("get_w", eee, track) 116 | return res 117 | 118 | def ok(self, w): 119 | params = { 120 | "captcha_id": self.captcha_id, 121 | "challenge": self.challenge, 122 | "client_type": "web", 123 | "lot_number": self.lot_number, 124 | "risk_type": "slide", 125 | "pt": "1", 126 | "w": w, 127 | "callback": "geetest_{}".format(self._get_nowTime()) 128 | 129 | } 130 | url = "https://gcaptcha4.geetest.com/verify" 131 | res = self.r.get(url, params=params).text 132 | res = res.replace(params["callback"], "")[1:-1] 133 | return json.loads(res) 134 | 135 | def main(self): 136 | # 初始化获取id和滑块图 137 | self.One_reg() 138 | # 访问图片获得字节集 139 | bg, slice = self.get_bg_slice() 140 | distance = self.notch_position_x(bg, slice) 141 | print("距离:", distance) 142 | track = self.get_track(distance) 143 | # print(track) 144 | w = self.get_w(distance, track) 145 | # print(w) 146 | return self.ok(w) 147 | 148 | 149 | if __name__ == '__main__': 150 | geet = Geet4(captcha_id="24f56dc13c40dc4a02fd0318567caef5") 151 | res=geet.main() 152 | try: 153 | if res["data"]["seccode"]["pass_token"]: 154 | print("滑块成功") 155 | except KeyError: 156 | print("滑块失败") 157 | print(res) 158 | 159 | -------------------------------------------------------------------------------- /gee4/slice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jxhczhl/spider/4d874822d79d0947786248d8d4111b9193202a30/gee4/slice.jpg -------------------------------------------------------------------------------- /hlg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jxhczhl/spider/4d874822d79d0947786248d8d4111b9193202a30/hlg.zip -------------------------------------------------------------------------------- /云汉芯城.js: -------------------------------------------------------------------------------- 1 | window = global; 2 | var _0x54521b = {}; 3 | var _0x39a116 = { 4 | 'QLyKR': function (_0x1ffa91, _0xee1bea) { 5 | return _0x1ffa91 < _0xee1bea; 6 | }, 7 | 'hAWZk': function (_0x1bac1e, _0x4ff53f) { 8 | return _0x1bac1e + _0x4ff53f; 9 | }, 10 | 'vDgtD': function (_0x45e506, _0x5ce730) { 11 | return _0x45e506 > _0x5ce730; 12 | }, 13 | 'gvsjB': function (_0x1728e7, _0x22353f) { 14 | return _0x1728e7(_0x22353f); 15 | }, 16 | 'zdyBA': function (_0x11729a, _0x2705aa) { 17 | return _0x11729a / _0x2705aa; 18 | }, 19 | 'evvVS': function (_0x44447e, _0x32d23e) { 20 | return _0x44447e - _0x32d23e; 21 | }, 22 | 'PPYAx': function (_0x2a92e0, _0xd5244a) { 23 | return _0x2a92e0 * _0xd5244a; 24 | }, 25 | 'Exrix': function (_0x2850fd, _0x37ebba) { 26 | return _0x2850fd * _0x37ebba; 27 | }, 28 | 'QEDeM': function (_0x5745ae, _0x5095b1, _0x265c5a) { 29 | return _0x5745ae(_0x5095b1, _0x265c5a); 30 | }, 31 | 'GxEIf': function (_0xf1c568, _0x1e5067) { 32 | return _0xf1c568 == _0x1e5067; 33 | }, 34 | 'CuQln': function (_0x2aba1c, _0x39cee2) { 35 | return _0x2aba1c / _0x39cee2; 36 | }, 37 | 'DNEeE': "
正在加载,请稍候...
", 38 | 'jwXzD': function (_0x97f153, _0x2c012f) { 39 | return _0x97f153(_0x2c012f); 40 | }, 41 | 'WfHgK': "body", 42 | 'obsWe': function (_0x4ca842, _0x32d11e) { 43 | return _0x4ca842 === _0x32d11e; 44 | }, 45 | 'pxIUg': "string", 46 | 'xvrSV': "请上传Word文件", 47 | 'FuFbG': function (_0x3ad5aa, _0x14bd62) { 48 | return _0x3ad5aa(_0x14bd62); 49 | }, 50 | 'ugmby': function (_0x4c9b8f, _0x5dadcb) { 51 | return _0x4c9b8f - _0x5dadcb; 52 | }, 53 | 'VZPOs': function (_0x16092a, _0x4e2671) { 54 | return _0x16092a + _0x4e2671; 55 | }, 56 | 'aAHCK': function (_0x3a072a, _0x13cad1) { 57 | return _0x3a072a - _0x13cad1; 58 | }, 59 | 'zluNX': function (_0xadb9db, _0x461930) { 60 | return _0xadb9db - _0x461930; 61 | }, 62 | 'yKoKM': function (_0x5605e3, _0x27fdc5) { 63 | return _0x5605e3 & _0x27fdc5; 64 | }, 65 | 'MJapS': function (_0x4dd08e, _0x50b287) { 66 | return _0x4dd08e << _0x50b287; 67 | }, 68 | 'ieMGa': function (_0x97c218, _0x3cae48) { 69 | return _0x97c218 & _0x3cae48; 70 | }, 71 | 'PWOZL': function (_0x495522, _0x9d734b) { 72 | return _0x495522 << _0x9d734b; 73 | }, 74 | 'sUebT': function (_0x412c63, _0x5512e8) { 75 | return _0x412c63 | _0x5512e8; 76 | }, 77 | 'jPEXm': function (_0x15e9c4, _0x32c08e) { 78 | return _0x15e9c4 & _0x32c08e; 79 | }, 80 | 'SbPcC': function (_0x537b67, _0x327c6b) { 81 | return _0x537b67 != _0x327c6b; 82 | }, 83 | 'SFKlN': function (_0x3c2bf9, _0xf9337) { 84 | return _0x3c2bf9 | _0xf9337; 85 | }, 86 | 'QQYZV': function (_0x4cdd3e, _0x56c4de) { 87 | return _0x4cdd3e & _0x56c4de; 88 | }, 89 | 'qxSvF': function (_0x3c2b00, _0x40b4d7) { 90 | return _0x3c2b00 + _0x40b4d7; 91 | } 92 | }; 93 | 94 | _0x54521b["specialKey"] = function () { 95 | for (var _0x3f6399 = '', _0x5ee7fc = 0; _0x39a116["QLyKR"](_0x5ee7fc, 16); _0x5ee7fc++) { 96 | _0x3f6399 += _0x54521b["strConKey"](_0x5ee7fc); 97 | } 98 | 99 | return _0x3f6399; 100 | }; 101 | 102 | _0x54521b["isIFloat"] = function (_0x1618ab) { 103 | var _0x47597d = /^(\d{2,}|[1-9])\.\d+|0\.\d*[1-9]\d*$/; 104 | return _0x47597d["test"](_0x1618ab); 105 | }; 106 | 107 | _0x54521b["isDFloat"] = function (_0x2927e3) { 108 | return false; 109 | }; 110 | 111 | _0x54521b["getSpecialKey"] = function (_0x20edf4) { 112 | var _0x49cafc; 113 | 114 | var _0x12265b = ''; 115 | var _0x4c7cfe = ''; 116 | var _0x24ee4f = ''; 117 | var _0x5d4ff8 = 0; 118 | var _0x385825 = ''; 119 | _0x4c7cfe = _0x20edf4['v']; 120 | _0x24ee4f = _0x4c7cfe["substr"](_0x4c7cfe["length"] - 1); 121 | _0x24ee4f <= 1 && (_0x24ee4f = 5); 122 | var t = JSON["stringify"](Math["ceil"](_0x4c7cfe / _0x24ee4f)) 123 | _0x20edf4['t']=t; 124 | _0x49cafc = JSON['stringify'](Math['ceil'](_0x4c7cfe/_0x24ee4f))['substr'](t['length']- 1); 125 | _0x5d4ff8 = parseInt(_0x49cafc) + Math["ceil"](6.1); 126 | _0x385825 = _0x54521b["specialKey"](); 127 | _0x385825 = _0x385825["substr"](_0x5d4ff8) + _0x385825["substr"](0, _0x5d4ff8); 128 | _0x12265b = _0x54521b["md5"](JSON["stringify"](_0x54521b["sortAsc"](_0x20edf4)) + _0x385825); 129 | _0x12265b = _0x12265b["substr"](1, 8) + _0x12265b["substr"](_0x12265b["length"] - 9, 8); 130 | _0x20edf4["s"]=_0x12265b; 131 | return _0x20edf4; 132 | }; 133 | 134 | _0x54521b["parseTernary"] = function (_0x301ac0) { 135 | var _0x56f912 = _0x301ac0; 136 | "number" == typeof _0x56f912 && "string" == typeof _0x56f912 || (_0x56f912 = _0x56f912["toString"]()); 137 | return _0x56f912["split"]('')["reverse"]()["join"]('')["replace"](/(\d{3})/g, "$1,")["replace"](/\,$/, '')["split"]('')["reverse"]()["join"](''); 138 | }; 139 | 140 | _0x54521b["floatAdd"] = function (_0x3e24dd, _0x3fb74c) { 141 | var _0x3188a2; 142 | 143 | var _0x2788d6; 144 | 145 | var _0x33529c; 146 | 147 | try { 148 | _0x3188a2 = _0x3e24dd["toString"]()["split"]('.')[1]["length"]; 149 | } catch (_0x566cbf) { 150 | _0x3188a2 = 0; 151 | } 152 | 153 | try { 154 | _0x2788d6 = _0x3fb74c["toString"]()["split"]('.')[1]["length"]; 155 | } catch (_0x20f021) { 156 | _0x2788d6 = 0; 157 | } 158 | 159 | _0x33529c = Math["pow"](10, Math["max"](_0x3188a2, _0x2788d6)); 160 | return (_0x39a116["PPYAx"](_0x3e24dd, _0x33529c) + _0x39a116["Exrix"](_0x3fb74c, _0x33529c)) / _0x33529c; 161 | }; 162 | 163 | _0x54521b["floatSubtract"] = function (_0x237e8e, _0x5e1a5c) { 164 | return _0x39a116["QEDeM"](accAdd, _0x237e8e, -_0x5e1a5c); 165 | }; 166 | 167 | _0x54521b["floatMultiply"] = function (_0x234410, _0x2f0cfa) { 168 | if (void 0 == _0x234410 || _0x39a116["GxEIf"](void 0, _0x2f0cfa)) { 169 | return 0; 170 | } 171 | 172 | var _0xaf99a0 = 0; 173 | 174 | var _0x24bd28 = _0x234410["toString"](); 175 | 176 | var _0x269025 = _0x2f0cfa["toString"](); 177 | 178 | try { 179 | _0xaf99a0 += _0x24bd28["split"]('.')[1]["length"]; 180 | } catch (_0x38c146) {} 181 | 182 | try { 183 | _0xaf99a0 += _0x269025["split"]('.')[1]["length"]; 184 | } catch (_0x46e6d8) {} 185 | 186 | return _0x39a116["CuQln"](Number(_0x24bd28["replace"]('.', '')) * Number(_0x269025["replace"]('.', '')), Math["pow"](10, _0xaf99a0)); 187 | }; 188 | 189 | _0x54521b["floatDivide"] = function (_0x318fa0, _0x4637cd) { 190 | var _0x3e0c3b = 0; 191 | var _0x4a29c1 = 0; 192 | 193 | var _0x1cd99a; 194 | 195 | var _0xb841fc; 196 | 197 | try { 198 | _0x3e0c3b = _0x318fa0["toString"]()["split"]('.')[1]["length"]; 199 | } catch (_0x2ed7e5) {} 200 | 201 | try { 202 | _0x4a29c1 = _0x4637cd["toString"]()["split"]('.')[1]["length"]; 203 | } catch (_0x233af3) {} 204 | 205 | with (Math) { 206 | _0xb841fc = _0x39a116["gvsjB"](Number, _0x4637cd["toString"]()["replace"]('.', ''));{ 207 | _0x1cd99a = Number(_0x318fa0["toString"]()["replace"]('.', '')); 208 | return _0x1cd99a / _0xb841fc * pow(10, _0x4a29c1 - _0x3e0c3b); 209 | } 210 | } 211 | }; 212 | 213 | _0x54521b["toFixed"] = function (_0x3c5936, _0x153097, _0x211d37) { 214 | var _0x1bc442 = _0x54521b["floatMultiply"](_0x3c5936, Math["pow"](10, _0x153097)); 215 | 216 | var _0x45e44a = Math["floor"](_0x1bc442); 217 | 218 | var _0x58bae8 = _0x54521b["floatDivide"](_0x45e44a, Math["pow"](10, _0x153097)); 219 | 220 | return _0x211d37 ? _0x58bae8["toFixed"](2) - 0 : _0x58bae8; 221 | }; 222 | 223 | _0x54521b["doTCompile"] = function (_0x4d2eae, _0x29374a, _0x2ae5d7) { 224 | var _0x147a9a = doT["template"](_0x54521b(_0x4d2eae)["html"]()); 225 | 226 | var _0x1a9984 = _0x147a9a(_0x29374a); 227 | 228 | _0x2ae5d7 && _0x2ae5d7(_0x29374a); 229 | return _0x1a9984; 230 | }; 231 | 232 | _0x54521b["lockLoading"] = function (_0x449e91) { 233 | function _0x34e77f() { 234 | var _0x3ed744 = _0x39a116["DNEeE"]; 235 | 236 | _0x39a116["gvsjB"](_0x54521b, "body")["append"](_0x3ed744); 237 | } 238 | 239 | function _0x1bbc29() { 240 | _0x54521b("#lockWindow")["remove"](); 241 | } 242 | 243 | var _0x11e9ac = { 244 | "lock": _0x34e77f, 245 | "unlock": _0x1bbc29 246 | }; 247 | 248 | _0x39a116["jwXzD"](_0x54521b, _0x39a116["WfHgK"])['on']("click", "#lockWindow", function (_0x6efc02) { 249 | _0x6efc02["stopPropagation"](); 250 | 251 | return false; 252 | }); 253 | 254 | return _0x11e9ac; 255 | }; 256 | 257 | _0x54521b["isEmptyValue"] = function (_0x4306f4) { 258 | var _0x4f2800; 259 | 260 | if (null == _0x4306f4) { 261 | return true; 262 | } 263 | 264 | switch (_0x4f2800 = Object["prototype"]["toString"]["call"](_0x4306f4)["slice"](8, -1)) { 265 | case "String": 266 | return !_0x54521b["trim"](_0x4306f4); 267 | 268 | case "Array": 269 | return !_0x4306f4["length"]; 270 | 271 | case "Object": 272 | return _0x54521b["isEmptyObject"](_0x4306f4); 273 | 274 | default: 275 | return false; 276 | } 277 | }; 278 | 279 | _0x54521b["sortAsc"] = function (_0x11eec2) { 280 | var _0x51797c = []; 281 | 282 | for (var _0x2ee18a in _0x11eec2) 283 | _0x51797c["push"](_0x2ee18a); 284 | 285 | _0x51797c["sort"](); 286 | 287 | for (var _0x5bbd4d = 0, _0x64624e = {}; _0x5bbd4d < _0x51797c["length"]; _0x5bbd4d++) { 288 | var _0x58fb4c = _0x11eec2[_0x51797c[_0x5bbd4d]]; 289 | _0x58fb4c && (_0x39a116["GxEIf"]("[Object Object]", {} 290 | ["toString"]["call"](_0x58fb4c)) ? _0x58fb4c = sortAsc(_0x58fb4c) : "[Object Array]" == {} 291 | ["toString"]["call"](_0x58fb4c) && (_0x58fb4c = JSON["stringify"](_0x58fb4c)["replace"](/:/g, '='))); 292 | "string" != typeof _0x58fb4c && (_0x58fb4c = JSON["stringify"](_0x58fb4c)); 293 | "page" != _0x51797c[_0x5bbd4d] && "page_size" != _0x51797c[_0x5bbd4d] && (_0x64624e[_0x51797c[_0x5bbd4d]] = _0x58fb4c); 294 | } 295 | 296 | return _0x64624e; 297 | }; 298 | 299 | _0x54521b["sortBy"] = function (_0x45e8c7) { 300 | var _0xf0a014 = { 301 | 'gbDbB': function (_0x440774, _0x123412) { 302 | return _0x39a116["obsWe"](_0x440774, _0x123412); 303 | } 304 | }; 305 | return function (_0x26679e, _0x1bed76) { 306 | var _0x59d98e; 307 | 308 | var _0x246587; 309 | 310 | if ("object" == typeof _0x26679e && "object" == typeof _0x1bed76 && _0x26679e && _0x1bed76) { 311 | _0x59d98e = _0x26679e[_0x45e8c7]; 312 | _0x246587 = _0x1bed76[_0x45e8c7]; 313 | return _0xf0a014["gbDbB"](_0x59d98e, _0x246587) ? 0 : typeof _0x59d98e == typeof _0x246587 ? _0x59d98e < _0x246587 ? -1 : 1 : typeof _0x59d98e < typeof _0x246587 ? -1 : 1; 314 | } 315 | 316 | throw "error"; 317 | }; 318 | }; 319 | 320 | _0x54521b["checkImg"] = function (_0x2b1b48) { 321 | var _0x1a63ce; 322 | 323 | _0x1a63ce = _0x39a116["pxIUg"] == typeof _0x2b1b48 ? _0x2b1b48 : _0x2b1b48["val"](); 324 | return '' == _0x1a63ce ? (_0x54521b["alert"]("请上传图片"), false) : !!/\.(gif|jpg|jpeg|png)$/i["test"](_0x1a63ce) || (_0x54521b["alert"]("图片类型必须是.gif,jpeg,jpg,png中的一种"), false); 325 | }; 326 | 327 | _0x54521b["checkExcel"] = function (_0x345e8e) { 328 | var _0xdf46c7; 329 | 330 | _0xdf46c7 = "string" == typeof _0x345e8e ? _0x345e8e : _0x345e8e["val"](); 331 | return '' == _0xdf46c7 ? (_0x54521b["alert"]("请上传Excel文件"), false) : !!/\.(xlsx|xlsm|xltx|xltm|xlsb|xlam)$/i["test"](_0xdf46c7) || (_0x54521b["alert"]("文件必须是.xlsx,xlsm,xltx,xltm,xlsb,xlam中的一种"), false); 332 | }; 333 | 334 | _0x54521b["checkWord"] = function (_0x55907e) { 335 | var _0x377f69; 336 | 337 | _0x377f69 = "string" == typeof _0x55907e ? _0x55907e : _0x55907e["val"](); 338 | return '' == _0x377f69 ? (_0x54521b["alert"](_0x39a116["xvrSV"]), false) : !!/\.(docx|docm|dotx|dotm)$/i["test"](_0x377f69) || (_0x54521b["alert"]("文件必须是.docx,docm,dotx,dotm中的一种"), false); 339 | }; 340 | 341 | _0x54521b["changeDecimalBuZero"] = function (_0x5bfdad, _0x189e6c) { 342 | var _0x171de8 = parseFloat(_0x5bfdad); 343 | 344 | if (_0x39a116["FuFbG"](isNaN, _0x171de8)) { 345 | return 0; 346 | } 347 | 348 | var _0xc940f4 = _0x5bfdad["toString"](); 349 | 350 | var _0x1658b7 = _0xc940f4["indexOf"]('.'); 351 | 352 | for (_0x1658b7 < 0 && (_0x1658b7 = _0xc940f4["length"], _0xc940f4 += '.'); _0xc940f4["length"] <= _0x1658b7 + _0x189e6c; ) { 353 | _0xc940f4 += '0'; 354 | } 355 | 356 | return _0xc940f4; 357 | }; 358 | 359 | _0x54521b["strConKey"] = function (_0x285b96) { 360 | var _0x3332d4 = ['r', 'L', 'h', 'p', '@', 'N', '4', 'Z', ')', '!', 'G', '*', '-', '^', 'k', '$', 't', '+', 'U', 'w', '_', 'i', 'K', '0', 'z', '&', 'B', 'M', '|', ':', 'R', 'q']; 361 | 362 | switch (_0x285b96) { 363 | case 0: 364 | return _0x3332d4[_0x39a116["ugmby"](Math["pow"](4, 2), Math["ceil"](1.1))]; 365 | 366 | case 1: 367 | return _0x3332d4[_0x39a116["VZPOs"](Math["sqrt"](36), Math["pow"](2, 2)) - Math["floor"](1.6)]; 368 | 369 | case 2: 370 | return _0x3332d4[Math["floor"](8.1) - Math["ceil"](0.6)]; 371 | 372 | case 3: 373 | return _0x3332d4[_0x39a116["VZPOs"](_0x39a116["aAHCK"](Math["pow"](3, 3), Math["pow"](3, 2)), Math["sqrt"](1))]; 374 | 375 | case 4: 376 | return _0x3332d4[Math["floor"](15.3) + Math["ceil"](6.9)]; 377 | 378 | case 5: 379 | return _0x3332d4[Math["sqrt"](36) + Math["pow"](4, 2) + Math["ceil"](1.2)]; 380 | 381 | case 6: 382 | return _0x3332d4[Math["sqrt"](256) + Math["pow"](3, 2)]; 383 | 384 | case 7: 385 | return _0x3332d4[Math["floor"](14.2) + Math["pow"](3, 3) - Math["ceil"](14.8)]; 386 | 387 | case 8: 388 | return _0x3332d4[Math["sqrt"](16) + Math["ceil"](11.4)]; 389 | 390 | case 9: 391 | return _0x3332d4[_0x39a116["VZPOs"](Math["ceil"](9.6), Math["pow"](4, 2)) + Math["abs"](-4)]; 392 | 393 | case 10: 394 | return _0x3332d4[Math["floor"](9.5) + Math["abs"](-6)]; 395 | 396 | case 11: 397 | return _0x3332d4[_0x39a116["zluNX"](Math["pow"](4, 2), Math["sqrt"](1))]; 398 | 399 | case 12: 400 | return _0x3332d4[Math["ceil"](10.4) + Math["sqrt"](16) - Math["abs"](Math["ceil"](1.1))]; 401 | 402 | case 13: 403 | return _0x3332d4[Math["pow"](6, 2) - Math["abs"](-12)]; 404 | 405 | case 14: 406 | return _0x3332d4[Math["ceil"](5.2) - Math["abs"](Math["sqrt"](4)) - Math["floor"](3.2)]; 407 | 408 | case 15: 409 | return _0x3332d4[Math["abs"](-10)]; 410 | 411 | default: 412 | return ''; 413 | } 414 | }; 415 | 416 | _0x54521b["baseTmp"] = function (_0x2853cc) { 417 | 418 | var _0x17a1e4 = { 419 | "oRWSI": function (_0x34e551, _0x26eeeb) { 420 | return _0x34e551 * _0x26eeeb; 421 | }, 422 | "nhPou": function (_0x563500, _0xaab587) { 423 | return _0x563500 % _0xaab587; 424 | } 425 | }; 426 | 427 | try { 428 | window["_0x1838e6"](_0x54521b["md5"](_0x2853cc)); 429 | } catch (_0x24b24a) {} 430 | 431 | _0x2853cc = _0x2853cc + window["_0x47d2e6"] || ''; 432 | var _0x1ff7fa = "dmFyIGhleGNhc2U9MDt2YXIgYjY0cGFkPSIiO3ZhciBjaHJzej0xNjtmdW5jdGlvbiBoZXhfbWQ1KGEpe3JldHVybiBiaW5sMmhleChjb3JlX21kNShzdHIyYmlubChhKSxhLmxlbmd0aCpjaHJzeikpfWZ1bmN0aW9uIGNvcmVfbWQ1KHAsayl7cFtrPj41XXw9MTI4PDwoKGspJTMyKTtwWygoKGsrNjQpPj4+OSk8PDQpKzE0XT1rO3ZhciBvPTE3MzI1ODQxOTM7dmFyIG49LTI3MTczMzg3OTt2YXIgbT0tMTczMjU4NDE5NDt2YXIgbD0yNzE3MzM4Nzg7Zm9yKHZhciBnPTA7ZzxwLmxlbmd0aDtnKz0xNil7dmFyIGo9bzt2YXIgaD1uO3ZhciBmPW07dmFyIGU9bDtvPW1kNV9mZihvLG4sbSxsLHBbZyswXSw3LC02ODA5NzY5MzYpO2w9bWQ1X2ZmKGwsbyxuLG0scFtnKzFdLDEyLC0zODk1NjQ1ODYpO209bWQ1X2ZmKG0sbCxvLG4scFtnKzJdLDE3LDYwNjEwNTgxOSk7bj1tZDVfZmYobixtLGwsbyxwW2crM10sMjIsLTEwNDQ1MjUzMzApO289bWQ1X2ZmKG8sbixtLGwscFtnKzRdLDcsLTE3NjQxODg5Nyk7bD1tZDVfZmYobCxvLG4sbSxwW2crNV0sMTIsMTIwMDA4MDQyNik7bT1tZDVfZmYobSxsLG8sbixwW2crNl0sMTcsLTE0NzMyMzEzNDEpO249bWQ1X2ZmKG4sbSxsLG8scFtnKzddLDIyLC00NTcwNTk4Myk7bz1tZDVfZmYobyxuLG0sbCxwW2crOF0sNywxNzcwMDM1NDE2KTtsPW1kNV9mZihsLG8sbixtLHBbZys5XSwxMiwtMTk1ODQxNDQxNyk7bT1tZDVfZmYobSxsLG8sbixwW2crMTBdLDE3LC00MjA2Myk7bj1tZDVfZmYobixtLGwsbyxwW2crMTFdLDIyLC0xOTkwNDA0MTYyKTtvPW1kNV9mZihvLG4sbSxsLHBbZysxMl0sNywxODA0NjYwNjgyKTtsPW1kNV9mZihsLG8sbixtLHBbZysxM10sMTIsLTQwMzQxMTAxKTttPW1kNV9mZihtLGwsbyxuLHBbZysxNF0sMTcsLTE1MDIwMDIyOTApO249bWQ1X2ZmKG4sbSxsLG8scFtnKzE1XSwyMiwxMjM2NTM1MzI5KTtvPW1kNV9nZyhvLG4sbSxsLHBbZysxXSw1LC0xNjU3OTY1MTApO2w9bWQ1X2dnKGwsbyxuLG0scFtnKzZdLDksLTEwNjk1MDE2MzIpO209bWQ1X2dnKG0sbCxvLG4scFtnKzExXSwxNCw2NDM3MTc3MTMpO249bWQ1X2dnKG4sbSxsLG8scFtnKzBdLDIwLC0zNzM4OTczMDIpO289bWQ1X2dnKG8sbixtLGwscFtnKzVdLDUsLTcwMTU1ODY5MSk7bD1tZDVfZ2cobCxvLG4sbSxwW2crMTBdLDksMzgwMTYwODMpO209bWQ1X2dnKG0sbCxvLG4scFtnKzE1XSwxNCwtNjYwNDc4MzM1KTtuPW1kNV9nZyhuLG0sbCxvLHBbZys0XSwyMCwtNDA1NTM3ODQ4KTtvPW1kNV9nZyhvLG4sbSxsLHBbZys5XSw1LDU2ODQ0NjQzOCk7bD1tZDVfZ2cobCxvLG4sbSxwW2crMTRdLDksLTEwMTk4MDM2OTApO209bWQ1X2dnKG0sbCxvLG4scFtnKzNdLDE0LC0xODczNjM5NjEpO249bWQ1X2dnKG4sbSxsLG8scFtnKzhdLDIwLDExNjM1MzE1MDEpO289bWQ1X2dnKG8sbixtLGwscFtnKzEzXSw1LC0xNDQ0NjgxNDY3KTtsPW1kNV9nZyhsLG8sbixtLHBbZysyXSw5LC01MTQwMzc4NCk7bT1tZDVfZ2cobSxsLG8sbixwW2crN10sMTQsMTczNTMyODQ3Myk7bj1tZDVfZ2cobixtLGwsbyxwW2crMTJdLDIwLC0xOTIxMjA3NzM0KTtvPW1kNV9oaChvLG4sbSxsLHBbZys1XSw0LC0zNzg1NTgpO2w9bWQ1X2hoKGwsbyxuLG0scFtnKzhdLDExLC0yMDIyNTc0NDYzKTttPW1kNV9oaChtLGwsbyxuLHBbZysxMV0sMTYsMTgzOTAzMDU2Mik7bj1tZDVfaGgobixtLGwsbyxwW2crMTRdLDIzLC0zNTMwOTU1Nik7bz1tZDVfaGgobyxuLG0sbCxwW2crMV0sNCwtMTUzMDk5MjA2MCk7bD1tZDVfaGgobCxvLG4sbSxwW2crNF0sMTEsMTI3Mjg5MzM1Myk7bT1tZDVfaGgobSxsLG8sbixwW2crN10sMTYsLTE1NTQ5NzYzMik7bj1tZDVfaGgobixtLGwsbyxwW2crMTBdLDIzLC0xMDk0NzMwNjQwKTtvPW1kNV9oaChvLG4sbSxsLHBbZysxM10sNCw2ODEyNzkxNzQpO2w9bWQ1X2hoKGwsbyxuLG0scFtnKzBdLDExLC0zNTg1MzcyMjIpO209bWQ1X2hoKG0sbCxvLG4scFtnKzNdLDE2LC03MjI4ODE5NzkpO249bWQ1X2hoKG4sbSxsLG8scFtnKzZdLDIzLDc2MDI5MTg5KTtvPW1kNV9oaChvLG4sbSxsLHBbZys5XSw0LC02NDAzNjQ0ODcpO2w9bWQ1X2hoKGwsbyxuLG0scFtnKzEyXSwxMSwtNDIxODE1ODM1KTttPW1kNV9oaChtLGwsbyxuLHBbZysxNV0sMTYsNTMwNzQyNTIwKTtuPW1kNV9oaChuLG0sbCxvLHBbZysyXSwyMywtOTk1MzM4NjUxKTtvPW1kNV9paShvLG4sbSxsLHBbZyswXSw2LC0xOTg2MzA4NDQpO2w9bWQ1X2lpKGwsbyxuLG0scFtnKzddLDEwLDExMjYxMTYxNDE1KTttPW1kNV9paShtLGwsbyxuLHBbZysxNF0sMTUsLTE0MTYzNTQ5MDUpO249bWQ1X2lpKG4sbSxsLG8scFtnKzVdLDIxLC01NzQzNDA1NSk7bz1tZDVfaWkobyxuLG0sbCxwW2crMTJdLDYsMTcwMDQ4NTU3MSk7bD1tZDVfaWkobCxvLG4sbSxwW2crM10sMTAsLTE4OTQ0NDY2MDYpO209bWQ1X2lpKG0sbCxvLG4scFtnKzEwXSwxNSwtMTA1MTUyMyk7bj1tZDVfaWkobixtLGwsbyxwW2crMV0sMjEsLTIwNTQ5MjI3OTkpO289bWQ1X2lpKG8sbixtLGwscFtnKzhdLDYsMTg3MzMxMzM1OSk7bD1tZDVfaWkobCxvLG4sbSxwW2crMTVdLDEwLC0zMDYxMTc0NCk7bT1tZDVfaWkobSxsLG8sbixwW2crNl0sMTUsLTE1NjAxOTgzODApO249bWQ1X2lpKG4sbSxsLG8scFtnKzEzXSwyMSwxMzA5MTUxNjQ5KTtvPW1kNV9paShvLG4sbSxsLHBbZys0XSw2LC0xNDU1MjMwNzApO2w9bWQ1X2lpKGwsbyxuLG0scFtnKzExXSwxMCwtMTEyMDIxMDM3OSk7bT1tZDVfaWkobSxsLG8sbixwW2crMl0sMTUsNzE4Nzg3MjU5KTtuPW1kNV9paShuLG0sbCxvLHBbZys5XSwyMSwtMzQzNDg1NTUxKTtvPXNhZmVfYWRkKG8saik7bj1zYWZlX2FkZChuLGgpO209c2FmZV9hZGQobSxmKTtsPXNhZmVfYWRkKGwsZSl9cmV0dXJuIEFycmF5KG8sbixtLGwpfWZ1bmN0aW9uIG1kNV9jbW4oaCxlLGQsYyxnLGYpe3JldHVybiBzYWZlX2FkZChiaXRfcm9sKHNhZmVfYWRkKHNhZmVfYWRkKGUsaCksc2FmZV9hZGQoYyxmKSksZyksZCl9ZnVuY3Rpb24gbWQ1X2ZmKGcsZixrLGosZSxpLGgpe3JldHVybiBtZDVfY21uKChmJmspfCgofmYpJmopLGcsZixlLGksaCl9ZnVuY3Rpb24gbWQ1X2dnKGcsZixrLGosZSxpLGgpe3JldHVybiBtZDVfY21uKChmJmopfChrJih+aikpLGcsZixlLGksaCl9ZnVuY3Rpb24gbWQ1X2hoKGcsZixrLGosZSxpLGgpe3JldHVybiBtZDVfY21uKGZea15qLGcsZixlLGksaCl9ZnVuY3Rpb24gbWQ1X2lpKGcsZixrLGosZSxpLGgpe3JldHVybiBtZDVfY21uKGteKGZ8KH5qKSksZyxmLGUsaSxoKX1mdW5jdGlvbiBzYWZlX2FkZChhLGQpe3ZhciBjPShhJjY1NTM1KSsoZCY2NTUzNSk7dmFyIGI9KGE+PjE2KSsoZD4+MTYpKyhjPj4xNik7cmV0dXJuKGI8PDE2KXwoYyY2NTUzNSl9ZnVuY3Rpb24gYml0X3JvbChhLGIpe3JldHVybihhPDxiKXwoYT4+PigzMi1iKSl9ZnVuY3Rpb24gc3RyMmJpbmwoZCl7dmFyIGM9QXJyYXkoKTt2YXIgYT0oMTw8Y2hyc3opLTE7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aCpjaHJzejtiKz1jaHJzeil7Y1tiPj41XXw9KGQuY2hhckNvZGVBdChiL2NocnN6KSZhKTw8KGIlMzIpfXJldHVybiBjfWZ1bmN0aW9uIGJpbmwyaGV4KGMpe3ZhciBiPWhleGNhc2U/IjAxMjM0NTY3ODlBQkNERUYiOiIwMTIzNDU2Nzg5YWJjZGVmIjt2YXIgZD0iIjtmb3IodmFyIGE9MDthPGMubGVuZ3RoKjQ7YSsrKXtkKz1iLmNoYXJBdCgoY1thPj4yXT4+KChhJTQpKjgrNCkpJjE1KStiLmNoYXJBdCgoY1thPj4yXT4+KChhJTQpKjgpKSYxNSl9cmV0dXJuIGR9d2luZG93Lmk9aGV4X21kNShtd3FxcHB6KTs="; 433 | 434 | var _0x5fe0f = new _0x3543a3(); 435 | 436 | var _0x426276 = ["W5r5W6VdIHZcT8kU", "WQ8CWRaxWQirAW=="]; 437 | 438 | function _0x2da775(_0x56918b, _0x50e295) { 439 | var _0x573d73 = { 440 | 'chCkP': function (_0x3c22c8, _0x166355) { 441 | return _0x3c22c8(_0x166355); 442 | }, 443 | 'oZCYa': function (_0x56d81e, _0x13f28a) { 444 | return _0x56d81e & _0x13f28a; 445 | }, 446 | 'pXUvw': function (_0x83b2d1, _0x401847) { 447 | return _0x17a1e4["oRWSI"](_0x83b2d1, _0x401847); 448 | }, 449 | 'nkWkZ': function (_0x3dfc50, _0x4259fd) { 450 | return _0x3dfc50 < _0x4259fd; 451 | }, 452 | 'vvgvT': function (_0x98b03, _0x4ad87f) { 453 | return _0x98b03 % _0x4ad87f; 454 | }, 455 | 'jYzBj': function (_0x307e08, _0x35155b) { 456 | return _0x17a1e4["nhPou"](_0x307e08, _0x35155b); 457 | } 458 | }; 459 | _0x56918b -= 0; 460 | var _0x160b01 = _0x426276[_0x56918b]; 461 | 462 | if (void 0 === _0x2da775["bSSGte"]) { 463 | function _0x288e9c(_0xb534a2) { 464 | for (var _0x492aa8, _0x426613, _0x4153e1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=", _0x15ca1a = _0x573d73["chCkP"](String, _0xb534a2)["replace"](/=+$/, ''), _0x18178d = '', _0x2c4df5 = 0, _0x2f44e9 = 0; _0x426613 = _0x15ca1a["charAt"](_0x2f44e9++); ~_0x426613 && (_0x492aa8 = _0x2c4df5 % 4 ? 64 * _0x492aa8 + _0x426613 : _0x426613, _0x2c4df5++ % 4) ? _0x18178d += String["fromCharCode"](_0x573d73["oZCYa"](255, _0x492aa8 >> (_0x573d73["pXUvw"](-2, _0x2c4df5) & 6))) : 0) { 465 | _0x426613 = _0x4153e1["indexOf"](_0x426613); 466 | } 467 | 468 | return _0x18178d; 469 | } 470 | 471 | function _0x4aaade(_0x4a32eb, _0x505794) { 472 | var _0x352614; 473 | 474 | var _0x1b616b = []; 475 | var _0x45b3a9 = 0; 476 | var _0x3d83da = ''; 477 | var _0xa0994f = ''; 478 | _0x4a32eb = _0x288e9c(_0x4a32eb); 479 | 480 | for (var _0x4b2ec6 = 0, _0x45b934 = _0x4a32eb["length"]; _0x4b2ec6 < _0x45b934; _0x4b2ec6++) { 481 | _0xa0994f += '%' + ('00' + _0x4a32eb["charCodeAt"](_0x4b2ec6)["toString"](16))["slice"](-2); 482 | } 483 | 484 | _0x4a32eb = decodeURIComponent(_0xa0994f); 485 | 486 | var _0x31b2db; 487 | 488 | for (_0x31b2db = 0; _0x31b2db < 256; _0x31b2db++) { 489 | _0x1b616b[_0x31b2db] = _0x31b2db; 490 | } 491 | 492 | for (_0x31b2db = 0; _0x31b2db < 256; _0x31b2db++) { 493 | _0x45b3a9 = (_0x45b3a9 + _0x1b616b[_0x31b2db] + _0x505794["charCodeAt"](_0x31b2db % _0x505794["length"])) % 256; 494 | _0x352614 = _0x1b616b[_0x31b2db]; 495 | _0x1b616b[_0x31b2db] = _0x1b616b[_0x45b3a9]; 496 | _0x1b616b[_0x45b3a9] = _0x352614; 497 | } 498 | 499 | _0x31b2db = 0; 500 | _0x45b3a9 = 0; 501 | 502 | for (var _0x291eab = 0; _0x573d73["nkWkZ"](_0x291eab, _0x4a32eb["length"]); _0x291eab++) { 503 | _0x31b2db = _0x573d73["vvgvT"](_0x31b2db + 1, 256); 504 | _0x45b3a9 = (_0x45b3a9 + _0x1b616b[_0x31b2db]) % 256; 505 | _0x352614 = _0x1b616b[_0x31b2db]; 506 | _0x1b616b[_0x31b2db] = _0x1b616b[_0x45b3a9]; 507 | _0x1b616b[_0x45b3a9] = _0x352614; 508 | _0x3d83da += String["fromCharCode"](_0x4a32eb["charCodeAt"](_0x291eab) ^ _0x1b616b[_0x573d73["jYzBj"](_0x1b616b[_0x31b2db] + _0x1b616b[_0x45b3a9], 256)]); 509 | } 510 | 511 | return _0x3d83da; 512 | } 513 | 514 | _0x2da775["luAabU"] = _0x4aaade; 515 | _0x2da775["qlVPZg"] = {}; 516 | _0x2da775["bSSGte"] = true; 517 | } 518 | 519 | var _0x22d2f4 = _0x2da775["qlVPZg"][_0x56918b]; 520 | void 0 === _0x22d2f4 ? (void 0 === _0x2da775["TUDBIJ"] && (_0x2da775["TUDBIJ"] = true), _0x160b01 = _0x2da775["luAabU"](_0x160b01, _0x50e295), _0x2da775["qlVPZg"][_0x56918b] = _0x160b01) : _0x160b01 = _0x22d2f4; 521 | return _0x160b01; 522 | } 523 | 524 | eval(_0x5fe0f["decode"](_0x1ff7fa)[_0x2da775("0x0", "]dQW")](_0x2da775("0x1", "GTu!"), "'" + _0x2853cc + "'")); 525 | return ''; 526 | }; 527 | 528 | _0x54521b["md5"] = function md5(md5str) { 529 | var createMD5String = function (string) { 530 | var x = Array(); 531 | var k, 532 | AA, 533 | BB, 534 | CC, 535 | DD, 536 | a, 537 | b, 538 | c, 539 | d; 540 | var S11 = 7, 541 | S12 = 12, 542 | S13 = 17, 543 | S14 = 22; 544 | var S21 = 5, 545 | S22 = 9, 546 | S23 = 14, 547 | S24 = 20; 548 | var S31 = 4, 549 | S32 = 11, 550 | S33 = 16, 551 | S34 = 23; 552 | var S41 = 6, 553 | S42 = 10, 554 | S43 = 15, 555 | S44 = 21; 556 | string = uTF8Encode(string); 557 | x = convertToWordArray(string); 558 | a = 1732584193; 559 | b = 4023233417; 560 | c = 2562383102; 561 | d = 271733878; 562 | for (k = 0; k < x.length; k += 16) { 563 | AA = a; 564 | BB = b; 565 | CC = c; 566 | DD = d; 567 | a = FF(a, b, c, d, x[k + 0], S11, 3614090360); 568 | d = FF(d, a, b, c, x[k + 1], S12, 3905402710); 569 | c = FF(c, d, a, b, x[k + 2], S13, 606105819); 570 | b = FF(b, c, d, a, x[k + 3], S14, 3250441966); 571 | a = FF(a, b, c, d, x[k + 4], S11, 4118548399); 572 | d = FF(d, a, b, c, x[k + 5], S12, 1200080426); 573 | c = FF(c, d, a, b, x[k + 6], S13, 2821735955); 574 | b = FF(b, c, d, a, x[k + 7], S14, 4249261313); 575 | a = FF(a, b, c, d, x[k + 8], S11, 1770035416); 576 | d = FF(d, a, b, c, x[k + 9], S12, 2336552879); 577 | c = FF(c, d, a, b, x[k + 10], S13, 4294925233); 578 | b = FF(b, c, d, a, x[k + 11], S14, 2304563134); 579 | a = FF(a, b, c, d, x[k + 12], S11, 1804603682); 580 | d = FF(d, a, b, c, x[k + 13], S12, 4254626195); 581 | c = FF(c, d, a, b, x[k + 14], S13, 2792965006); 582 | b = FF(b, c, d, a, x[k + 15], S14, 1236535329); 583 | a = GG(a, b, c, d, x[k + 1], S21, 4129170786); 584 | d = GG(d, a, b, c, x[k + 6], S22, 3225465664); 585 | c = GG(c, d, a, b, x[k + 11], S23, 643717713); 586 | b = GG(b, c, d, a, x[k + 0], S24, 3921069994); 587 | a = GG(a, b, c, d, x[k + 5], S21, 3593408605); 588 | d = GG(d, a, b, c, x[k + 10], S22, 38016083); 589 | c = GG(c, d, a, b, x[k + 15], S23, 3634488961); 590 | b = GG(b, c, d, a, x[k + 4], S24, 3889429448); 591 | a = GG(a, b, c, d, x[k + 9], S21, 568446438); 592 | d = GG(d, a, b, c, x[k + 14], S22, 3275163606); 593 | c = GG(c, d, a, b, x[k + 3], S23, 4107603335); 594 | b = GG(b, c, d, a, x[k + 8], S24, 1163531501); 595 | a = GG(a, b, c, d, x[k + 13], S21, 2850285829); 596 | d = GG(d, a, b, c, x[k + 2], S22, 4243563512); 597 | c = GG(c, d, a, b, x[k + 7], S23, 1735328473); 598 | b = GG(b, c, d, a, x[k + 12], S24, 2368359562); 599 | a = HH(a, b, c, d, x[k + 5], S31, 4294588738); 600 | d = HH(d, a, b, c, x[k + 8], S32, 2272392833); 601 | c = HH(c, d, a, b, x[k + 11], S33, 1839030562); 602 | b = HH(b, c, d, a, x[k + 14], S34, 4259657740); 603 | a = HH(a, b, c, d, x[k + 1], S31, 2763975236); 604 | d = HH(d, a, b, c, x[k + 4], S32, 1272893353); 605 | c = HH(c, d, a, b, x[k + 7], S33, 4139469664); 606 | b = HH(b, c, d, a, x[k + 10], S34, 3200236656); 607 | a = HH(a, b, c, d, x[k + 13], S31, 681279174); 608 | d = HH(d, a, b, c, x[k + 0], S32, 3936430074); 609 | c = HH(c, d, a, b, x[k + 3], S33, 3572445317); 610 | b = HH(b, c, d, a, x[k + 6], S34, 76029189); 611 | a = HH(a, b, c, d, x[k + 9], S31, 3654602809); 612 | d = HH(d, a, b, c, x[k + 12], S32, 3873151461); 613 | c = HH(c, d, a, b, x[k + 15], S33, 530742520); 614 | b = HH(b, c, d, a, x[k + 2], S34, 3299628645); 615 | a = II(a, b, c, d, x[k + 0], S41, 4096336452); 616 | d = II(d, a, b, c, x[k + 7], S42, 1126891415); 617 | c = II(c, d, a, b, x[k + 14], S43, 2878612391); 618 | b = II(b, c, d, a, x[k + 5], S44, 4237533241); 619 | a = II(a, b, c, d, x[k + 12], S41, 1700485571); 620 | d = II(d, a, b, c, x[k + 3], S42, 2399980690); 621 | c = II(c, d, a, b, x[k + 10], S43, 4293915773); 622 | b = II(b, c, d, a, x[k + 1], S44, 2240044497); 623 | a = II(a, b, c, d, x[k + 8], S41, 1873313359); 624 | d = II(d, a, b, c, x[k + 15], S42, 4264355552); 625 | c = II(c, d, a, b, x[k + 6], S43, 2734768916); 626 | b = II(b, c, d, a, x[k + 13], S44, 1309151649); 627 | a = II(a, b, c, d, x[k + 4], S41, 4149444226); 628 | d = II(d, a, b, c, x[k + 11], S42, 3174756917); 629 | c = II(c, d, a, b, x[k + 2], S43, 718787259); 630 | b = II(b, c, d, a, x[k + 9], S44, 3951481745); 631 | a = addUnsigned(a, AA); 632 | b = addUnsigned(b, BB); 633 | c = addUnsigned(c, CC); 634 | d = addUnsigned(d, DD); 635 | } 636 | var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); 637 | return tempValue.toLowerCase(); 638 | }; 639 | var rotateLeft = function (lValue, iShiftBits) { 640 | return lValue << iShiftBits | lValue >>> 32 - iShiftBits; 641 | }; 642 | var addUnsigned = function (lX, lY) { 643 | var lX4, 644 | lY4, 645 | lX8, 646 | lY8, 647 | lResult; 648 | lX8 = lX & 2147483648; 649 | lY8 = lY & 2147483648; 650 | lX4 = lX & 1073741824; 651 | lY4 = lY & 1073741824; 652 | lResult = (lX & 1073741823) + (lY & 1073741823); 653 | if (lX4 & lY4) 654 | return lResult ^ 2147483648 ^ lX8 ^ lY8; 655 | if (lX4 | lY4) { 656 | if (lResult & 1073741824) 657 | return lResult ^ 3221225472 ^ lX8 ^ lY8; 658 | else 659 | return lResult ^ 1073741824 ^ lX8 ^ lY8; 660 | } else { 661 | return lResult ^ lX8 ^ lY8; 662 | } 663 | }; 664 | var F = function (x, y, z) { 665 | return x & y | ~x & z; 666 | }; 667 | var G = function (x, y, z) { 668 | return x & z | y & ~z; 669 | }; 670 | var H = function (x, y, z) { 671 | return x ^ y ^ z; 672 | }; 673 | var I = function (x, y, z) { 674 | return y ^ (x | ~z); 675 | }; 676 | var FF = function (a, b, c, d, x, s, ac) { 677 | a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac)); 678 | return addUnsigned(rotateLeft(a, s), b); 679 | }; 680 | var GG = function (a, b, c, d, x, s, ac) { 681 | a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac)); 682 | return addUnsigned(rotateLeft(a, s), b); 683 | }; 684 | var HH = function (a, b, c, d, x, s, ac) { 685 | a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac)); 686 | return addUnsigned(rotateLeft(a, s), b); 687 | }; 688 | var II = function (a, b, c, d, x, s, ac) { 689 | a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac)); 690 | return addUnsigned(rotateLeft(a, s), b); 691 | }; 692 | var convertToWordArray = function (string) { 693 | var lWordCount; 694 | var lMessageLength = string.length; 695 | var lNumberOfWordsTempOne = lMessageLength + 8; 696 | var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - lNumberOfWordsTempOne % 64) / 64; 697 | var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16; 698 | var lWordArray = Array(lNumberOfWords - 1); 699 | var lBytePosition = 0; 700 | var lByteCount = 0; 701 | while (lByteCount < lMessageLength) { 702 | lWordCount = (lByteCount - lByteCount % 4) / 4; 703 | lBytePosition = lByteCount % 4 * 8; 704 | lWordArray[lWordCount] = lWordArray[lWordCount] | string.charCodeAt(lByteCount) << lBytePosition; 705 | lByteCount++; 706 | } 707 | lWordCount = (lByteCount - lByteCount % 4) / 4; 708 | lBytePosition = lByteCount % 4 * 8; 709 | lWordArray[lWordCount] = lWordArray[lWordCount] | 128 << lBytePosition; 710 | lWordArray[lNumberOfWords - 2] = lMessageLength << 3; 711 | lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; 712 | return lWordArray; 713 | }; 714 | var wordToHex = function (lValue) { 715 | var WordToHexValue = "", 716 | WordToHexValueTemp = "", 717 | lByte, 718 | lCount; 719 | for (lCount = 0; lCount <= 3; lCount++) { 720 | lByte = lValue >>> lCount * 8 & 255; 721 | WordToHexValueTemp = "0" + lByte.toString(16); 722 | WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); 723 | } 724 | return WordToHexValue; 725 | }; 726 | var uTF8Encode = function (string) { 727 | string = string.toString().replace(/\x0d\x0a/g, "\n"); 728 | var output = ""; 729 | for (var n = 0; n < string.length; n++) { 730 | var c = string.charCodeAt(n); 731 | if (c < 128) { 732 | output += String.fromCharCode(c); 733 | } else if (c > 127 && c < 2048) { 734 | output += String.fromCharCode(c >> 6 | 192); 735 | output += String.fromCharCode(c & 63 | 128); 736 | } else { 737 | output += String.fromCharCode(c >> 12 | 224); 738 | output += String.fromCharCode(c >> 6 & 63 | 128); 739 | output += String.fromCharCode(c & 63 | 128); 740 | } 741 | } 742 | return output; 743 | }; 744 | return createMD5String(md5str); 745 | } 746 | var m ={ 747 | "keyword": "LTST-C191KRKT", 748 | "t_sys_cat_ids": "", 749 | "std_maf_ids": "", 750 | "font_ident": "f38f71d5d4e4cd01", 751 | "sort": 0, 752 | "lead_time_min": 0, 753 | "lead_time_max": 0, 754 | "v": "1655798042158" 755 | } 756 | 757 | console.log(_0x54521b.getSpecialKey(m)); -------------------------------------------------------------------------------- /拼刀刀-店铺后台数据采集/README.md: -------------------------------------------------------------------------------- 1 | 说明:本项目是获取店铺后台的,并非前台用户的商品信息 2 | 完成时间 2022/2/9 3 | 4 | ## 演示地址: http://z.hl98.cn/index.php?share/file&user=102&sid=CiAXx7ry 5 | 6 | 后台只有一个加密参数 anti-content,所以只要扣下对应的js代码 生成成功的参数就行 (js逆向难度 异步+webpack模块里面的webpack,环境检测,补环境) 7 | 8 | 目录说明: 9 | 10 | --express_api.js node.js搭建一个api接口,访问接口 :18080/anti-content就能直接获取anti-content的结果了 11 | --main.exe 可视化的工具 12 | --pdd-易语言源码.e exe的源码 易语言版的(搭配anti的接口使用) 在常量表里设置自己的接口地址 13 | --pdd_anti-content.js 扣下来的js代码 直接调用里面的函数就可以获得anti-content结果 14 | --python-demo.py python获取商品列表的demo 15 | 16 | 17 | 18 | * exe的需要设置自己的anti-content接口地址 19 | ![image](https://user-images.githubusercontent.com/41224971/153142992-d7e0b318-8a3c-493e-b740-764c7435dc10.png) 20 | -------------------------------------------------------------------------------- /拼刀刀-店铺后台数据采集/main.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jxhczhl/spider/4d874822d79d0947786248d8d4111b9193202a30/拼刀刀-店铺后台数据采集/main.exe -------------------------------------------------------------------------------- /拼刀刀-店铺后台数据采集/pdd-易语言源码.e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jxhczhl/spider/4d874822d79d0947786248d8d4111b9193202a30/拼刀刀-店铺后台数据采集/pdd-易语言源码.e -------------------------------------------------------------------------------- /拼刀刀-店铺后台数据采集/python-demo.py: -------------------------------------------------------------------------------- 1 | import requests,execjs 2 | 3 | header_cookie='' #这里传入自己店铺的cookie 4 | headers = { 5 | 'authority': 'mms.pinduoduo.com', 6 | 'pragma': 'no-cache', 7 | 'cache-control': 'no-cache', 8 | 'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"', 9 | 'anti-content': '', 10 | 'content-type': 'application/json', 11 | 'sec-ch-ua-mobile': '?0', 12 | 'etag': 'J0kGf2HFGJivq3jp0kBK0uXS74mry91A', 13 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 14 | 'sec-ch-ua-platform': '"Windows"', 15 | 'accept': '*/*', 16 | 'origin': 'https://mms.pinduoduo.com', 17 | 'sec-fetch-site': 'same-origin', 18 | 'sec-fetch-mode': 'cors', 19 | 'sec-fetch-dest': 'empty', 20 | 'referer': 'https://mms.pinduoduo.com/goods/goods_list', 21 | 'accept-language': 'zh-CN,zh;q=0.9', 22 | 'cookie': header_cookie, 23 | } 24 | data = '{"page":1,"is_onsale":0,"size":10}' 25 | 26 | with open("./pdd_anti-content.js",encoding="utf-8")as f: 27 | js_code =f.read() 28 | js=execjs.compile(js_code) 29 | 30 | 31 | for a in range(1): 32 | anti_content = js.call("hliang") 33 | # print(anti_content) 34 | headers["anti-content"] = anti_content 35 | r = requests.session() 36 | response = r.post('https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList', headers=headers, data=data) 37 | print(response.text) 38 | -------------------------------------------------------------------------------- /数美ast.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs");//文件读写 2 | const parse = require("@babel/parser"); //解析为ast 3 | const traverse = require('@babel/traverse').default;//遍历节点 4 | const types = require('@babel/types'); 5 | const parser = require("@babel/parser"); 6 | //类型 7 | const generator = require('@babel/generator').default;//ast解析为代码 8 | 9 | console.time("耗时:") 10 | // 读取js文件 11 | let jscode = fs.readFileSync( 12 | './demo.js', { 13 | encoding: 'utf-8' 14 | } 15 | ); 16 | // let jscode = ` 17 | 18 | // ` 19 | let ast = parse.parse(jscode);//js转ast 20 | 21 | //获取自执行函数 22 | let visitor1 = { 23 | "NumericLiteral|StringLiteral"(path) { 24 | delete path.node.extra; 25 | }, 26 | // 获取自执行函数,第一个自执行会改变大数组的顺序,所以这里遍历一下把自执行函数的代码保存给全局 后面运行 27 | "CallExpression"(path) { 28 | let {node} = path; 29 | if (!node.callee || node.callee.type !== "FunctionExpression") return; 30 | if (!node.arguments || node.arguments.length !== 2) return; 31 | if (node.arguments[0].type !== "Identifier") return; 32 | //修改大数组的是一个匿名函数,这里加个感叹号让他语法没问题 33 | let changeAst = parser.parse("!" + path.toString()); 34 | let ChangeArrayOrder = generator(changeAst, opts = {"compact": true}).code; 35 | console.log("改变数组顺序的自执行代码:", ChangeArrayOrder) 36 | global["ChangeArrayOrder"] = ChangeArrayOrder; 37 | path.remove(); 38 | } 39 | } 40 | //解决大数组 41 | let visitorArray = { 42 | "VariableDeclarator"(path) { 43 | let {id, init} = path.node; 44 | if (!init || init.type !== "ArrayExpression" || init.elements.length < 1) return; 45 | let binding = path.scope.getBinding(id.name); 46 | if (binding.references === 0) { 47 | path.remove; 48 | return 49 | } 50 | if (init.elements.every(element => element.type === "StringLiteral")) { 51 | //获取父级函数,如果没有就说明是最外层定义的数组 52 | let funcName = path.getFunctionParent(); 53 | if (funcName === null) { 54 | console.log("大数组名字应该是:", id.name) 55 | global["largeArray"] = path.toString(); 56 | path.remove; 57 | // 父级作用域传给另外一个函数操作 58 | getDecName(path.parentPath) 59 | 60 | } else { 61 | // 获取最后一个返回的函数名 和父级函数名对比,如果一样 就eval 62 | let lastElement = funcName.node.body.body.at(-1) 63 | if (!lastElement.argument || !lastElement.argument.callee) return; 64 | if (lastElement.type !== "ReturnStatement" && lastElement.argument.callee.name !== funcName.node.id.name) return; 65 | console.log("大数组名字应该是函数名:", funcName.node.id.name) 66 | let largeArrayAst = parser.parse(funcName.toString()); 67 | global["largeArray"] = generator(largeArrayAst, opts = {"compact": true}).code; 68 | // 父级作用域传给另外一个函数操作 获取解字符串函数 69 | getDecName(funcName.parentPath) 70 | // 移除掉大数组 71 | funcName.remove() 72 | } 73 | 74 | } 75 | 76 | }, 77 | } 78 | 79 | function RecursiveAssignment(path, pPathString) { 80 | eval(global["largeArray"]); //加载大数组 81 | eval(pPathString); //加载解密函数 82 | eval(global["ChangeArrayOrder"]) 83 | 84 | 85 | if (!pPathString || !global["largeArray"] || !global["ChangeArrayOrder"]) { 86 | throw "有些没解析全,退出" 87 | } 88 | // 递归函数,因为他的引用又是一个赋值新变量操作 89 | //代码长这样子的: var _0x1e4a2f = _0x4a9d; console.log(_0x4a9d(100)); 90 | let {name} = path.node.id; 91 | let binding = path.scope.getBinding(name); 92 | for (p of binding.referencePaths) { 93 | let pPath = p.parentPath; 94 | let {node} = pPath; 95 | if (node.type === "VariableDeclarator") { 96 | let leftName = node.id.name; 97 | let rightName = node.init.name; 98 | // console.log("似乎要把解密函数"+rightName+"赋值给", leftName); 99 | // // 先改成解密函数的名字, 100 | pPath.scope.rename(leftName, rightName); 101 | RecursiveAssignment(pPath, pPathString); 102 | // // 移除掉赋值新变量名 103 | pPath.remove(); 104 | 105 | } 106 | //console.log(pPath.toString()); 107 | if (node.type === "CallExpression" && node.arguments.length === 1 && node.arguments.every(element => element.type === "NumericLiteral")) { 108 | let pPathCode = pPath.toString(); 109 | 110 | let result = eval(pPathCode) 111 | // console.log(pPathCode, ":", result); 112 | pPath.replaceWith(types.valueToNode(result)) 113 | } 114 | } 115 | 116 | 117 | } 118 | 119 | // 获取解密函数代码 120 | let getDecryption = { 121 | "FunctionDeclaration"(path) { 122 | // 判断函数是不是需要传两个参数 123 | let {node} = path; 124 | let {body} = node; 125 | if (!node.params || node.params.length !== 2) return; 126 | if (!body || !body.body) return; 127 | let lastReturn = body.body.at(-1) 128 | if (lastReturn.type !== "ReturnStatement" || !lastReturn.argument || !lastReturn.argument.expressions) return; 129 | let lastCall = lastReturn.argument.expressions.at(-1) 130 | if (lastCall.type !== "CallExpression" || lastCall.arguments.length !== 2) return; 131 | let name = node.id.name; 132 | console.log("解密函数的名字是:", name); 133 | let decryAst = parser.parse(path.toString()); 134 | let decryCode = generator(decryAst, opts = {"compact": true}).code; 135 | RecursiveAssignment(path, decryCode); 136 | // 移除解字符串函数 137 | path.remove(); 138 | } 139 | 140 | } 141 | var getDecName = (path) => { 142 | // 这个函数 通过大数组的作用域传入同级作用域 来获得解密函数 143 | let {scope} = path; 144 | scope.traverse(scope.block, getDecryption); 145 | 146 | } 147 | 148 | // 优化加减乘除操作和解对象 149 | let visitor2 = { 150 | // 优化加减乘除操作 151 | "BinaryExpression": { 152 | exit(path) { 153 | let {node} = path; 154 | let {left} = node; 155 | let {right} = node; 156 | if ((left.type === "UnaryExpression" || left.type === "NumericLiteral") && (right.type === "UnaryExpression" || right.type === "NumericLiteral")) { 157 | let leftValue; 158 | let rightValue; 159 | if (left.type === "NumericLiteral") { 160 | leftValue = left.value 161 | } else { 162 | if (!left.argument.value) return; 163 | if (left.operator === "-") { 164 | leftValue = -left.argument.value 165 | } 166 | } 167 | 168 | if (right.type === "NumericLiteral") { 169 | rightValue = right.value 170 | } else { 171 | if (!right.argument.value) return; 172 | if (left.operator === "-") { 173 | rightValue = -right.argument.value 174 | } 175 | } 176 | if (!leftValue) return; 177 | 178 | //console.log(leftValue, node.operator, rightValue); 179 | 180 | path.replaceWith(types.valueToNode(path.evaluate(leftValue + node.operator + rightValue).value)); 181 | } 182 | } 183 | }, 184 | //解对象 185 | "VariableDeclarator"(path) { 186 | // 其他的话对局部数组做的,比如代码: 187 | // var _0x4b4e24 = { 188 | // "Xpwku": "
= 6) return; 215 | //console.log("旧代码111", pPath.toString()); 216 | pPath.replaceWith(types.valueToNode(rightNode.value)); 217 | modificationNum += 1 218 | //console.log("新代码111", pPath.toString()) 219 | //console.log("-------------------") 220 | } else if (rightNode.type === "FunctionExpression") { 221 | // 此时这里的pPath.node为_0xa7a3b2["JHTcH"] 还要上一级才会有arguments的东西 222 | node = pPath.parentPath.node; 223 | let {parentPath} = pPath 224 | if (node.type !== "CallExpression") return; 225 | if (!rightNode.body || !rightNode.body.body) return; 226 | let bodyResult = rightNode.body.body[0]; 227 | if (bodyResult.type !== "ReturnStatement") return; 228 | let {arguments} = node; 229 | //BinaryExpression 就是长这样的代码 return _0x398914 == _0x5433f6; 230 | if (bodyResult.argument.type === "BinaryExpression") { 231 | let {operator} = bodyResult.argument 232 | // 只有一个参数,说明是判断类型的,右边固定 233 | if (arguments.length === 1) { 234 | parentPath.replaceWith(types.binaryExpression(operator, node.arguments[0], bodyResult.argument.right)) 235 | modificationNum += 1 236 | } else if (arguments.length === 2) { 237 | // console.log("旧代码222", pPath.toString()) 238 | parentPath.replaceWith(types.binaryExpression(operator, node.arguments[0], node.arguments[1])) 239 | modificationNum += 1 240 | // console.log("新代码222", parentPath.toString()) 241 | // console.log("-------------------") 242 | 243 | } 244 | } else if (bodyResult.argument.type === "CallExpression") { 245 | if (node.arguments.length >= 1) { 246 | // console.log("旧代码", pPath.parentPath.toString()) 247 | pPath.parentPath.replaceWith(types.callExpression(node.arguments[0], node.arguments.slice(1))); 248 | modificationNum += 1 249 | // console.log("新代码", pPath.parentPath.toString()) 250 | // console.log("-------------------") 251 | } 252 | } else if (bodyResult.argument.type === "LogicalExpression") { 253 | parentPath.replaceWith(types.logicalExpression("||", node.arguments[0], node.arguments[1])) 254 | modificationNum += 1 255 | } 256 | } 257 | 258 | } 259 | if (modificationNum === binding.referencePaths.length) { 260 | // console.log("删除了一个小数组。") 261 | path.remove() 262 | } 263 | } 264 | } 265 | 266 | // 获取动态post参数和加密的key 267 | let key_dict = []; 268 | let visitor3 = { 269 | "AssignmentExpression"(path) { 270 | let {node} = path; 271 | let {left, right} = node; 272 | if (!left.property || left.property.type !== "StringLiteral") return 273 | if (!right || !right.arguments || right.arguments.length !== 2) return; 274 | if (right.arguments[1].type !== "StringLiteral" || right.arguments[1].value.length !== 8) return; 275 | // console.log(left.property.value,right.arguments[1].value) 276 | key_dict.push([left.property.value, right.arguments[1].value]) 277 | }, 278 | // 获取最后三个参数及key 279 | "CallExpression"(path) { 280 | let {node} = path; 281 | if (!node.arguments || node.arguments.length !== 3) return; // 必须是三个参数 对象,参数名(2长度),加密的值 282 | if (node.arguments[1].type !== "StringLiteral" || node.arguments[1].value.length !== 2) return; 283 | let key = node.arguments[1].value; 284 | let right_node = node.arguments[2]; 285 | if (right_node.type != "CallExpression") return; 286 | if (right_node.arguments.length !== 2) return; 287 | if (right_node.arguments[1].value.length == 8) { 288 | let value = right_node.arguments[1].value; 289 | key_dict.push([key, value]); 290 | } 291 | } 292 | 293 | } 294 | traverse(ast, visitor1); 295 | traverse(ast, visitorArray); 296 | traverse(ast, visitor2); 297 | traverse(ast, visitor3); 298 | console.log(key_dict.length); 299 | console.log(key_dict); 300 | 301 | // let {code} = generator(ast, opts = { 302 | // compact: true, 303 | // jsescOption: {minified: true, retainFunctionParens: true, retainLines: true} 304 | // }) 305 | // fs.writeFile('./demoNew.js', code, (err) => { 306 | // }); 307 | 308 | console.timeEnd("耗时:") 309 | -------------------------------------------------------------------------------- /数美滑块.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @Time : 2022/3/7 18:00 4 | @Auth : 黑脸怪 5 | @File :index.py.py 6 | 7 | """ 8 | import base64 9 | import json 10 | import random 11 | import time 12 | import urllib.parse 13 | import cv2 14 | 15 | from pyDes import des, ECB 16 | import numpy as np 17 | import requests 18 | 19 | 20 | class shumei: 21 | domain_url="https://castatic.fengkongcloud.cn/" 22 | bg_url="" 23 | fg_url="" 24 | rid="" 25 | bg=None 26 | fg=None 27 | def __init__(self): 28 | self.r=requests.session() 29 | 30 | def get_captcha(self,organization): 31 | url="https://captcha.fengkongcloud.cn/ca/v1/register" 32 | param={ 33 | "rversion": "1.0.3", 34 | "sdkver": "1.1.3", 35 | "data": "{}", 36 | "callback": "sm_"+str(int(time.time()*1000)), 37 | "organization": organization, 38 | "model": "slide", 39 | "lang":"zh-cn", 40 | "appId": "default", 41 | "channel": "DEFAULT" 42 | } 43 | response=self.r.get(url,params=param) 44 | try: 45 | if response.status_code==200: 46 | sm_json=json.loads(response.text[17:-1]) 47 | bg=sm_json["detail"]["bg"] 48 | fg=sm_json["detail"]["fg"] 49 | self.bg_url=urllib.parse.urljoin(self.domain_url,bg) 50 | self.fg_url=urllib.parse.urljoin(self.domain_url,fg) 51 | self.rid=sm_json["detail"]["rid"] 52 | # print(param,"params") 53 | # print(response.text,"请求") 54 | 55 | except: 56 | print(response.text) 57 | print("未知失败,自己验证") 58 | 59 | #访问背景前景页面 60 | def _visit_bg_fg(self): 61 | try: 62 | self.bg=self.r.get(self.bg_url).content 63 | self.fg=self.r.get(self.fg_url).content 64 | with open("a.png","wb") as f: 65 | f.write(self.r.get(self.bg_url).content) 66 | with open("b.png","wb") as f: 67 | f.write(self.r.get(self.fg_url).content) 68 | 69 | return True 70 | except: 71 | print("获取前景背景图片失败") 72 | return None 73 | def get_distance(self): 74 | if self._visit_bg_fg() is None: 75 | return 76 | # with open('a.png', 'rb') as f: 77 | # background_bytes = f.read() 78 | # 79 | # with open('b.png', 'rb') as f: 80 | # target_bytes = f.read() 81 | # res = det.slide_match(self.fg, self.bg) 82 | # # 获取的图片是600像素 但验证是300 所以除以二 83 | # print(res) 84 | # return int(res["target"][0]) 85 | 86 | target = cv2.imdecode(np.asarray(bytearray(self.fg), dtype=np.uint8), 0) 87 | template = cv2.imdecode(np.asarray(bytearray(self.bg), dtype=np.uint8), 0) 88 | result = cv2.matchTemplate(target, template, cv2.TM_CCORR_NORMED) 89 | _, distance = np.unravel_index(result.argmax(), result.shape) 90 | return distance 91 | 92 | def pad(self,b): 93 | """ 94 | 块填充 95 | """ 96 | block_size = 8 97 | while len(b) % block_size: 98 | b += b'\0' 99 | return b 100 | def getEncryptContent(self,a, b): 101 | # js = execjs.compile(self.js_code) 102 | # 103 | # print(a,b,js.call("getEncryptContent", a, b)) 104 | # return js.call("getEncryptContent", a, b) 105 | des_obj = des(b.encode(), mode=ECB) 106 | content = self.pad(str(a).replace(' ', '').encode()) 107 | return base64.b64encode(des_obj.encrypt(content)).decode('utf-8') 108 | 109 | def get_trajectory(self,distance): 110 | ge = [] 111 | y = 0 112 | v = 0 113 | t = 1 114 | current = 0 115 | mid = distance * 3 / 4 116 | exceed = 20 117 | z = t 118 | 119 | ge.append([0, 0, 1]) 120 | 121 | while current < (distance + exceed): 122 | if current < mid / 2: 123 | a = 15 124 | elif current < mid: 125 | a = 20 126 | else: 127 | a = -30 128 | a /= 2 129 | v0 = v 130 | s = v0 * t + 0.5 * a * (t * t) 131 | current += int(s) 132 | v = v0 + a * t 133 | 134 | y += random.randint(-5, 5) 135 | z += 100 + random.randint(0, 10) 136 | 137 | ge.append([min(current, (distance + exceed)), y, z]) 138 | 139 | while exceed > 0: 140 | exceed -= random.randint(0, 5) 141 | y += random.randint(-5, 5) 142 | z += 100 + random.randint(0, 10) 143 | ge.append([min(current, (distance + exceed)), y, z]) 144 | # print(ge) 145 | return ge 146 | 147 | # return "{}".format(ge).replace(" ", ""), ge[-1][2] 148 | # return "{}".format(ge).replace(" ", "") 149 | 150 | def ok(self,tq,ub,zs,organization): 151 | url="https://captcha.fengkongcloud.cn/ca/v2/fverify" 152 | params={ 153 | "sdkver": "1.1.3", 154 | "cn": "4gX7HfzFoIE=", 155 | "je": "J95iyFR+B34=", 156 | "rid": self.rid, 157 | "vm": "kRSb3H6Sr+M=", 158 | "zj": "YXtzSGH4Kx4=", 159 | "protocol": "148", 160 | "act.os": "web_pc", 161 | "tq": tq, 162 | "ox": "ixh0fmsqQqE=", 163 | "tb": "jbIXAuW9ClU=", 164 | "organization": organization, 165 | "fp": "ePjf+CsNviw=", 166 | "ub": ub, 167 | "rr": "yYCBEY0C7PQ=", 168 | "ostype": "web", 169 | "rversion": "1.0.3", 170 | "zs":zs, 171 | "callback": "sm_1646734280304" 172 | } 173 | res=self.r.get(url,params=params) 174 | print(res.text) 175 | if json.loads(res.text[17:-1])["riskLevel"]=="PASS": 176 | return True 177 | 178 | def main(self,organization="RlokQwRlVjUrTUlkIqOg"): 179 | self.get_captcha(organization) 180 | #distance距离 181 | distance = self.get_distance() 182 | print(distance,"距离") 183 | # tq加密的滑动距离 184 | tq=self.getEncryptContent(distance/600,"c78a7666") 185 | #ub滑动时间 186 | ub=self.getEncryptContent(random.randint(2001,4999),"eb994a6b") 187 | #zs滑动轨迹 188 | trajectory=self.get_trajectory(distance/2) 189 | # print(trajectory) 190 | zs=self.getEncryptContent(trajectory,"201cab4a") 191 | if self.ok(tq,ub,zs,organization): 192 | return self.rid 193 | 194 | 195 | 196 | sm=shumei() 197 | requestId=sm.main(organization="xQsKB7v2qSFLFxnvmjdO") 198 | if requestId is not None: 199 | print("滑块成功") 200 | # url="http://jpebook.ly.com/suppliersharing/Account/Login" 201 | # headers={ 202 | # "Host": "jpebook.ly.com", 203 | # "Connection": "keep-alive", 204 | # "Accept": "application/json, text/plain, */*", 205 | # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", 206 | # "Content-Type": "application/json;charset=UTF-8", 207 | # "Origin": "http://jpebook.ly.com", 208 | # "Referer": "http://jpebook.ly.com/suppliersharing/Account/Login?ReturnUrl=%2Fsuppliersharing", 209 | # "Accept-Language": "zh-CN,zh;q=0.9" 210 | # } 211 | # data={"type":0,"loginName":"你是黑脸怪","password":"8ae252facf16cf0b0d8677bb3f889d33","checkPassword":"","validCode":"","codeResponse":requestId,"codeType":"sm"} 212 | # res=requests.post(url=url,json=data,headers=headers) 213 | # print(res.text) 214 | else: 215 | print("滑块失败,重来一次吧") 216 | 217 | # print(distance,get_random(distance)) 218 | 219 | -------------------------------------------------------------------------------- /豆瓣.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import re 4 | import time 5 | import pandas as pd 6 | import requests 7 | import logging 8 | import urllib.parse 9 | from lxml import etree 10 | 11 | """ 12 | @Time : 2022/2/23 13:48 13 | @Auth : 黑脸怪 14 | @File :pd.py 15 | 16 | """ 17 | 18 | logging.basicConfig( 19 | level=logging.INFO, 20 | format='%(lineno)s行 时间:%(asctime)s 文件名:%(filename)s %(levelname)s: %(message)s', 21 | datefmt='%H:%M:%S', 22 | filename="./mylog.txt" 23 | ) 24 | 25 | class douban(): 26 | def __init__(self): 27 | self.num=0 #序号 28 | self.start_url="" 29 | self.old_url=[] #访问过的放这里 判断存在就不继续往下放了 30 | self.list_page=[] #所有详情页放这里 31 | self.next_page=[] #访问列表也后 把下一页存在这里 32 | self.err_page=[] #暂时失败的url存放在这 到时候重试 33 | self.result_list = [] 34 | self.headers = { 35 | 'Connection': 'keep-alive', 36 | 'Cache-Control': 'max-age=0', 37 | 'Upgrade-Insecure-Requests': '1', 38 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 39 | 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 40 | 'Sec-Fetch-User': '?1', 41 | 'Sec-Fetch-Dest': 'document', 42 | 'Accept-Language': 'zh-CN,zh;q=0.9' 43 | } 44 | 45 | def main(self,url): 46 | #这里赋值是为了之后urljoin用 47 | self.start_url=url 48 | self.next_page.append(url) 49 | while len(self.next_page)>0: 50 | self.list_and_next() 51 | # print("list_page->>>>>>>",self.list_page) 52 | print("next_page->>>>>>>",self.next_page) 53 | time.sleep(2) 54 | while len(self.list_page)>0: 55 | url=self.list_page.pop() 56 | html=self.data_get(url) 57 | if html is not None: 58 | self.data_parse(html,url) 59 | time.sleep(2) 60 | if len(self.result_list)>0: 61 | self.save_to_xlsx("./豆瓣影评-{}.xlsx".format(str(int(time.time())))) 62 | 63 | #输入列表的网址 获取列表url和下一页url保存到self变量中 64 | 65 | def list_and_next(self): 66 | url=self.next_page.pop() 67 | try: 68 | response=requests.get(url,headers=self.headers,timeout=20) 69 | except Exception as e: 70 | logging.info("访问出错") 71 | print(e) 72 | return None 73 | 74 | if "评论" in response.text: 75 | html=etree.HTML(response.text) 76 | div_list=html.xpath('//*[@id="content"]/div/div[1]/div[1]/div//div/div/div[3]/a[3]/@href') 77 | if len(div_list) ==0: 78 | div_list=html.xpath('//*[@id="content"]/div/div[1]/div[1]/div[2]/div//div/div/div[3]/a[3]/@href') 79 | 80 | n_p = html.xpath('//*[@id="content"]/div/div[1]/div[2]/span[4]/a/@href') 81 | if len(n_p)==0: 82 | n_p=html.xpath('//*[@id="content"]/div/div[1]/div[2]/span[5]/a/@href') 83 | 84 | for l in div_list: 85 | if l not in self.old_url: 86 | self.list_page.insert(0,l) 87 | 88 | if len(n_p)>0: 89 | next_page=n_p[0] 90 | if next_page not in self.old_url: 91 | self.next_page.append(urllib.parse.urljoin(self.start_url,next_page)) 92 | else: 93 | print("没有下一页了。") 94 | 95 | else: 96 | logging.info("其他错误,暂时没做解析,状态码:"+str(response.status_code)+str(response.text)) 97 | 98 | def data_get(self,url): 99 | res=requests.get(url,headers=self.headers,timeout=20) 100 | # logging.debug(url+"状态码:"+str(res.status_code)) 101 | try: 102 | if res.status_code==200: 103 | return res.text 104 | elif res.status_code==404: 105 | return None 106 | elif res.status_code==403: 107 | logging.info(url+"状态码:"+str(res.status_code)+"可能没权限访问") 108 | logging.info(res.text) 109 | else: 110 | logging.info("失败,状态码:"+str(res.status_code)) 111 | self.err_page.append(url) 112 | return None 113 | except: 114 | self.err_page.append(url) 115 | def data_parse(self,html,url): 116 | html2 = etree.HTML(html) 117 | author = html2.xpath('//*[@class="main-hd"]/a/span/text()') 118 | star = html2.xpath('//*[@id="content"]/div/div[1]/div[1]/div/header/span[1]/@title') 119 | R_time = html2.xpath('//*[@id="content"]/div/div[1]/div[1]/div/header/span[3]/text()') 120 | Title = html2.xpath('//*[@id="content"]/div/div[1]/h1/span/text()') 121 | Topics = html2.xpath('//*[@id="content"]/div/div[1]/a/h2/text()') 122 | Spoiler = html2.xpath('//*[@class="main-bd"]/p[1]/text()') 123 | try: 124 | content = re.search('

(.+)

', html).group(0) 125 | content = content.replace('
', 126 | "").replace("
", "") 127 | except: 128 | logging.debug("获取title失败") 129 | content="获取title失败" 130 | zan = html2.xpath('//*[@class="main-panel-useful"]/button[1]/text()') 131 | cai = html2.xpath('//*[@class="main-panel-useful"]/button[2]/text()') 132 | Resp = re.findall('\[\{\".+\"\}\]', html) 133 | 134 | result = [] 135 | self.num+=1 136 | result.append(self.num) 137 | result.append(url) 138 | result.append(author[0]) if len(author) > 0 else result.append("") 139 | result.append(star[0]) if len(star) > 0 else result.append("") 140 | result.append(R_time[0]) if len(R_time) > 0 else result.append("") 141 | result.append(Title[0]) if len(Title) > 0 else result.append("") 142 | result.append(Topics[0]) if len(Topics) > 0 else result.append("") 143 | result.append(str(Spoiler[0]).strip()) if len(Spoiler) > 0 else result.append("") 144 | result.append(content) 145 | result.append(str(zan[0]).strip()) if len(zan) > 0 else result.append("") 146 | result.append(str(cai[0]).strip()) if len(cai) > 0 else result.append("") 147 | result.append(Resp[0]) if len(Resp) > 0 else result.append("") 148 | # print(result) 149 | logging.info(Title) 150 | self.result_list.append(result) 151 | def save_to_xlsx(self,filename): 152 | columns = ["序号","评论链接","发布者", "评分星级", "评论时间","标题","话题","是否可能有剧透","影评内容","有用数","没用数","回应"] 153 | dt = pd.DataFrame(self.result_list, columns=columns) 154 | dt.to_excel(filename,index=0) 155 | logging.info("完成~~~~") 156 | 157 | 158 | d=douban() 159 | d.main("https://movie.douban.com/subject/26752088/reviews?start=0") 160 | --------------------------------------------------------------------------------