[ZJUCTF2025] 命题人Writeup: AST

前排滑跪致歉:对不起给大家喂💩了

TL;DR

出这一题时设想的是出一道AI做不出来的题,如何做不出呢,那自然是token数得多;正好当时在干另外一个事情,就是将一个C代码转为AST,然后解析AST,进行一系列注入标识符替换,运算符提取,控制流展平等等一系列操作,输出一个等价但AST树几乎变样的C代码,用来绕过PTA的检测。

那么就有了这道题:将AST还原为C代码。

降低难度,直接运行还原后的代码会直接输出flag。

为了增加难度(防止根据loc信息直接把源代码还原出来),我们删除了loc,range,name信息,按理来说接下来就是人肉IDA的时间了。

预期的解法是:

  1. 手写一个AST to C的脚本(应该是没有现成的工具的)
  2. 输出每个节点的信息,手动肉眼看看(可能需要一点耐心,而且还很费眼,所以推荐第一种解法)

然后遇到了这两件事

  1. 有人直接把JSON文件拖到Gemini里,然后就直接还原了(现在的AI已经发展到了一种我无法理解的水平.jpg)
  2. clang生成的AST json文件里还有一个键,叫做mangledName,里面存储的是函数/全局变量的原始名字,那这直接看名字就能猜到里面在干什么了还逆个啥啊,导致预期第二种解法难度急剧下降。

总而言之这一题确实有点坏心眼在,然后玩的时候没玩好把自己绕进去了,导致出来的就是这么一道意义不明的题目。以后一定注意。

1
clang -Xclang -ast-dump=json -fsyntax-only ZJUCTF.c > ZJUCTF.json

