@ikenxuan/amagi 1.5.4 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,283 +1,463 @@
1
- import { parse, URLSearchParams } from 'url';
2
- import { sm3 } from 'sm-crypto-v2';
3
- export class ABogus {
4
- filter = /%([0-9A-F]{2})/g;
5
- arguments = [0, 1, 14];
6
- ua_key = "\u0000\u0001\u000e";
7
- end_string = "cus";
8
- version = [1, 0, 1, 5];
9
- browser = "1536|742|1536|864|0|0|0|0|1536|864|1536|864|1536|742|24|24|MacIntel";
10
- reg = [
11
- 1937774191,
12
- 1226093241,
13
- 388252375,
14
- 3666478592,
15
- 2842636476,
16
- 372324522,
17
- 3817729613,
18
- 2969243214,
19
- ];
20
- str = {
21
- "s0": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
22
- "s1": "Dkdpgh4ZKsQB80/Mfvw36XI1R25+WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=",
23
- "s2": "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=",
24
- "s3": "ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe",
25
- "s4": "Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe",
26
- };
27
- chunk = [];
28
- size = 0;
29
- ua_code = [
30
- 76, 98, 15, 131, 97, 245, 224, 133, 122, 199, 241, 166, 79, 34, 90, 191,
31
- 128, 126, 122, 98, 66, 11, 14, 40, 49, 110, 110, 173, 67, 96, 138, 252
32
- ];
33
- browser_len;
34
- browser_code;
35
- constructor(platform = null) {
36
- this.browser = platform ? this.generate_browser_info(platform) : this.browser;
37
- this.browser_len = this.browser.length;
38
- this.browser_code = this.char_code_at(this.browser);
39
- }
40
- list_1(random_num = null, a = 170, b = 85, c = 45) {
41
- return this.random_list(random_num, a, b, 1, 2, 5, c & a);
42
- }
43
- list_2(random_num = null, a = 170, b = 85) {
44
- return this.random_list(random_num, a, b, 1, 0, 0, 0);
45
- }
46
- list_3(random_num = null, a = 170, b = 85) {
47
- return this.random_list(random_num, a, b, 1, 0, 5, 0);
48
- }
49
- random_list(a = null, b = 170, c = 85, d = 0, e = 0, f = 0, g = 0) {
50
- const r = a || (Math.random() * 10000);
51
- const v = [
52
- r,
53
- r & 255,
54
- r >> 8
55
- ];
56
- let s = v[1] & b | d;
57
- v.push(s);
58
- s = v[1] & c | e;
59
- v.push(s);
60
- s = v[2] & b | f;
61
- v.push(s);
62
- s = v[2] & c | g;
63
- v.push(s);
64
- return v.slice(-4);
65
- }
66
- from_char_code(...args) {
67
- return String.fromCharCode(...args);
68
- }
69
- generate_string_1(random_num_1 = null, random_num_2 = null, random_num_3 = null) {
70
- return this.from_char_code(...this.list_1(random_num_1)) +
71
- this.from_char_code(...this.list_2(random_num_2)) +
72
- this.from_char_code(...this.list_3(random_num_3));
73
- }
74
- generate_string_2(url_params, method = "GET", start_time = 0, end_time = 0) {
75
- const a = this.generate_string_2_list(url_params, method, start_time, end_time);
76
- const e = this.end_check_num(a);
77
- a.push(...this.browser_code, e);
78
- return this.rc4_encrypt(this.from_char_code(...a), "y");
79
- }
80
- generate_string_2_list(url_params, method = "GET", start_time = 0, end_time = 0) {
81
- start_time = start_time || Math.floor(Date.now());
82
- end_time = end_time || (start_time + Math.floor(Math.random() * (8 - 4 + 1)) + 4);
83
- const params_array = this.generate_params_code(url_params);
84
- const method_array = this.generate_method_code(method);
85
- return this.list_4((end_time >> 24) & 255, params_array[21], this.ua_code[23], (end_time >> 16) & 255, params_array[22], this.ua_code[24], (end_time >> 8) & 255, (end_time >> 0) & 255, (start_time >> 24) & 255, (start_time >> 16) & 255, (start_time >> 8) & 255, (start_time >> 0) & 255, method_array[21], method_array[22], Math.floor(end_time / 256 / 256 / 256 / 256) >> 0, Math.floor(start_time / 256 / 256 / 256 / 256) >> 0, this.browser_len);
86
- }
87
- reg_to_array(a) {
88
- const o = new Array(32).fill(0);
89
- for (let i = 0; i < 8; i++) {
90
- let c = a[i];
91
- o[4 * i + 3] = (255 & c);
92
- c >>= 8;
93
- o[4 * i + 2] = (255 & c);
94
- c >>= 8;
95
- o[4 * i + 1] = (255 & c);
96
- c >>= 8;
97
- o[4 * i] = (255 & c);
1
+ // All the content in this article is only for learning and communication use, not for any other purpose, strictly prohibited for commercial use and illegal use, otherwise all the consequences are irrelevant to the author!
2
+ class SM3 {
3
+ reg;
4
+ chunk;
5
+ size;
6
+ constructor() {
7
+ this.reg = [];
8
+ this.chunk = [];
9
+ this.size = 0;
10
+ this.reset();
11
+ }
12
+ reset() {
13
+ this.reg[0] = 1937774191;
14
+ this.reg[1] = 1226093241;
15
+ this.reg[2] = 388252375;
16
+ this.reg[3] = 3666478592;
17
+ this.reg[4] = 2842636476;
18
+ this.reg[5] = 372324522;
19
+ this.reg[6] = 3817729613;
20
+ this.reg[7] = 2969243214;
21
+ this.chunk = [];
22
+ this.size = 0;
23
+ }
24
+ write(e) {
25
+ const a = typeof e === 'string' ? this.stringToBytes(e) : e;
26
+ this.size += a.length;
27
+ let f = 64 - this.chunk.length;
28
+ if (a.length < f) {
29
+ this.chunk = this.chunk.concat(a);
98
30
  }
99
- return o;
100
- }
101
- compress(a) {
102
- const f = this.generate_f(a);
103
- const i = [...this.reg];
104
- for (let o = 0; o < 64; o++) {
105
- let c = this.de(i[0], 12) + i[4] + this.de(this.pe(o), o);
106
- c = (c & 0xFFFFFFFF);
107
- c = this.de(c, 7);
108
- const s = (c ^ this.de(i[0], 12)) & 0xFFFFFFFF;
109
- let u = this.he(o, i[0], i[1], i[2]);
110
- u = (u + i[3] + s + f[o + 68]) & 0xFFFFFFFF;
111
- let b = this.ve(o, i[4], i[5], i[6]);
112
- b = (b + i[7] + c + f[o]) & 0xFFFFFFFF;
113
- i[3] = i[2];
114
- i[2] = this.de(i[1], 9);
115
- i[1] = i[0];
116
- i[0] = u;
117
- i[7] = i[6];
118
- i[6] = this.de(i[5], 19);
119
- i[5] = i[4];
120
- i[4] = (b ^ this.de(b, 9) ^ this.de(b, 17)) & 0xFFFFFFFF;
121
- }
122
- for (let l = 0; l < 8; l++) {
123
- this.reg[l] = (this.reg[l] ^ i[l]) & 0xFFFFFFFF;
31
+ else {
32
+ this.chunk = this.chunk.concat(a.slice(0, f));
33
+ while (this.chunk.length >= 64) {
34
+ this._compress(this.chunk);
35
+ f < a.length ? (this.chunk = a.slice(f, Math.min(f + 64, a.length))) : (this.chunk = []);
36
+ f += 64;
37
+ }
124
38
  }
125
39
  }
126
- generate_f(e) {
127
- const r = new Array(132).fill(0);
128
- for (let t = 0; t < 16; t++) {
129
- r[t] = (255 & e[4 * t]) | (e[4 * t + 1] << 8) | (e[4 * t + 2] << 16) | (e[4 * t + 3] << 24);
40
+ sum(e, t) {
41
+ if (e) {
42
+ this.reset();
43
+ this.write(e);
130
44
  }
131
- for (let n = 16; n < 68; n++) {
132
- const u = r[n - 3] ^ r[n - 13] ^ this.de(r[n - 16], 15);
133
- const c = this.de(u, 17) ^ this.de(u, 9) ^ u;
134
- r[n] = c ^ r[n - 6];
45
+ this._fill();
46
+ for (let f = 0; f < this.chunk.length; f += 64) {
47
+ this._compress(this.chunk.slice(f, f + 64));
135
48
  }
136
- for (let i = 0; i < 64; i++) {
137
- r[68 + i] = r[i] ^ r[i + 4];
49
+ let i = null;
50
+ if (t === 'hex') {
51
+ i = '';
52
+ for (let f = 0; f < 8; f++) {
53
+ i += this.padHex(this.reg[f].toString(16), 8);
54
+ }
138
55
  }
139
- return r;
140
- }
141
- generate_params_code(url_params) {
142
- // console.log('generate_params_code', this.sm3ToArray(this.sm3ToArray(url_params + this.end_string)))
143
- return this.sm3ToArray(this.sm3ToArray(url_params + this.end_string));
144
- }
145
- generate_method_code(method) {
146
- return this.sm3ToArray(this.sm3ToArray(method + this.end_string));
56
+ else {
57
+ i = new Array(32);
58
+ for (let f = 0; f < 8; f++) {
59
+ let c = this.reg[f];
60
+ i[4 * f + 3] = (255 & c) >>> 0;
61
+ c >>>= 8;
62
+ i[4 * f + 2] = (255 & c) >>> 0;
63
+ c >>>= 8;
64
+ i[4 * f + 1] = (255 & c) >>> 0;
65
+ c >>>= 8;
66
+ i[4 * f] = (255 & c) >>> 0;
67
+ }
68
+ }
69
+ this.reset();
70
+ return i;
147
71
  }
148
- sm3ToArray(data) {
149
- let byteArray;
150
- if (typeof data === 'string') {
151
- byteArray = new TextEncoder().encode(data);
72
+ _compress(t) {
73
+ if (t.length < 64) {
74
+ console.error('compress error: not enough data');
152
75
  }
153
76
  else {
154
- byteArray = new Uint8Array(data);
155
- }
156
- // console.log(byteArray)
157
- const hashHex = sm3(byteArray);
158
- // console.log('sm3:', hashHex)
159
- const result = [];
160
- for (let i = 0; i < hashHex.length; i += 2) {
161
- result.push(parseInt(hashHex.substr(i, 2), 16));
77
+ for (var f = ((e) => {
78
+ for (var r = new Array(132), t = 0; t < 16; t++) {
79
+ ;
80
+ (r[t] = e[4 * t] << 24), (r[t] |= e[4 * t + 1] << 16), (r[t] |= e[4 * t + 2] << 8), (r[t] |= e[4 * t + 3]), (r[t] >>>= 0);
81
+ }
82
+ for (var n = 16; n < 68; n++) {
83
+ let a = r[n - 16] ^ r[n - 9] ^ this.le(r[n - 3], 15);
84
+ (a = a ^ this.le(a, 15) ^ this.le(a, 23)), (r[n] = (a ^ this.le(r[n - 13], 7) ^ r[n - 6]) >>> 0);
85
+ }
86
+ for (n = 0; n < 64; n++)
87
+ r[n + 68] = (r[n] ^ r[n + 4]) >>> 0;
88
+ return r;
89
+ })(t), i = this.reg.slice(0), c = 0; c < 64; c++) {
90
+ let o = this.le(i[0], 12) + i[4] + this.le(this.de(c), c);
91
+ const s = ((o = this.le((o = (4294967295 & o) >>> 0), 7)) ^ this.le(i[0], 12)) >>> 0;
92
+ let u = this.pe(c, i[0], i[1], i[2]);
93
+ u = (4294967295 & (u = u + i[3] + s + f[c + 68])) >>> 0;
94
+ let b = this.he(c, i[4], i[5], i[6]);
95
+ (b = (4294967295 & (b = b + i[7] + o + f[c])) >>> 0),
96
+ (i[3] = i[2]),
97
+ (i[2] = this.le(i[1], 9)),
98
+ (i[1] = i[0]),
99
+ (i[0] = u),
100
+ (i[7] = i[6]),
101
+ (i[6] = this.le(i[5], 19)),
102
+ (i[5] = i[4]),
103
+ (i[4] = (b ^ this.le(b, 9) ^ this.le(b, 17)) >>> 0);
104
+ }
105
+ for (let l = 0; l < 8; l++)
106
+ this.reg[l] = (this.reg[l] ^ i[l]) >>> 0;
162
107
  }
163
- return result;
164
- }
165
- generate_params(url_params) {
166
- return url_params.split("").map(c => c.charCodeAt(0) % 255).map(this.tobase).join("");
167
- }
168
- generate_method(method) {
169
- return method.split("").map(c => c.charCodeAt(0) % 255).map(this.tobase).join("");
170
- }
171
- char_code_at(str) {
172
- return str.split("").map(c => c.charCodeAt(0));
173
108
  }
174
- de(a, b) {
175
- return (a << b) | (a >>> (32 - b));
176
- }
177
- pe(a) {
178
- const t = this.arguments[a & 3];
179
- return (t << 5) | t;
180
- }
181
- ve(a, b, c, d) {
182
- return (a & b) | (~a & c);
183
- }
184
- he(a, b, c, d) {
185
- return b ^ c ^ d;
186
- }
187
- end_check_num(a) {
188
- const r = (this.chunk.length << 3) & 255;
189
- const n = ((this.size >> 29) & 255) | ((this.size & 255) << 8);
190
- return (a[0] ^ a[1] ^ a[2] ^ a[3] ^ a[4] ^ a[5] ^ a[6] ^ a[7] ^ r ^ n) & 255;
191
- }
192
- tobase(a) {
193
- return ABogus.prototype.from_char_code.call(this, 0, 0, 0, a);
194
- }
195
- rc4_encrypt(a, b) {
196
- let c = this.rc4_key_schedule(b);
197
- let e = "";
198
- for (let f = 0; f < a.length; f++) {
199
- const g = a.charCodeAt(f);
200
- e += String.fromCharCode(g ^ c[f & 255]);
109
+ _fill() {
110
+ let a = 8 * this.size;
111
+ let f = this.chunk.push(128) % 64;
112
+ while (64 - f < 8) {
113
+ f -= 64;
201
114
  }
202
- return e;
203
- }
204
- rc4_key_schedule(b) {
205
- const c = new Array(256);
206
- const d = new Array(256);
207
- for (let i = 0; i < 256; i++) {
208
- c[i] = b.charCodeAt(i % b.length);
209
- d[i] = i;
115
+ while (f < 56) {
116
+ this.chunk.push(0);
117
+ f++;
210
118
  }
211
- let j = 0;
212
- for (let i = 0; i < 256; i++) {
213
- j = (j + d[i] + c[i]) % 256;
214
- [d[i], d[j]] = [d[j], d[i]];
119
+ for (let i = 0; i < 4; i++) {
120
+ const c = Math.floor(a / 0x100000000);
121
+ this.chunk.push((c >>> (8 * (3 - i))) & 255);
122
+ }
123
+ for (let i = 0; i < 4; i++) {
124
+ this.chunk.push((a >>> (8 * (3 - i))) & 255);
215
125
  }
216
- return d;
217
- }
218
- list_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) {
219
- return [
220
- a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q,
221
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
222
- ];
223
126
  }
224
- generate_browser_info(platform) {
225
- const ua = platform || "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0";
226
- const browser_info = ua.split("").map(c => (c.charCodeAt(0) % 255)).map(this.tobase).join("");
227
- return browser_info;
127
+ de(e) {
128
+ return 0 <= e && e < 16 ? 2043430169 : 16 <= e && e < 64 ? 2055708042 : (console.error('invalid j for constant Tj'), 0);
228
129
  }
229
- getABogus(url, method, start_time, end_time) {
230
- const url_params = parse(url, true).search || "";
231
- return this.generate_string_2(url_params, method, start_time, end_time);
130
+ pe(e, r, t, n) {
131
+ return 0 <= e && e < 16 ? (r ^ t ^ n) >>> 0 : 16 <= e && e < 64 ? ((r & t) | (r & n) | (t & n)) >>> 0 : (console.error('invalid j for bool function FF'), 0);
232
132
  }
233
- get_reg() {
234
- return this.rc4_encrypt(this.from_char_code(...this.reg_to_array(this.reg)), "x");
133
+ he(e, r, t, n) {
134
+ return 0 <= e && e < 16 ? (r ^ t ^ n) >>> 0 : 16 <= e && e < 64 ? ((r & t) | (~r & n)) >>> 0 : (console.error('invalid j for bool function GG'), 0);
235
135
  }
236
- get_value(url_params = '', method = "GET", start_time = 0, end_time = 0, random_num_1, random_num_2, random_num_3) {
237
- const string_1 = this.generate_string_1(random_num_1, random_num_2, random_num_3);
238
- // console.log(string_1)
239
- const string_2 = this.generateString((new URLSearchParams((new URL(url_params)).search)).toString(), method, start_time, end_time);
240
- const string = string_1 + string_2;
241
- // console.log(string)
242
- return this.generate_result(string, 's4');
136
+ le(e, r) {
137
+ return ((e << (r %= 32)) | (e >>> (32 - r))) >>> 0;
243
138
  }
244
- generateString(url_params, method, start_time, end_time) {
245
- let string_2;
246
- // console.log(new URLSearchParams(url_params).toString())
247
- if (typeof url_params === 'object' && !Array.isArray(url_params) && url_params !== null) {
248
- // 如果url_params是一个对象(字典),则使用URLSearchParams来编码它
249
- string_2 = this.generate_string_2((new URLSearchParams((new URL(url_params)).search)).toString(), method, start_time, end_time);
250
- }
251
- else {
252
- // 否则,假设url_params已经是编码后的字符串或可以直接使用的值
253
- string_2 = this.generate_string_2(url_params.toString(), method, start_time, end_time);
139
+ stringToBytes(str) {
140
+ const n = encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (_, r) => String.fromCharCode(parseInt(r, 16)));
141
+ const a = new Array(n.length);
142
+ for (let i = 0; i < n.length; i++) {
143
+ a[i] = n.charCodeAt(i);
254
144
  }
255
- return string_2;
145
+ return a;
256
146
  }
257
- generate_result(s, e = "s4") {
258
- const r = [];
259
- for (let i = 0; i < s.length; i += 3) {
260
- let n;
261
- if (i + 2 < s.length) {
262
- n = (s.charCodeAt(i) << 16) | (s.charCodeAt(i + 1) << 8) | s.charCodeAt(i + 2);
263
- }
264
- else if (i + 1 < s.length) {
265
- n = (s.charCodeAt(i) << 16) | (s.charCodeAt(i + 1) << 8);
266
- }
267
- else {
268
- n = s.charCodeAt(i) << 16;
269
- }
270
- for (let j = 18, k = [0xFC0000, 0x03F000, 0x0FC0, 0x3F]; j >= 0; j -= 6) {
271
- if ((j === 6 && i + 1 >= s.length) || (j === 0 && i + 2 >= s.length)) {
272
- break;
273
- }
274
- r.push(this.str[e][(n & k[(18 - j) / 6]) >> j]);
275
- }
147
+ padHex(num, size) {
148
+ return num.padStart(size, '0');
149
+ }
150
+ }
151
+ function rc4_encrypt(plaintext, key) {
152
+ const s = [];
153
+ for (var i = 0; i < 256; i++) {
154
+ s[i] = i;
155
+ }
156
+ var j = 0;
157
+ for (var i = 0; i < 256; i++) {
158
+ j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;
159
+ var temp = s[i];
160
+ s[i] = s[j];
161
+ s[j] = temp;
162
+ }
163
+ var i = 0;
164
+ var j = 0;
165
+ const cipher = [];
166
+ for (let k = 0; k < plaintext.length; k++) {
167
+ i = (i + 1) % 256;
168
+ j = (j + s[i]) % 256;
169
+ var temp = s[i];
170
+ s[i] = s[j];
171
+ s[j] = temp;
172
+ const t = (s[i] + s[j]) % 256;
173
+ cipher.push(String.fromCharCode(s[t] ^ plaintext.charCodeAt(k)));
174
+ }
175
+ return cipher.join('');
176
+ }
177
+ function result_encrypt(long_str, num) {
178
+ const s_obj = {
179
+ s0: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
180
+ s1: 'Dkdpgh4ZKsQB80/Mfvw36XI1R25+WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=',
181
+ s2: 'Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=',
182
+ s3: 'ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe',
183
+ s4: 'Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe',
184
+ };
185
+ const constant = {
186
+ '0': 16515072,
187
+ '1': 258048,
188
+ '2': 4032,
189
+ str: s_obj[num],
190
+ };
191
+ let result = '';
192
+ let lound = 0;
193
+ let long_int = get_long_int(lound, long_str);
194
+ for (let i = 0; i < (long_str.length / 3) * 4; i++) {
195
+ if (Math.floor(i / 4) !== lound) {
196
+ lound += 1;
197
+ long_int = get_long_int(lound, long_str);
198
+ }
199
+ let key = i % 4;
200
+ let temp_int;
201
+ switch (key) {
202
+ case 0:
203
+ temp_int = (long_int & constant['0']) >> 18;
204
+ result += constant['str'].charAt(temp_int);
205
+ break;
206
+ case 1:
207
+ temp_int = (long_int & constant['1']) >> 12;
208
+ result += constant['str'].charAt(temp_int);
209
+ break;
210
+ case 2:
211
+ temp_int = (long_int & constant['2']) >> 6;
212
+ result += constant['str'].charAt(temp_int);
213
+ break;
214
+ case 3:
215
+ temp_int = long_int & 63;
216
+ result += constant['str'].charAt(temp_int);
217
+ break;
218
+ default:
219
+ break;
276
220
  }
277
- r.push("=".repeat((4 - (r.length % 4)) % 4));
278
- return r.join("");
279
221
  }
222
+ return result;
223
+ }
224
+ function get_long_int(round, long_str) {
225
+ round = round * 3;
226
+ return (long_str.charCodeAt(round) << 16) | (long_str.charCodeAt(round + 1) << 8) | long_str.charCodeAt(round + 2);
227
+ }
228
+ function gener_random(random, option) {
229
+ return [
230
+ (random & 255 & 170) | (option[0] & 85), // 163
231
+ (random & 255 & 85) | (option[0] & 170), //87
232
+ ((random >> 8) & 255 & 170) | (option[1] & 85), //37
233
+ ((random >> 8) & 255 & 85) | (option[1] & 170), //41
234
+ ];
235
+ }
236
+ function generate_rc4_bb_str(url_search_params, user_agent, window_env_str, suffix = 'cus', Arguments = [0, 1, 14]) {
237
+ let sm3 = new SM3();
238
+ let start_time = Date.now();
239
+ // url_search_params两次sm3之的结果
240
+ const url_search_params_list = sm3.sum(sm3.sum(url_search_params + suffix));
241
+ // 对后缀两次sm3之的结果
242
+ const cus = sm3.sum(sm3.sum(suffix));
243
+ // 对ua处理之后的结果
244
+ const ua = sm3.sum(result_encrypt(rc4_encrypt(user_agent, String.fromCharCode.apply(null, [0.00390625, 1, 14])), 's3'));
245
+ //
246
+ const end_time = Date.now();
247
+ // b object initialization
248
+ let b = {
249
+ 8: 3, // 固定
250
+ 10: end_time, // 3次加密结束时间
251
+ 15: {
252
+ aid: 6383,
253
+ pageId: 6241,
254
+ boe: false,
255
+ ddrt: 7,
256
+ paths: {
257
+ include: [{}, {}, {}, {}, {}, {}, {}],
258
+ exclude: [],
259
+ },
260
+ track: {
261
+ mode: 0,
262
+ delay: 300,
263
+ paths: [],
264
+ },
265
+ dump: true,
266
+ rpU: '',
267
+ },
268
+ 16: start_time, // 3次加密开始时间
269
+ 18: 44, // 固定
270
+ 19: [1, 0, 1, 5],
271
+ };
272
+ // 3次加密开始时间
273
+ b[20] = (b[16] >> 24) & 255;
274
+ b[21] = (b[16] >> 16) & 255;
275
+ b[22] = (b[16] >> 8) & 255;
276
+ b[23] = b[16] & 255;
277
+ b[24] = (b[16] / 256 / 256 / 256 / 256) >> 0;
278
+ b[25] = (b[16] / 256 / 256 / 256 / 256 / 256) >> 0;
279
+ // 参数Arguments [0, 1, 14, ...]
280
+ // let Arguments = [0, 1, 14]
281
+ b[26] = (Arguments[0] >> 24) & 255;
282
+ b[27] = (Arguments[0] >> 16) & 255;
283
+ b[28] = (Arguments[0] >> 8) & 255;
284
+ b[29] = Arguments[0] & 255;
285
+ b[30] = (Arguments[1] / 256) & 255;
286
+ b[31] = Arguments[1] % 256 & 255;
287
+ b[32] = (Arguments[1] >> 24) & 255;
288
+ b[33] = (Arguments[1] >> 16) & 255;
289
+ b[34] = (Arguments[2] >> 24) & 255;
290
+ b[35] = (Arguments[2] >> 16) & 255;
291
+ b[36] = (Arguments[2] >> 8) & 255;
292
+ b[37] = Arguments[2] & 255;
293
+ // (url_search_params + "cus") 两次sm3之的结果
294
+ /** let url_search_params_list = [
295
+ 91, 186, 35, 86, 143, 253, 6, 76,
296
+ 34, 21, 167, 148, 7, 42, 192, 219,
297
+ 188, 20, 182, 85, 213, 74, 213, 147,
298
+ 37, 155, 93, 139, 85, 118, 228, 213
299
+ ] */
300
+ b[38] = url_search_params_list[21];
301
+ b[39] = url_search_params_list[22];
302
+ // ("cus") 对后缀两次sm3之的结果
303
+ /**
304
+ * let cus = [
305
+ 136, 101, 114, 147, 58, 77, 207, 201,
306
+ 215, 162, 154, 93, 248, 13, 142, 160,
307
+ 105, 73, 215, 241, 83, 58, 51, 43,
308
+ 255, 38, 168, 141, 216, 194, 35, 236
309
+ ] */
310
+ b[40] = cus[21];
311
+ b[41] = cus[22];
312
+ // 对ua处理之后的结果
313
+ /**
314
+ * let ua = [
315
+ 129, 190, 70, 186, 86, 196, 199, 53,
316
+ 99, 38, 29, 209, 243, 17, 157, 69,
317
+ 147, 104, 53, 23, 114, 126, 66, 228,
318
+ 135, 30, 168, 185, 109, 156, 251, 88
319
+ ] */
320
+ b[42] = ua[23];
321
+ b[43] = ua[24];
322
+ // 3次加密结束时间
323
+ b[44] = (b[10] >> 24) & 255;
324
+ b[45] = (b[10] >> 16) & 255;
325
+ b[46] = (b[10] >> 8) & 255;
326
+ b[47] = b[10] & 255;
327
+ b[48] = b[8];
328
+ b[49] = (b[10] / 256 / 256 / 256 / 256) >> 0;
329
+ b[50] = (b[10] / 256 / 256 / 256 / 256 / 256) >> 0;
330
+ // object配置项
331
+ b[51] = b[15].pageId;
332
+ b[52] = (b[15].pageId >> 24) & 255;
333
+ b[53] = (b[15].pageId >> 16) & 255;
334
+ b[54] = (b[15].pageId >> 8) & 255;
335
+ b[55] = b[15].pageId & 255;
336
+ b[56] = b[15].aid;
337
+ b[57] = b[15].aid & 255;
338
+ b[58] = (b[15].aid >> 8) & 255;
339
+ b[59] = (b[15].aid >> 16) & 255;
340
+ b[60] = (b[15].aid >> 24) & 255;
341
+ // 中间进行了环境检测
342
+ // 代码索引: 2496 索引值: 17 (索引64关键条件)
343
+ // '1536|747|1536|834|0|30|0|0|1536|834|1536|864|1525|747|24|24|Win32'.charCodeAt()得到65位数组
344
+ /**
345
+ * let window_env_list = [49, 53, 51, 54, 124, 55, 52, 55, 124, 49, 53, 51, 54, 124, 56, 51, 52, 124, 48, 124, 51,
346
+ * 48, 124, 48, 124, 48, 124, 49, 53, 51, 54, 124, 56, 51, 52, 124, 49, 53, 51, 54, 124, 56,
347
+ * 54, 52, 124, 49, 53, 50, 53, 124, 55, 52, 55, 124, 50, 52, 124, 50, 52, 124, 87, 105, 110,
348
+ * 51, 50]
349
+ */
350
+ const window_env_list = [];
351
+ for (let index = 0; index < window_env_str.length; index++) {
352
+ window_env_list.push(window_env_str.charCodeAt(index));
353
+ }
354
+ b[64] = window_env_list.length;
355
+ b[65] = b[64] & 255;
356
+ b[66] = (b[64] >> 8) & 255;
357
+ b[69] = [].length;
358
+ b[70] = b[69] & 255;
359
+ b[71] = (b[69] >> 8) & 255;
360
+ b[72] =
361
+ b[18] ^
362
+ b[20] ^
363
+ b[26] ^
364
+ b[30] ^
365
+ b[38] ^
366
+ b[40] ^
367
+ b[42] ^
368
+ b[21] ^
369
+ b[27] ^
370
+ b[31] ^
371
+ b[35] ^
372
+ b[39] ^
373
+ b[41] ^
374
+ b[43] ^
375
+ b[22] ^
376
+ b[28] ^
377
+ b[32] ^
378
+ b[36] ^
379
+ b[23] ^
380
+ b[29] ^
381
+ b[33] ^
382
+ b[37] ^
383
+ b[44] ^
384
+ b[45] ^
385
+ b[46] ^
386
+ b[47] ^
387
+ b[48] ^
388
+ b[49] ^
389
+ b[50] ^
390
+ b[24] ^
391
+ b[25] ^
392
+ b[52] ^
393
+ b[53] ^
394
+ b[54] ^
395
+ b[55] ^
396
+ b[57] ^
397
+ b[58] ^
398
+ b[59] ^
399
+ b[60] ^
400
+ b[65] ^
401
+ b[66] ^
402
+ b[70] ^
403
+ b[71];
404
+ let bb = [
405
+ b[18],
406
+ b[20],
407
+ b[52],
408
+ b[26],
409
+ b[30],
410
+ b[34],
411
+ b[58],
412
+ b[38],
413
+ b[40],
414
+ b[53],
415
+ b[42],
416
+ b[21],
417
+ b[27],
418
+ b[54],
419
+ b[55],
420
+ b[31],
421
+ b[35],
422
+ b[57],
423
+ b[39],
424
+ b[41],
425
+ b[43],
426
+ b[22],
427
+ b[28],
428
+ b[32],
429
+ b[60],
430
+ b[36],
431
+ b[23],
432
+ b[29],
433
+ b[33],
434
+ b[37],
435
+ b[44],
436
+ b[45],
437
+ b[59],
438
+ b[46],
439
+ b[47],
440
+ b[48],
441
+ b[49],
442
+ b[50],
443
+ b[24],
444
+ b[25],
445
+ b[65],
446
+ b[66],
447
+ b[70],
448
+ b[71],
449
+ ];
450
+ bb = bb.concat(window_env_list).concat(b[72]);
451
+ return rc4_encrypt(String.fromCharCode.apply(null, bb), String.fromCharCode.apply(null, [121]));
452
+ }
453
+ function generate_random_str() {
454
+ let random_str_list = [];
455
+ random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [3, 45]));
456
+ random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [1, 0]));
457
+ random_str_list = random_str_list.concat(gener_random(Math.random() * 10000, [1, 5]));
458
+ return String.fromCharCode.apply(null, random_str_list);
280
459
  }
281
- export default (url, ua) => {
282
- return encodeURIComponent(new ABogus(ua).get_value(url));
460
+ export default (url, user_agent) => {
461
+ let result_str = generate_random_str() + generate_rc4_bb_str(new URLSearchParams(new URL(url).search).toString(), user_agent, '1536|747|1536|834|0|30|0|0|1536|834|1536|864|1525|747|24|24|Win32');
462
+ return result_encrypt(result_str, 's4') + '=';
283
463
  };