原始代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
/* FLAG is
ZJUCTF{InDe3d-U_C4n-m0d1fy-UR_PoC-int0_s0me7hinG-byp4s5ing-PTA's_c0de-pl4gi4r1sm-ch3ck}

parts:
ZJUCTF{InDe3d-
U_C4n-m0d1fy-U
R_PoC-int0_s0me7hinG-byp4s
5ing-PTA's_c0de-
pl4gi4r1sm-ch3ck}
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *base64decode(const char *input);

char *base64decode(const char *input)
{
size_t len = 0;
char base64Charset[66];
strcpy(base64Charset, "ABCDIdHIJKLqrstuE6745eIbb7");
strcpy(base64Charset + 16, "vwxMNOefqhEFGijV97B9Bit7Yres");
strcpy(base64Charset + 32, "TU234WXYnopyzT1kvQ64ciIo8y12d");
strcpy(base64Charset + 48, "lmRS567PQZab89+/=");
while (input[len] != '\0')
{
len++;
}

base64Charset[4] = 'c';
base64Charset[24] = 'g';
size_t y = 44;
base64Charset[++y] = '0';

size_t outputLen = (len / 4) * 3;
if (input[len - 1] == '=')
outputLen--;
if (input[len - 2] == '=')
outputLen--;

char *output = (char *)malloc(outputLen + 1);
size_t j = 0;
size_t i = 0;

for (; i < len; i += 4)
{
int sextet_a = input[i] == '=' ? 0 & i++ : strchr(base64Charset, input[i]) - base64Charset;
int sextet_b = input[i + 1] == '=' ? 0 & i++ : strchr(base64Charset, input[i + 1]) - base64Charset;
int sextet_c = input[i + 2] == '=' ? 0 & i++ : strchr(base64Charset, input[i + 2]) - base64Charset;
int sextet_d = input[i + 3] == '=' ? 0 & i++ : strchr(base64Charset, input[i + 3]) - base64Charset;

int triple = (sextet_a << 18) + (sextet_b << 12) + (sextet_c << 6) + sextet_d;

if (j < outputLen)
output[j++] = (triple >> 16) & 0xFF;
if (j < outputLen)
output[j++] = (triple >> 8) & 0xFF;
if (j < outputLen)
output[j++] = triple & 0xFF;
}
output[outputLen] = '\0';
return output;
}

char *part1Code = "e4oOv6wHj5W1wHNShC5=";

int part2Code[] = {118, 871, 67, 10, 77, 821, 109, 6, 71, 825, 60, 79, 14, 861};
int cd1(int inputy)
{
return inputy ^ 0x23;
}
int cd2(int inputy)
{
return inputy - 776;
}
int cd3(int inputy)
{
return 67;
}
int cd4(int inputy)
{
return inputy + 42;
}
int (*part2funcList[])(int) = {cd1, cd2, cd3, cd4};
char *part2Decoded()
{
size_t len = sizeof(part2Code) / sizeof(part2Code[0]);
char *result = (char *)malloc(len + 1);
for (size_t i = 0; i < len; i++)
{
result[i] = part2funcList[i % 4](part2Code[i]);
}
result[6] = 109;
result[10] = 102;
result[len] = '\0';
return result;
}

char *AES_secret_key = "ZJUCTF{flag_is_here_just_kidding}"; // 32 bytes
char *AES_iv = "This is a RC2 IV"; // 16 bytes

#include <openssl/evp.h>
#include <openssl/err.h>

char *part3_AES_decrypt(const char *encryptedHex) {
// 初始化OpenSSL
OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();

// 将十六进制字符串转换为二进制数据
long len = strlen(encryptedHex);
int enc_len = len / 2;
unsigned char *enc_data = (unsigned char *)malloc(enc_len);

for(int i = 0; i < enc_len; i++) {
sscanf(encryptedHex + 2*i, "%2hhx", &enc_data[i]);
}

// 创建解密上下文
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
if(!ctx) {
free(enc_data);
return NULL;
}

// 初始化解密操作
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL,
(unsigned char*)AES_secret_key,
(unsigned char*)AES_iv)) {
EVP_CIPHER_CTX_free(ctx);
free(enc_data);
return NULL;
}

// 分配输出缓冲区(可能需要额外空间用于填充)
int out_len = enc_len + EVP_CIPHER_CTX_block_size(ctx);
unsigned char *out_buf = (unsigned char *)malloc(out_len);
int final_len = 0, total_len = 0;

// 执行解密
if(1 != EVP_DecryptUpdate(ctx, out_buf, &out_len, enc_data, enc_len)) {
free(enc_data);
free(out_buf);
EVP_CIPHER_CTX_free(ctx);
return NULL;
}
total_len = out_len;

// 处理最后的块
if(1 != EVP_DecryptFinal_ex(ctx, out_buf + total_len, &final_len)) {
free(enc_data);
free(out_buf);
EVP_CIPHER_CTX_free(ctx);
return NULL;
}
total_len += final_len;

// 添加字符串结束符
out_buf[total_len] = '\0';

// 清理资源
EVP_CIPHER_CTX_free(ctx);
free(enc_data);

return (char *)out_buf;
}




unsigned char Part5Code[] = {0x87,0x13,0x90,0x98,0x98,0x98,0x98,0x98,0x98,0x9b,0x9d,0x59,0x4f,0x3a,0x19,0x98,0x98,0x98,0x48,0x7f,0x5a,0xa7,0xd0,0x4a,0x2d,0xcf,0xbd,0xb3,0x89,0x2a,0x13,0xc8,0x81,0xb9,0x2a,0xda,0x0a,0xa5,0x62,0x6e,0xe3,0xd6,0x78,0x72,0x2f,0x32,0x84,0xe6,0xa7,0xfe,0x41,0x0a,0xae,0x07,0x9a,0xcb,0x08,0xe1,0xfd,0x77,0x2c,0x48,0x2c,0x81,0x43,0x2f,0x48,0x0a,0x5e,0x50,0x1f,0x2e,0x02,0x1d,0x13,0x99,0x29,0xa6,0xd3,0x45,0x44,0x4c,0x79,0x1c,0x82,0x40,0xd5,0xea,0xa5,0xb4,0x56,0x17,0x65,0x79,0x59,0xea,0x2a,0xd1,0x67,0x72,0x23,0xdd,0xd7,0x4a,0xaf,0x27,0xe6,0x63,0x8b,0xb0,0x1f,0xdd,0x59,0x01,0x5a,0x3f,0x33,0x03,0x31,0x90,0x8f,0x61,0xa8,0x38,0x1b,0x99,0xf4,0xb1,0x94,0x50,0xbd,0xf3,0xdb,0x24,0x65,0x3c,0xce,0x01,0x78,0xbe,0x6a,0xa6,0x5f,0x32,0x92,0x4c,0x09,0x76,0xe5,0xae,0xa1,0xa4,0x62,0xef,0x27,0xd6,0xf2,0xaf,0xd4,0x97,0x11,0xf4,0x8d,0x71,0x5d,0xa4,0x59,0x57,0xff,0xab,0x0f,0xa7,0xad,0x7b,0x8e,0xf0,0x0e,0xdc,0xb0,0x3a,0xbf,0x4c,0x23,0xf3,0x24,0x4e,0x7a,0x92,0xb9,0xea,0x43,0xce,0xbb,0x1c,0x28,0xb6,0xa7,0x87,0xd7,0x6b,0xc4,0xab,0x8c,0xde,0xd7,0x82,0xe9,0x25,0x6c,0xe2,0x4d,0x0e,0x37,0x0e,0xe6,0x17,0x51,0xdf,0xab,0xe1,0xf5,0x60,0xd9,0xd5,0x6e,0xce,0x94,0xc0,0x6f,0xf9,0x54,0x6c,0x1d,0xb7,0xed,0x1e,0x54,0xf9,0x1b,0xf1,0x72,0x97,0x74,0x9a,0x77,0xc3,0x74,0xac,0x21,0x1c,0x74,0x7c,0xfa,0xad,0xa3,0xa7,0xbe,0x77,0x92,0xc7,0x96,0x8f,0x72,0x82,0x74,0x24,0x0a,0x70,0x71,0x02,0xf8,0x4d,0x6f,0xde,0x18,0xce,0x16,0x7b,0x98,0x14,0x1b,0x9f,0xcf,0x55,0x6f,0x4d,0x27,0xd0,0x9e,0xed,0x9b,0x41,0x5d,0x52,0x30,0xb8,0x71,0xe3,0xec,0x8b,0x65,0xb5,0xf9,0x90,0x3c,0xd5,0xd8,0xac,0xcf,0x29,0xff,0x78,0xd1,0x75,0x86,0x29,0x4b,0x06,0x16,0xc5,0x24,0x3a,0x00,0xb1,0x2f,0x20,0x96,0xe6,0x3b,0x38,0x3d,0x5f,0xba,0x62,0xe6,0x55,0x63,0xf3,0x16,0xf6,0x5f,0x49,0x34,0x4f,0x61,0x59,0x2b,0x03,0xee,0xb3,0x8b,0xe3,0x8d,0xc0,0xd6,0x16,0xef,0xe4,0xff,0xc3,0x30,0x1a,0x06,0xb7,0x71,0xd6,0x7c,0x56,0x46,0x1d,0x22,0x71,0x42,0x60,0x08,0xda,0x44,0x56,0xf6,0x58,0x50,0xb1,0x71,0xbf,0x03,0xe7,0xf7,0x8c,0xe1,0x91,0x39,0xee,0x03,0xf8,0x4a,0xb3,0xe6,0x04,0xf2,0xf4,0xb0,0xf2,0xcc,0x2b,0x7d,0x85,0x5d,0x88,0x95,0x6f,0x7c,0x25,0xb7,0x35,0xa7,0x2a,0x3b,0x90,0xd9,0x6b,0xab,0xbb,0x40,0x97,0x3a,0xac,0x40,0xc1,0x63,0x8b,0x67,0xd3,0x04,0xa6,0x58,0x40,0x73,0xf6,0x93,0xe9,0xc6,0x31,0x21,0x0a,0x4c,0x5a,0x0a,0xd6,0x24,0xa2,0xd0,0x0a,0x55,0x1a,0xc0,0x8b,0x1f,0x9f,0x12,0xe2,0x77,0xca,0xb7,0x57,0xe1,0x25,0x96,0x92,0x20,0x1d,0x1b,0x3d,0xbc,0x2e,0x04,0x77,0x0a,0xd1,0x5d,0xaf,0x9b,0x85,0xb9,0xa5,0x0e,0xd5,0xe9,0x6c,0xb8,0xd4,0x4d,0xb8,0x9f,0xea,0x0f,0xc8,0xeb,0xe3,0x45,0x80,0x2f,0xca,0x17,0x36,0x89,0x95,0x63,0xb5,0x36,0x71,0xb4,0x45,0x62,0x6e,0x9c,0xed,0xbd,0xce,0x06,0x42,0xe3,0x62,0x23,0xc3,0x03,0x7c,0x69,0x29,0xf7,0x17,0xa4,0x42,0x8e,0x20,0xee,0xa9,0xe0,0x10,0x51,0x79,0xb6,0x44,0x44,0xdf,0xa6,0x51,0x85,0x23,0x0d,0x3a,0x43,0x6e,0xd8,0xbb,0x7d,0x7a,0xaa,0x20,0x5e,0x2e,0xd6,0xda,0x02,0xd7,0x7a,0xf5,0x2e,0x47,0x60,0xb4,0x58,0x41,0x5d,0x8b,0xc1,0x81,0x96,0x06,0x62,0x18,0x99,0x25,0x73,0xf1,0x34,0x23,0x9a,0xdf,0x2e,0x6e,0x68,0xf9,0x8a,0x7e,0x24,0x29,0x33,0x1a,0x08,0x64,0x69,0x65,0x60,0x86,0xfc,0x38,0xa4,0x6f,0x1f,0x9f,0x93,0x52,0x26,0xf2,0xcb,0x6c,0xaa,0xd3,0xa9,0xe0,0x4d,0xc5,0xc5,0x32,0xcb,0xa9,0x8a,0x20,0x0f,0xce,0x57,0x8f,0xc4,0x74,0x75,0x7c,0x3f,0x8b,0xc0,0xa7,0x4a,0xf4,0x72,0x9c,0x80,0x38,0xb4,0xd4,0xf4,0x67,0x51,0x4d,0x94,0x35,0xe6,0x2c,0x8a,0x5d,0x14,0x5b,0x9a,0x6f,0xe2,0xb9,0x0d,0x06,0xd0,0x12,0xa2,0xc3,0x7e,0xf0,0xb0,0x3b,0x6c,0xdf,0x24,0x09,0xce,0x4b,0x1e,0xe3,0xec,0x27,0x3c,0x59,0x6e,0xf1,0x87,0x8e,0x33,0x33,0x4a,0xb6,0xaa,0x74,0x7e,0x1a,0x8d,0xd6,0x37,0x74,0x86,0x2d,0x75,0x69,0x53,0xb4,0x6f,0x0b,0xe6,0xd7,0xc7,0xdd,0x58,0xcf,0x21,0xec,0x77,0xb3,0xf7,0x35,0x0c,0x6b,0x3b,0x61,0x47,0xde,0x60,0xea,0x43,0xb9,0x57,0x15,0x62,0x9e,0xc1,0xb0,0x7c,0xd4,0xc0,0xb3,0x94,0x72,0x66,0x77,0x87,0x0f,0x6a,0xfc,0x13,0x14,0x68,0xb8,0xc1,0x39,0x05,0x37,0x03,0x9e,0xe8,0x77,0xcf,0x4a,0x59,0x39,0x27,0x9e,0x8f,0x4e,0x81,0x78,0xe3,0xdc,0x2e,0xfa,0x10,0x26,0x36,0x2c,0x80,0xde,0x0e,0x29,0x43,0x7c,0x12,0xf4,0x69,0xdc,0x68,0xb7,0x43,0xb3,0xd5,0xbc,0xf9,0x09,0xe6,0xed,0xda,0xa2,0x48,0xdd,0xff,0x43,0x4b,0x61,0xdf,0xa0,0x73,0xd0,0xab,0x70,0x51,0xc1,0x91,0x69,0x48,0xf6,0x2f,0x12,0x75,0xb3,0x54,0x93,0x72,0x25,0xf4,0x7b,0x36,0x89,0x35,0x2d,0x78,0xa5,0xb0,0xef,0xd3,0xe3,0xb4,0xe2,0x6e,0xcc,0xe6,0x63,0x46,0xc7,0x05,0xdc,0x7a,0xe8,0x68,0x70,0x55,0xb6,0x59,0xdd,0x6e,0x64,0x59,0x6a,0x45,0x98,0xe4,0x71,0x2d,0xc0,0x2a,0x94,0xd7,0xdd,0xa7,0x7d,0x71,0x57,0x77,0xde,0xf2,0x8e,0x99,0xc2,0x33,0x42,0x1e,0xcc,0x6d,0x08,0x54,0x74,0x12,0xc9,0x82,0x53,0x16,0xce,0x65,0x14,0xed,0xc0,0x3c,0xb3,0x4b,0xe2,0x4d,0x41,0x62,0xf5,0x92,0x0b,0x76,0x7d,0xa0,0x83,0xe8,0x8f,0xf7,0x64,0xb7,0x5f,0x16,0xd3,0x6b,0x27,0xea,0xb3,0xaf,0x36,0x60,0x37,0x2d,0x2b,0xb3,0x16,0xb2,0x10,0x28,0xe9,0x2e,0x82,0xd5,0x1f,0xbb,0x6b,0x74,0xc5,0x1e,0xd4,0x32,0x11,0x57,0x11,0xe6,0x15,0xa9,0xc7,0x06,0xd4,0x90,0x26,0xe8,0xf1,0x8f,0xed,0xb5,0xec,0xca,0x13,0x72,0x35,0x62,0x8d,0x50,0x12,0xe0,0x3c,0x27,0x3b,0x40,0x4b,0x34,0xec,0xa6,0x36,0x7d,0x73,0x17,0x1b,0xa0,0xc6,0x6f,0xb5,0x93,0x06,0x59,0x22,0xd8,0xbe,0x22,0x68,0x90,0x0b,0x91,0x52,0xcf,0xf1,0x81,0xa5,0x24,0x97,0xbb,0x69,0xc0,0x22,0x05,0x89,0xd9,0x47,0x2b,0xbb,0x33,0x57,0xd3,0xc1,0x4f,0xfa,0x9b,0x83,0xa8,0xeb,0x05,0x43,0x15,0x6a,0x7c,0xed,0x10,0x11,0x91,0x15,0xe2,0xd7,0x0b,0x56,0x0e,0x92,0x5a,0x41,0xff,0x8e,0x6b,0xe2,0x01,0x8c,0xe2,0x7b,0x07,0x3f,0xec,0xc6,0x4a,0x17,0x09,0xfa,0x5c,0x6f,0x5d,0x97,0xbb,0xb5,0xe6,0x13,0x3d,0x44,0x69,0x5a,0x79,0xb2,0x67,0xc0,0xa0,0xd8,0x6f,0xd5,0x88,0x87,0x7c,0x26,0x3b,0xe5,0x35,0xd3,0x22,0x14,0xe9,0x54,0x4a,0xb9,0xf7,0x70,0xaf,0x7c,0xe4,0x3e,0x5a,0x30,0x4b,0xc8,0x1b,0x51,0x26,0xe3,0x8d,0x3a,0xf4,0x74,0xd7,0x72,0xe8,0x61,0xf0,0xc6,0xa8,0x44,0x83,0xf9,0xe5,0xe0,0xb3,0x71,0x12,0x32,0x34,0xae,0xea,0xb1,0xca,0x31,0xc2,0xb7,0xd0,0xf3,0xe1,0xfd,0x72,0x35,0x69,0x25,0x28,0x2b,0x44,0x4a,0xd3,0xf3,0x54,0x52,0xaa,0x35,0x68,0xa8,0x7b,0x65,0x11,0x52,0x0a,0x9c,0x42,0xfd,0xf1,0x8d,0xcc,0x89,0xbf,0xa2,0x2c,0x34,0x6a,0x73,0x79,0x82,0x2e,0x27,0xbe,0x85,0xdc,0x52,0x40,0xe0,0xf7,0x3c,0xb5,0x3d,0xd7,0xc3,0xc0,0x1f,0x63,0x8c,0x02,0xa4,0x9a,0x70,0x31,0x00,0x68,0xfc,0x3e,0x43,0xf7,0xd4,0x9e,0xfc,0x5d,0x16,0xdf,0xa4,0x4c,0xc3,0x54,0x87,0xfa,0x27,0x42,0x1d,0x61,0x58,0xe9,0x7c,0x10,0xeb,0x86,0xad,0x39,0xea,0x58,0x75,0xac,0x17,0xbb,0x2b,0x4f,0x2c,0x6c,0x92,0xcf,0x0c,0x68,0x78,0xfb,0xe2,0xb0,0x9f,0xf8,0xbf,0xea,0xf8,0x3c,0xd8,0x17,0x14,0x2d,0x4a,0x6a,0xb5,0x89,0x72,0x70,0x55,0x9c,0xd8,0xce,0xec,0xcc,0x07,0x64,0xa0,0x21,0x9b,0x5f,0xfb,0x4c,0xf2,0xe8,0xc1,0xfc,0xc2,0xeb,0x45,0x3c,0x5d,0x25,0x29,0xf9,0x5c,0x73,0x31,0xad,0x5f,0x35,0x74,0x18,0x7f,0x93,0x0f,0x94,0x09,0x64,0x04,0xae,0xae,0x06,0x8d,0x82,0xc7,0x51,0xa5,0x89,0xac,0x51,0xd0,0xa2,0x2a,0x0d,0x57,0x47,0x77,0x80,0x24,0x03,0xf2,0x5c,0x23,0xec,0x02,0xeb,0x94,0x97,0x3c,0xa9,0xb7,0x08,0x0f,0xb1,0x9b,0x2f,0x45,0x5a,0x01,0x35,0xb4,0x6b,0xf3,0x7a,0x02,0x6b,0xf8,0x7d,0xdb,0x84,0xf6,0x28,0x5d,0xfd,0xd2,0xdf,0xe3,0x61,0xe9,0x13,0xb0,0x0c,0xd3,0x81,0xa9,0x1e,0xd1,0x7c,0xac,0x34,0xa0,0xe1,0x70,0xf7,0xa0,0xdb,0x6e,0xe6,0x8e,0x7d,0x56,0x81,0x49,0xac,0x8f,0xaf,0x21,0x23,0xe0,0x4e,0x29,0x9a,0x82,0x24,0x73,0xb1,0x6f,0xf3,0x61,0xdc,0x5c,0x96,0xe2,0x35,0xfe,0x12,0x55,0xe4,0x31,0x21,0xda,0x72,0xcc,0xb1,0x44,0xf1,0x6d,0x4e,0xdc,0xcd,0x9a,0xaa,0x99,0xac,0x72,0xbd,0x64,0x5c,0x48,0x34,0x77,0x16,0x3f,0x91,0x63,0xb1,0xc5,0xc7,0x82,0xba,0xcb,0x48,0xfe,0xf0,0x04,0x29,0x8c,0xf6,0xcb,0x05,0x58,0xb5,0x80,0x3b,0xf1,0x52,0x25,0x85,0x74,0x7d,0x48,0x80,0xa4,0x96,0xb4,0x45,0xc1,0x37,0xd9,0xd6,0x80,0x25,0xab,0x6b,0x5f,0xd2,0xf0,0x25,0x1b,0xd4,0xfb,0x42,0xbb,0xdd,0xf7,0x66,0x7b,0x27,0x59,0x34,0x5e,0x06,0x4d,0xf3,0x72,0x69,0x68,0xac,0x1f,0x61,0x98,0x09,0x2a,0x26,0xa1,0x09,0x6a,0x24,0xe7,0xa0,0xcc,0x76,0x0f,0x5e,0x9b,0x32,0x66,0x02,0x4f,0x6b,0x19,0xef,0xfb,0x41,0xe3,0x27,0x7e,0x0a,0xd5,0x4c,0x7c,0x1b,0x25,0x9b,0xab,0x3f,0xd6,0x26,0x02,0xae,0x2f,0x48,0x5e,0xd5,0x87,0xaf,0xc2,0xe6,0xf4,0x02,0xa5,0x77,0x54,0xbc,0x73,0xb7,0xc3,0x64,0xce,0x1c,0x01,0x2c,0x06,0xee,0xea,0x36,0x5f,0x7e,0x49,0x5e,0x16,0x7f,0xed,0x29,0x05,0x5c,0x73,0xc5,0xce,0x55,0xfd,0x9e,0xe1,0x43,0xb0,0x32,0x42,0x47,0x20,0x29,0x9d,0x62,0xbe,0x48,0xfd,0x2f,0x79,0xb2,0x6c,0x80,0x7e,0xe4,0x50,0x26,0x61,0xe3,0xd8,0xe5,0x08,0x72,0x3f,0xee,0x53,0x36,0x4b,0x22,0xa3,0x4a,0x4d,0x1d,0xa1,0x14,0x8c,0x4b,0x87,0xaa,0xe4,0x73,0x26,0xfc,0x09,0xc4,0x0b,0x0e,0xcc,0x16,0x8c,0xe7,0x63,0xc5,0x2e,0x63,0x1c,0xe9,0xaf,0x74,0x6e,0xbf,0xaa,0xb4,0x75,0x3c,0x80,0x2f,0x8f,0x2e,0xba,0x39,0x0e,0xdb,0x86,0x94,0xd6,0xf4,0x68,0xf8,0x3b,0x13,0x1f,0x36,0x54,0x48,0xfe,0x79,0x30,0x0f,0xca,0x3c,0x9e,0x23,0x10,0x22,0xa6,0xd9,0x39,0x92,0x9a,0xd0,0x71,0x23,0x7c,0x15,0xea,0xb5,0x7b,0xeb,0x91,0xd7,0x16,0x09,0xb0,0xd5,0x6c,0x8b,0x8d,0x13,0x4e,0x13,0xf9,0x1f,0x65,0xa9,0x62,0xfb,0xbf,0x9b,0x40,0x48,0xed,0xaf,0x97,0x16,0x87,0xb9,0x7d,0x89,0x0d,0x8c,0xc0,0xe3,0xa3,0x59,0x74,0xf2,0x48,0x65,0x9f,0xc6,0xd3,0x35,0x7a,0x98,0x90,0x98,0x98};

#include <zlib.h>


unsigned char* gzip_decompress(const unsigned char* compressed_data,
size_t compressed_size,
size_t* decompressed_size) {
if (!compressed_data || compressed_size == 0) {
return NULL;
}

z_stream strm;
unsigned char* decompressed_data = NULL;
size_t buffer_size = compressed_size * 4; // 初始缓冲区大小
int ret;

// 初始化zlib流
memset(&strm, 0, sizeof(strm));
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.avail_in = compressed_size;
strm.next_in = (Bytef*)compressed_data;

// 使用gzip格式解压
ret = inflateInit2(&strm, 16 + MAX_WBITS);
if (ret != Z_OK) {
fprintf(stderr, "inflateInit2 failed: %d\n", ret);
return NULL;
}

// 分配解压缓冲区
decompressed_data = (unsigned char*)malloc(buffer_size);
if (!decompressed_data) {
inflateEnd(&strm);
return NULL;
}

strm.avail_out = buffer_size;
strm.next_out = decompressed_data;

// 解压数据
do {
ret = inflate(&strm, Z_NO_FLUSH);

switch (ret) {
case Z_NEED_DICT:
case Z_DATA_ERROR:
case Z_MEM_ERROR:
fprintf(stderr, "inflate failed: %d\n", ret);
free(decompressed_data);
inflateEnd(&strm);
return NULL;
}

// 如果输出缓冲区不足,重新分配更大的缓冲区
if (strm.avail_out == 0) {
size_t old_size = buffer_size;
buffer_size *= 2;
unsigned char* new_data = (unsigned char*)realloc(decompressed_data, buffer_size);
if (!new_data) {
free(decompressed_data);
inflateEnd(&strm);
return NULL;
}
decompressed_data = new_data;

strm.next_out = decompressed_data + old_size;
strm.avail_out = buffer_size - old_size;
}
} while (ret != Z_STREAM_END);

// 设置解压后数据大小
*decompressed_size = buffer_size - strm.avail_out;

// 清理
inflateEnd(&strm);

return decompressed_data;
}


unsigned char* Part5decode()
{
for(int i=0; i<sizeof(Part5Code)/sizeof(Part5Code[0]); i++)
{
Part5Code[i] = Part5Code[i] ^ 0x98;
}
size_t decompressed_size;
unsigned char *decompressedData = gzip_decompress((unsigned char*)Part5Code, sizeof(Part5Code), &decompressed_size);
// printf("Decompressed size: %zu\n", decompressed_size);
// printf("Decompressed data: %.*s\n", (int)decompressed_size, decompressedData);

// free(part5Data);
unsigned char *finalData = malloc(sizeof(unsigned char)*90);
for(int i=6; i<2048; i+=133)
{
finalData[(i-6)/133] = decompressedData[i];
}
finalData[16] = '\0';
// free(decompressedData);
return finalData;
}


unsigned char Part6Code[] = {
0x87,0x13,0x90,0x98,0x98,0x98,0x98,0x98,0x98,0x9b,0x75,0xc3,0xf5,0xf4,0x84,0xdf,0x81,0x06,0xa3,0x63,0x04,0xab,0xee,0x77,0x56,0xf5,0xc4,0x84,0xa3,0x5c,0x0f,0x52,0x3d,0xd6,0x70,0xf5,0xfa,0x5f,0xa9,0x96,0x5d,0x55,0x41,0xa6,0x43,0x73,0x4c,0xe9,0xc4,0x5f,0x8e,0xf2,0x9b,0x45,0x34,0x77,0x6e,0xe4,0x9f,0x6f,0x3d,0x25,0x25,0x5e,0xb6,0x0d,0xfa,0xe8,0x9b,0x00,0x52,0xbd,0xcd,0xc9,0x0d,0xba,0x08,0x32,0x12,0x87,0x65,0x99,0xb0,0xda,0x39,0xf2,0x67,0xdc,0x8f,0x3d,0xd5,0x99,0x39,0xb2,0x71,0x17,0x52,0x8c,0x3c,0xc2,0x10,0xd0,0x96,0x8c,0xe8,0xdd,0x19,0x8e,0x1c,0x0f,0x01,0x45,0xe1,0x6f,0xee,0x5e,0x2f,0xd5,0x4c,0xa7,0x90,0x2c,0x17,0xed,0x6f,0x54,0x24,0x6b,0xa6,0x6b,0x2d,0x2b,0xef,0xeb,0x46,0xef,0xd6,0x97,0x17,0x17,0xe0,0xa5,0x86,0x9c,0x30,0xd9,0x6f,0xbb,0x0a,0xb3,0x1f,0x54,0xe4,0x0c,0x42,0x57,0x6d,0xc2,0xb6,0x40,0x4e,0x1f,0x9a,0x60,0x25,0x85,0x75,0xda,0xed,0xa0,0xc7,0xf3,0x6b,0x7b,0xa1,0xcc,0x5b,0x2a,0x47,0xf2,0x5f,0x4c,0xe5,0x0f,0x42,0xe1,0x46,0x11,0xc0,0x6e,0x40,0x20,0x8e,0xa1,0x3b,0x2b,0x16,0xfd,0x8c,0x32,0x70,0xe4,0x2e,0xa4,0x57,0xa7,0x6b,0x28,0xf4,0x4f,0x81,0x75,0x1d,0x31,0x05,0x7b,0xde,0x97,0x53,0xee,0x85,0x71,0x5a,0x4d,0x10,0x01,0x27,0x42,0x57,0x2a,0x70,0xad,0xe1,0x4a,0x53,0x72,0x24,0xcc,0x2f,0xde,0xed,0xf3,0x65,0x84,0xe3,0xc0,0x1e,0x61,0x34,0x3d,0x37,0xd1,0xa2,0xe7,0xa4,0x6b,0x45,0x7f,0xed,0x9d,0x72,0x5f,0xeb,0x9f,0xfa,0x21,0x0e,0x4b,0x25,0xd3,0xb3,0x7c,0x01,0xf7,0x97,0xec,0x5f,0x37,0xf3,0x11,0x17,0x4b,0x57,0xd1,0x32,0xf3,0x3c,0x9d,0xa4,0x47,0x13,0xc0,0x1e,0x6e,0x86,0x5c,0xa2,0xc0,0x92,0x2f,0x9a,0xc0,0x8e,0xcb,0x2c,0xa5,0x3f,0x73,0x2f,0x47,0x53,0xaa,0xc4,0x66,0xc2,0xc2,0x9f,0xc1,0xf3,0x3b,0x8b,0xab,0x50,0x23,0x10,0x52,0x2d,0xc4,0x61,0xee,0xfc,0x36,0xe7,0xca,0xe6,0x5b,0xe7,0x71,0xe4,0x5b,0xef,0x06,0x65,0x72,0x11,0x07,0x96,0xc5,0xf7,0x14,0xb6,0x3f,0x77,0x77,0xe5,0x23,0xe3,0xc7,0xbe,0xa5,0x43,0x43,0x2b,0xb7,0x0b,0x10,0xfc,0x4a,0x21,0x4a,0xe4,0xfc,0x26,0x37,0xaf,0x4a,0x43,0xbb,0x8c,0x6b,0xda,0x2f,0x2d,0xa6,0xf8,0xe5,0xb9,0x6c,0xad,0x7b,0x85,0x5e,0xe0,0xd5,0xe1,0xbb,0x63,0xc9,0x7b,0xbb,0x22,0x43,0x33,0x40,0x73,0x85,0x74,0x97,0x38,0x52,0x2d,0x28,0xfb,0x56,0x59,0x66,0x30,0x1b,0x25,0x95,0x27,0x76,0x32,0x4e,0x39,0xda,0xd1,0x13,0x3f,0xfc,0x8d,0xd1,0x8a,0x86,0xed,0xc4,0xb2,0xf2,0x2a,0x32,0xd1,0xc1,0xa1,0x05,0x5b,0x0e,0x60,0x24,0xb4,0xbd,0x4b,0xa1,0xa1,0x0b,0xe6,0xd4,0xd9,0x3c,0x00,0x54,0xd9,0xb7,0x82,0x85,0x87,0x83,0x84,0x0a,0x22,0x1d,0x9b,0xa5,0xce,0x2a,0xc3,0xa0,0x10,0x3c,0x29,0x71,0x3b,0xca,0xda,0xc9,0x0d,0x21,0xec,0xc9,0xcb,0x4c,0x71,0x3b,0xdb,0x01,0xe4,0xd6,0x01,0x0e,0xff,0xab,0x92,0x36,0xf3,0xb6,0x03,0x57,0x49,0x42,0xbd,0x4b,0x2d,0x32,0xbb,0x21,0x9b,0xf3,0x68,0xb4,0x09,0xa7,0x37,0xa9,0xc7,0xc6,0x2c,0x8f,0xcd,0x4e,0x5d,0x1d,0x3f,0x07,0x35,0xbb,0xcf,0x37,0x1f,0x42,0xd2,0x35,0x71,0xe2,0x3a,0xa1,0xd4,0x53,0xf9,0xe5,0x58,0x22,0xe5,0x26,0x51,0x7c,0xcd,0x56,0xe6,0x0a,0x42,0xdb,0xc9,0x4e,0x96,0x61,0xaa,0x35,0x28,0x96,0x01,0x07,0x91,0x18,0x07,0x43,0x74,0xad,0xae,0x63,0xcd,0x03,0x45,0x66,0x61,0x20,0xf2,0x2b,0x63,0xf4,0x6e,0xad,0x03,0x05,0x21,0xa7,0xf0,0x63,0x43,0xc8,0xfd,0x55,0x22,0xe8,0x79,0x5a,0x1d,0x93,0x8f,0xb6,0xc4,0x20,0x60,0x67,0x19,0x20,0x6c,0x36,0xc7,0xe4,0x4a,0x6f,0x42,0xa6,0x04,0xa4,0xcb,0x4e,0x24,0x62,0xcd,0xe9,0x71,0xcd,0x67,0xfd,0x33,0xc4,0xa7,0x60,0xd3,0xc4,0x3c,0x47,0x65,0xb3,0x64,0x86,0xf4,0x17,0x7a,0x8c,0x51,0x3f,0xd0,0x49,0x15,0xad,0x85,0x7b,0x76,0x77,0x79,0xe4,0x6a,0x34,0xcd,0x47,0x53,0xe3,0xa7,0xb5,0xef,0x6c,0x33,0x72,0xcf,0xfe,0x5c,0x0d,0x50,0x93,0xd9,0x64,0x13,0x37,0x73,0xaf,0x20,0x09,0xd6,0xe9,0xa1,0x4e,0x89,0x88,0xc7,0xa6,0x4c,0x0f,0x63,0x34,0xe8,0x78,0x48,0x76,0x7c,0x73,0x29,0x16,0xc5,0x40,0x85,0xc3,0x77,0x24,0x1a,0x0b,0x05,0x53,0x33,0x3a,0xe6,0xa1,0x62,0x75,0x5f,0xef,0x46,0x8e,0xe5,0xda,0x4f,0x42,0xc6,0xb9,0x83,0x48,0x7f,0x66,0x69,0x39,0x80,0xe7,0xab,0x42,0x65,0xe0,0xab,0x12,0x9e,0xb7,0x72,0x73,0x3f,0xe9,0xe3,0xe7,0xe4,0x93,0xef,0x28,0x2b,0x33,0xe4,0x7a,0xd3,0x0f,0xd1,0xe7,0x22,0x66,0xac,0x2e,0xe4,0x75,0x89,0xe9,0x61,0xef,0x7a,0x4a,0x77,0xaf,0xbe,0x3f,0x1f,0x23,0x52,0xc5,0x27,0x88,0xcf,0x62,0xd3,0x3c,0xf3,0x55,0x77,0x90,0x90,0x25,0x07,0x8c,0x1a,0x75,0xd7,0x80,0xe5,0xbb,0x66,0x20,0xf4,0xaf,0x81,0x73,0x12,0x37,0x0d,0x48,0x39,0x97,0x2c,0xfe,0xa4,0x64,0x13,0x1a,0xa1,0x64,0xe2,0xe5,0xb5,0x40,0x26,0xd0,0xe4,0xb7,0xcb,0x5e,0x66,0x77,0x09,0x5a,0x0d,0x1b,0xe7,0xb8,0x2c,0xff,0xcb,0xc4,0x46,0x88,0xb7,0x65,0x61,0x28,0xe0,0x71,0x1b,0x82,0x49,0xeb,0xdd,0x24,0x2e,0x31,0xf5,0x5f,0x8d,0x34,0x48,0x92,0x64,0x62,0xc2,0xaa,0x40,0x86,0x33,0x70,0x67,0x82,0x44,0x6d,0x57,0x5d,0x66,0x87,0x7b,0xfa,0xcc,0x62,0x54,0x14,0x20,0x4c,0x67,0xfd,0x0a,0x8c,0x0f,0x37,0xf3,0x15,0x7a,0x0b,0x65,0xd7,0x79,0x54,0x62,0xb3,0x03,0x22,0x26,0x06,0x58,0x65,0x25,0x7a,0xa3,0x1b,0x6b,0x86,0xaa,0xa8,0xde,0xe7,0x7b,0x8c,0xb6,0x1c,0xf3,0x5d,0xc4,0x85,0x8f,0xb6,0xc4,0x20,0xe8,0x79,0x5a,0x1d,0x93,0x8f,0xb6,0xc4,0x20,0xe8,0x79,0x7a,0x4e,0xd8,0x06,0xf7,0xa5,0xe4,0xfc,0xfe,0xf0,0xe2,0x9c,0x3f,0x43,0xf2,0x76,0x73,0xdc,0x6c,0x81,0x7d,0x1e,0x36,0xf3,0x00,0xe3,0xa8,0xe7,0x87,0xeb,0x94,0x6b,0x9d,0x54,0x8f,0xa8,0x5f,0x08,0x61,0x94,0x4b,0x48,0xa7,0xae,0x1d,0xa4,0x6b,0xb9,0xd7,0xc3,0x7b,0xae,0x67,0xc1,0x57,0x2e,0x88,0x29,0x0b,0xff,0x6e,0xb1,0x74,0xff,0xe7,0x46,0xcf,0x45,0x47,0xe4,0x36,0xd4,0x64,0x57,0x65,0xdd,0x4f,0x5b,0x5c,0xb9,0x88,0x82,0x91,0x2c,0x84,0x91,0xae,0x04,0x6a,0xb7,0x3a,0x5b,0x35,0x6f,0x75,0xa5,0x48,0xe9,0x8f,0x70,0xd1,0x23,0xff,0x29,0x07,0x47,0xce,0xb7,0x49,0xe7,0x89,0x27,0x26,0x1d,0x75,0x81,0xfa,0xe0,0xb8,0x88,0x62,0x1e,0xcf,0x94,0x2c,0xb4,0x4d,0x14,0x9c,0x3a,0x46,0x11,0xd8,0x53,0xc8,0xb8,0xac,0x88,0xa8,0xbc,0x68,0xf4,0x0e,0xa4,0x4f,0xba,0x57,0xc6,0x91,0x50,0xab,0xac,0x63,0x6b,0xad,0x8f,0xb6,0xc4,0x20,0xe8,0x79,0x5a,0x1d,0x93,0x8f,0xb6,0xc4,0x20,0x60,0xc7,0x99,0x5c,0x83,0xda,0xe4,0xb9,0x5c,0x68,0x75,0x3d,0x44,0x90,0x16,0xac,0x38,0x69,0xae,0x02,0x65,0x89,0x6d,0x47,0xd9,0x6b,0x88,0x5f,0x40,0xde,0x6b,0x68,0x03,0x33,0x0d,0xaa,0x5c,0xab,0x76,0x7c,0x52,0x67,0x2e,0x31,0x7f,0x91,0x07,0x3f,0x59,0x11,0x88,0xeb,0x20,0xd0,0x1b,0x8a,0xb9,0x4e,0xe8,0x0d,0x0e,0xe7,0x1a,0x7e,0x79,0x99,0xea,0x9b,0x7d,0x8e,0x52,0x55,0x10,0x9d,0x5c,0xa4,0x36,0x4b,0x60,0xdd,0xb7,0x7f,0x97,0x27,0xab,0x2f,0xc9,0x66,0xbc,0x7d,0xc8,0x85,0xf3,0x07,0x6c,0x29,0x65,0xb6,0xcb,0x36,0x7f,0x72,0x63,0x0f,0xf6,0x16,0x9f,0xc4,0xaf,0xf1,0xa6,0xd4,0x6d,0xa2,0x55,0x5b,0xa4,0xf7,0x48,0xe4,0x10,0x0e,0xe7,0xd0,0x6b,0x6e,0xc0,0x55,0x67,0x9e,0xb8,0xe6,0x04,0xdf,0xf7,0x10,0x55,0xdb,0x64,0x71,0x70,0x48,0x48,0x7f,0x5a,0x05,0xa9,0xfd,0xae,0xb5,0x7f,0x5a,0xc5,0xa5,0xda,0x2f,0x28,0xa7,0x4a,0xed,0xf0,0x97,0xd5,0xa2,0x2f,0xfb,0x5e,0x53,0x27,0x3f,0x6b,0x6e,0xe2,0x3b,0x74,0x16,0xb5,0x69,0x79,0xef,0xa0,0x60,0x77,0xec,0x28,0x47,0x1b,0x50,0xad,0x97,0x38,0x95,0x36,0x47,0xe3,0x30,0xa5,0x44,0x5c,0x42,0xa7,0xd7,0x75,0xbf,0xa1,0x63,0x0c,0x49,0x07,0xce,0x4c,0x8a,0x35,0x6c,0x03,0x78,0x89,0xbb,0x45,0xf4,0x35,0xf7,0x58,0x81,0xc2,0x57,0x6b,0xc4,0xa5,0xd7,0x83,0x66,0x43,0x35,0x63,0x7d,0xfe,0x65,0xa7,0xf7,0x60,0x47,0x16,0x4e,0x5b,0xe4,0xd1,0xed,0x67,0x13,0x1e,0x67,0x05,0xc3,0x36,0x47,0x73,0x5e,0xe3,0x0b,0x8d,0x67,0x96,0xe0,0x43,0x68,0xf7,0x29,0x76,0x97,0x58,0x9e,0x32,0x86,0x47,0xc5,0x73,0x31,0xf6,0x47,0x75,0x31,0x86,0x5f,0xa5,0xf6,0x40,0xef,0xb8,0xe7,0x0c,0x2d,0x6f,0xe3,0x50,0xdf,0x52,0x96,0xf3,0xa6,0x99,0xa9,0xca,0x27,0xaf,0xf0,0xe5,0x26,0x98,0x16,0xc8,0xe7,0x26,0x06,0xb7,0xa0,0x2c,0x03,0x5c,0x6e,0xbe,0x77,0x96,0xf3,0xe5,0x9a,0x12,0x5c,0xd6,0xa6,0x54,0x30,0x90,0xfa,0x07,0x27,0xf6,0x4c,0x47,0x12,0x5a,0x04,0x67,0x3c,0xa9,0x46,0x18,0xed,0x26,0x9d,0x66,0xdf,0x6d,0xd5,0x72,0x57,0x6f,0x67,0x81,0x72,0xa7,0xd1,0x65,0xab,0x4c,0xe6,0x16,0x6e,0x1f,0x6f,0x67,0x39,0xdb,0x67,0xb7,0xe2,0x32,0x5f,0x27,0x67,0x42,0x00,0x07,0x1e,0xd2,0x18,0xa1,0x78,0xe0,0xc4,0x4d,0x22,0x1c,0xa4,0x0a,0xbc,0xe1,0xae,0xb5,0xf1,0x6a,0x84,0x52,0x0f,0x2c,0xda,0xd1,0x8b,0x7a,0x90,0x0f,0x8c,0x2d,0xca,0xaa,0x11,0x0b,0x0d,0xe8,0xef,0xd1,0x53,0xd2,0xe9,0x8a,0x5f,0xc6,0x5c,0x0a,0xdc,0xc6,0x02,0x53,0x7c,0xff,0x7d,0x14,0x0c,0x48,0x6a,0xf2,0xc9,0x0a,0xd3,0x6b,0xb0,0x06,0x57,0x8e,0xaa,0x12,0x3e,0xbc,0x68,0x75,0xc3,0x4d,0x1b,0x1c,0x42,0x3f,0xbd,0xc1,0xcd,0x7d,0x9d,0xd1,0x51,0xf1,0x72,0x9a,0xd2,0x32,0xea,0xce,0x09,0x8a,0x3d,0xf4,0xee,0x99,0xd3,0xf4,0xa1,0x91,0xe3,0xf2,0x14,0x33,0xbc,0x15,0xd4,0x95,0x84,0x85,0x0e,0x1e,0xbf,0xfa,0xbc,0x26,0xa6,0x6e,0x48,0x5c,0x58,0x49,0x29,0xb9,0xf4,0x86,0x05,0x00,0x09,0x1e,0xdd,0xc2,0xb2,0x5e,0x3e,0x08,0xac,0xa2,0xe6,0xf4,0xe8,0xf8,0xc4,0xa2,0xae,0xaa,0xea,0xe4,0xe0,0xc2,0x02,0x86,0x80,0x84,0x87,0x0e,0x78,0x80,0xd8,0x0c,0x91,0x70,0x7f,0x17,0x9c,0xdc,0xf5,0x09,0x67,0x87,0x81,0x75,0x37,0xbc,0xfc,0xd5,0xde,0x5e,0x18,0x50,0xc0,0xe9,0x5e,0x34,0xfd,0x53,0xa1,0x98,0xb1,0xc9,0x54,0xd3,0xb1,0xa1,0x0f,0xb8,0x32,0x29,0xfb,0x20,0xb8,0x09,0x56,0xd1,0x3d,0x3a,0x0a,0x58,0x0d,0x7c,0x68,0x03,0xac,0xc3,0xb4,0xca,0xb5,0xa5,0x0c,0x18,0xc3,0x1a,0xc9,0xa2,0x06,0xba,0xf8,0x17,0xb6,0x28,0x1b,0xba,0xcb,0x1f,0x08,0xc8,0xc4,0x50,0xf2,0x6a,0xb4,0xfe,0xd5,0xad,0xa1,0x9d,0x31,0xc4,0xc6,0xcb,0x1c,0x21,0xc4,0xd1,0xb0,0x30,0x61,0x1a,0x3a,0xf2,0x93,0xae,0x4b,0xf4,0xb1,0x05,0xd1,0xdc,0x4a,0x91,0xbc,0x3c,0xeb,0x20,0x49,0x9a,0xaa,0x34,0xb1,0x21,0x00,0xda,0xda,0xfa,0xb9,0x1f,0xb3,0xad,0xc1,0xcb,0x55,0x0a,0xdf,0x8d,0x2d,0x00,0x56,0x7f,0x00,0x14,0x1c,0x53,0xcc,0xbd,0xbb,0x8b,0xdf,0x02,0xb2,0xfc,0xac,0xca,0xbb,0x76,0x80,0xd1,0x92,0xeb,0xe1,0x04,0x48,0x0c,0xe1,0x64,0xf6,0xd4,0x39,0x38,0x7e,0x15,0x91,0x8d,0x0c,0x8c,0xc5,0x9d,0x31,0x1c,0xc2,0x51,0x49,0x66,0x95,0x94,0x16,0xdd,0x50,0xa2,0x8d,0xb2,0x13,0x5b,0x4c,0xdb,0x82,0x2f,0xbf,0xff,0x4b,0xe9,0xdc,0x72,0xaf,0x03,0xac,0xf3,0x5d,0xcb,0x14,0x9c,0x24,0xa4,0x2b,0xe0,0xb1,0xcd,0x21,0xdd,0xa6,0x8e,0x50,0x26,0x1d,0xe4,0x4f,0x5b,0x66,0x58,0x71,0x04,0x89,0x58,0x57,0x7d,0x9d,0xd6,0x77,0xec,0xb6,0x92,0x58,0x07,0xd1,0x83,0xd8,0x7e,0xef,0x92,0x70,0x05,0x56,0x2f,0x99,0x60,0x2b,0x8e,0xfb,0x60,0x6d,0xef,0x24,0xef,0x98,0xa5,0x74,0x3f,0x56,0xeb,0x75,0x5b,0x66,0x12,0x77,0x67,0xe9,0xfc,0x76,0x3d,0xd8,0x97,0x63,0xb5,0x78,0x8f,0x31,0x85,0x56,0x8a,0x19,0x86,0x6e,0xa5,0xbf,0x88,0x63,0x27,0xe9,0x40,0x27,0x99,0xc3,0x99,0xe7,0x96,0x65,0x17,0xbb,0xeb,0xf7,0xfc,0x85,0xf7,0x6b,0x29,0x84,0x78,0x62,0x77,0x7d,0x20,0x18,0x54,0x25,0x8e,0x7c,0xf9,0x27,0x9d,0x94,0xc3,0x88,0x26,0x67,0x18,0x4b,0x50,0x24,0xbe,0x4e,0x6d,0x6f,0x29,0xc4,0x7e,0x42,0x7f,0x5f,0x27,0xd4,0x6d,0x1b,0x48,0x67,0xa2,0x0e,0x59,0x57,0xdf,0x4b,0x24,0x66,0x81,0xfc,0xa7,0x3b,0x1d,0x2e,0x04,0xaf,0x1c,0xe5,0xb1,0x18,0xc7,0xa7,0xd7,0xe9,0x62,0xe8,0x10,0xfb,0x56,0x07,0xa7,0x4e,0x60,0x84,0x3f,0x17,0x1e,0xc0,0x7e,0x7f,0x53,0x57,0x69,0x93,0x04,0x86,0x26,0x67,0x18,0x87,0x7a,0xb6,0xa0,0x67,0x6d,0x6d,0xba,0x3f,0x1f,0x77,0xe7,0x78,0xe2,0x56,0x07,0x87,0x67,0xd7,0x88,0xe3,0x67,0x68,0x9f,0x9b,0x83,0xa0,0xe7,0xc6,0x67,0x8a,0x3f,0xef,0xa2,0xb7,0x70,0x3c,0xe7,0x0d,0x4b,0x6f,0x1d,0xc1,0x26,0x58,0x61,0x6b,0x6b,0x61,0x9e,0xfa,0xa7,0xa7,0x04,0x56,0xdf,0xa2,0x2d,0x67,0xc3,0xfc,0x46,0xbb,0x68,0x23,0x59,0xa2,0xe7,0x80,0x31,0x46,0x86,0xe7,0x65,0x4e,0x69,0xb3,0xf0,0x4b,0x5b,0xe6,0xee,0x6d,0x8e,0x6d,0x77,0xbb,0x6e,0x14,0x01,0xed,0x66,0x8c,0x56,0x3d,0x4a,0x73,0xc7,0x5f,0x71,0xf8,0x85,0x64,0x98,0x01,0x6b,0x9f,0xe2,0xa0,0x57,0xce,0x46,0xff,0xea,0x7f,0xd5,0x42,0x67,0xaf,0x3f,0x1f,0x65,0x74,0xa2,0x4d,0x1f,0xf7,0x3a,0x37,0x6b,0x28,0xe2,0x40,0xff,0x62,0x6f,0x2b,0x65,0x7c,0x6d,0x98,0xea,0x06,0x4f,0xf7,0x4b,0x5b,0xa6,0x37,0xfd,0xe7,0xed,0xe7,0x66,0x6b,0x37,0x11,0x2e,0x57,0x67,0xcc,0x9a,0xe5,0x23,0x1b,0x46,0x56,0x4d,0x06,0xd3,0x6e,0xc9,0x65,0xd1,0x42,0x29,0xd7,0xb9,0xeb,0x67,0x56,0xe7,0x66,0x4c,0x3b,0x72,0x27,0xa1,0x57,0x85,0xa8,0x61,0x85,0x36,0x5b,0xc3,0x62,0x77,0x38,0xa7,0xed,0x48,0x7c,0x4e,0x03,0x70,0x67,0x9b,0x6e,0x70,0xd7,0x45,0xc0,0xa6,0x98,0x98
};
#define _GNU_SOURCE
#include <sys/syscall.h>
#include <unistd.h>
int Part6decode()
{
for(int i=0; i<sizeof(Part6Code)/sizeof(Part6Code[0]); i++)
{
Part6Code[i] = Part6Code[i] ^ 0x98;
}
size_t decompressed_size;
unsigned char *decompressedData = gzip_decompress((unsigned char*)Part6Code, sizeof(Part6Code), &decompressed_size);
int fd = syscall(SYS_memfd_create, "mem", 0);
write(fd, decompressedData, decompressed_size);

// 执行
char *argv[] = {NULL};
char *envp[] = {NULL};
fexecve(fd, argv, envp);
perror("fexecve");
return 1;
}



int main()
{
char *decodedPart1 = base64decode(part1Code);
printf("%s", decodedPart1);
free(decodedPart1);
char *decodedPart2 = part2Decoded();
printf("%s", decodedPart2);
free(decodedPart2);
char *encryptedPart3 = "e3d08f470b061df1cca94eb68adaffb011f1f19f26770496494033f497302ffe";
char *decryptedPart3 = part3_AES_decrypt(encryptedPart3);
printf("%s", decryptedPart3);
free(decryptedPart3);
unsigned char *part5Data = Part5decode();
printf("%s", part5Data);
fflush(stdout);
free(part5Data);
Part6decode();

return 0;
}