LOADING

加载过慢请开启缓存 浏览器默认开启

2025TPCTF_Re Writeup

linuxpdf

pdf里运行Linux,010打开发现有一个base64解密函数,一些文件名以及文件对应的base64编码,通过正则匹配 ”文件名”: “文件内容“ 获取文件名和文件内容,直接用脚本导出。随便拿个文件看看信息,发现是zlib格式的压缩文件,用python的zlib库解压就行,查看解压出来有许多二进制文件,有一百多个有点不好看,于是寻找看是不是有elf可执行文件,写个函数遍历一下(脚本是AI写的)。

![image (3)](https://huanghunr-blog.oss-cn-hangzhou.aliyuncs.com/img/image (3).png)

import os
import re
import base64
import zlib

def extract_and_decode(filename):
    # 以二进制方式读取文件内容
    with open(filename, 'rb') as f:
        content = f.read()

    try:
        # 尝试 UTF-8 解码,不可解码时忽略错误字符
        text_content = content.decode('utf-8', errors='ignore')
    except UnicodeDecodeError:
        print("文件解码失败,可能包含非 UTF-8 编码数据。")
        return

    # 正则匹配 "字符串1":"字符串2"
    pattern = r'"(.*?)": "(.*?)"'
    matches = re.findall(pattern, text_content)

    for filename, encoded_data in matches:
        try:
            # Base64 解码
            decoded_data = base64.b64decode(encoded_data)

            # 将解码内容以二进制方式写入对应文件
            f = open(rf"outdata/{filename.replace('/', '_').replace('\\', '_')}",'wb')
            de = zlib.decompress(decoded_data)
            f.write(decoded_data)

            print(f"已创建文件: {filename}")
        except Exception as e:
            print(f"处理 {filename} 时出错: {e}")


def dedata():
    input_dir = "outdata"  # 你的 zlib 文件所在的文件夹
    output_dir = "outdata\\dec"  # 解压后的文件存放位置

    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)

    # 遍历 zlib 文件
    for filename in os.listdir(input_dir):
        input_path = os.path.join(input_dir, filename)
        output_path = os.path.join(output_dir, filename + ".bin")  # 你可以改成合适的扩展名

        try:
            # 读取文件内容
            with open(input_path, "rb") as f:
                compressed_data = f.read()

            # 尝试解压
            decompressed_data = zlib.decompress(compressed_data)

            # 写入解压后的文件
            with open(output_path, "wb") as f:
                f.write(decompressed_data)

            print(f"解压成功: {filename} -> {output_path}")

        except zlib.error:
            print(f"跳过文件(解压失败): {filename}")
        except Exception as e:
            print(f"其他错误: {filename} - {e}")

    print("所有文件处理完成!")

def iself():
    input_dir = "outdata\\dec"  # 解压后数据的文件夹

    for filename in os.listdir(input_dir):
        input_path = os.path.join(input_dir, filename)

        try:
            with open(input_path, "rb") as f:
                fdata = f.read()
                if b"ELF" in fdata:
                    print(input_path)
        except:
            print("error")
if __name__ == "__main__":
    input_file = "linux.pdf"
    extract_and_decode(input_file)
    dedata()
    iself()
    
"""
......
outdata\dec\kernel-riscv64.bin.bin
outdata\dec\root_files_0000000000000002.bin
outdata\dec\root_files_0000000000000003.bin
outdata\dec\root_files_0000000000000039.bin
outdata\dec\root_files_000000000000003c.bin
outdata\dec\root_files_000000000000003d.bin
outdata\dec\root_files_000000000000003e.bin
outdata\dec\root_files_000000000000003f.bin
outdata\dec\root_files_0000000000000040.bin
outdata\dec\root_files_0000000000000041.bin
outdata\dec\root_files_0000000000000042.bin
outdata\dec\root_files_0000000000000043.bin
outdata\dec\root_files_0000000000000044.bin
outdata\dec\root_files_0000000000000045.bin
outdata\dec\root_files_0000000000000046.bin
outdata\dec\root_files_0000000000000047.bin
outdata\dec\root_files_0000000000000048.bin
outdata\dec\root_files_000000000000004a.bin
outdata\dec\root_files_000000000000004b.bin
outdata\dec\root_files_000000000000004c.bin
outdata\dec\root_files_000000000000004d.bin
outdata\dec\root_files_000000000000004e.bin
outdata\dec\root_files_000000000000004f.bin
outdata\dec\root_files_0000000000000050.bin
outdata\dec\root_files_0000000000000051.bin
outdata\dec\root_files_0000000000000052.bin
outdata\dec\root_files_0000000000000089.bin
outdata\dec\root_files_00000000000000a6.bin
outdata\dec\root_files_00000000000000a7.bin
outdata\dec\root_files_00000000000000a9.bin
error
error
error
outdata\dec\root_files_00000000000000aa.bin
"""

最后发现在root_files_00000000000000a9.bin中有flag的逻辑。

![image (4)](https://huanghunr-blog.oss-cn-hangzhou.aliyuncs.com/img/image (4).png)

![image (5)](https://huanghunr-blog.oss-cn-hangzhou.aliyuncs.com/img/image (5).png)

MD5的特征值。

逻辑大概就是从前往后比较flag后n位(n从28到1,flag总共28字节)生成的MD5值。

爆破一下就行,注意密文中每组哈希值间有0作为分隔符,所以17字节为一组MD5。

import hashlib

hash = [0x38, 0xF8, 0x8A, 0x3B, 0xC5, 0x70, 0x21, 0x0F, 0x8A, 0x8D, 0x95, 0x58, 0x5B, 0x46, 0xB0, 0x65,
    0x00, 0x83, 0x05, 0x5A, 0xE8, 0x0C, 0xDC, 0x8B, 0xD5, 0x93, 0x78, 0xB8, 0x62, 0x8D, 0x73, 0x3F,
    0xCB, 0x00, 0xFA, 0x7D, 0xAF, 0xFB, 0xD7, 0xAC, 0xEC, 0x13, 0xB0, 0x69, 0x5D, 0x93, 0x5A, 0x04,
    0xBC, 0x0F, 0x00, 0xC2, 0x9C, 0xC0, 0xFD, 0x38, 0x01, 0xC7, 0xFD, 0xD3, 0x15, 0xC7, 0x82, 0x99,
    0x9B, 0xD4, 0xCB, 0x00, 0x2B, 0xA2, 0xD0, 0x1A, 0xF1, 0x2D, 0x9B, 0xE3, 0x1A, 0x2B, 0x44, 0x32,
    0x3C, 0x1A, 0x4F, 0x47, 0x00, 0xDD, 0xEE, 0xBA, 0xF0, 0x02, 0x52, 0x7A, 0x9E, 0xAD, 0x78, 0xBD,
    0x16, 0x68, 0x45, 0x73, 0xCC, 0x00, 0xBF, 0x95, 0xB8, 0x99, 0x34, 0xA1, 0xB5, 0x55, 0xE1, 0x09,
    0x0F, 0xEC, 0xDF, 0xD3, 0xDA, 0x9F, 0x00, 0xB6, 0x42, 0x2C, 0x30, 0xB0, 0x29, 0x38, 0x53, 0x5F,
    0x8E, 0x64, 0x8D, 0x60, 0xA8, 0x7B, 0x94, 0x00, 0x08, 0xC1, 0xB7, 0x66, 0x43, 0xAF, 0x8D, 0xD5,
    0x0C, 0xB0, 0x6D, 0x7F, 0xDD, 0x3C, 0xF8, 0xED, 0x00, 0x42, 0xD6, 0x97, 0x19, 0xF9, 0x70, 0x88,
    0xF0, 0x65, 0x40, 0xF4, 0x12, 0xDC, 0x17, 0x06, 0xFB, 0x00, 0xA1, 0xF2, 0x3D, 0xA6, 0x16, 0x15,
    0x40, 0x0E, 0x7B, 0xD9, 0xEA, 0x72, 0xD6, 0x35, 0x67, 0xEB, 0x00, 0x4E, 0x24, 0x6F, 0x0A, 0x5D,
    0xD3, 0xCE, 0x59, 0x46, 0x5F, 0xF3, 0xD0, 0x2E, 0xC4, 0xF9, 0x84, 0x00, 0xB8, 0xCF, 0x25, 0xF9,
    0x63, 0xE8, 0xE9, 0xF4, 0xC3, 0xFD, 0xDA, 0x34, 0xF6, 0xF0, 0x1A, 0x35, 0x00, 0x2D, 0x98, 0xD8,
    0x20, 0x83, 0x5C, 0x75, 0xA9, 0xF9, 0x81, 0xAD, 0x4D, 0xB8, 0x26, 0xBF, 0x8E, 0x00, 0x70, 0x2E,
    0xAD, 0x08, 0xA3, 0xDD, 0x56, 0xB3, 0x13, 0x4C, 0x7C, 0x38, 0x41, 0xA6, 0x52, 0xAA, 0x00, 0xD2,
    0xD5, 0x57, 0xB6, 0x13, 0x66, 0x2B, 0x92, 0xF3, 0x99, 0xD6, 0x12, 0xFB, 0x91, 0x59, 0x1E, 0x00,
    0xE4, 0x42, 0x2B, 0x63, 0x20, 0xED, 0x98, 0x9E, 0x7E, 0x3C, 0xB9, 0x7F, 0x36, 0x9C, 0xBA, 0x38,
    0x00, 0x71, 0x80, 0x35, 0x86, 0xC6, 0x70, 0x59, 0xDD, 0xA3, 0x25, 0x25, 0xCE, 0x84, 0x4C, 0x50,
    0x79, 0x00, 0x83, 0xB3, 0x71, 0x80, 0x1D, 0x0A, 0xDE, 0x07, 0xB5, 0xC4, 0xF5, 0x1E, 0x8C, 0x62,
    0x15, 0xE2, 0x00, 0xB0, 0xD1, 0xB4, 0x88, 0x5B, 0xC2, 0xFD, 0xC5, 0xA6, 0x65, 0x26, 0x69, 0x24,
    0x48, 0x6C, 0x5F, 0x00, 0x79, 0x2C, 0x9E, 0x7F, 0x05, 0xC4, 0x07, 0xC5, 0x6F, 0x3B, 0xEC, 0x4C,
    0xA7, 0xE5, 0xC1, 0x71, 0x00, 0x38, 0x55, 0xE5, 0xA5, 0xBB, 0xC1, 0xCB, 0xE1, 0x8A, 0x6E, 0xAB,
    0x5D, 0xD9, 0x7C, 0x06, 0x3C, 0x00, 0x88, 0x6D, 0x45, 0xE0, 0x45, 0x1B, 0xBB, 0xA7, 0xC0, 0x34,
    0x1F, 0xE9, 0x0A, 0x95, 0x4F, 0x34, 0x00, 0x3A, 0x43, 0x7C, 0xBE, 0x65, 0x91, 0xEA, 0x34, 0x89,
    0x64, 0x25, 0x85, 0x6E, 0xAE, 0x7B, 0x65, 0x00, 0x34, 0x30, 0x49, 0x67, 0xA0, 0x67, 0x30, 0x8A,
    0x76, 0x70, 0x1F, 0x05, 0xC0, 0x66, 0x85, 0x51, 0x00, 0xD6, 0xAF, 0x7C, 0x4F, 0xED, 0xCF, 0x2B,
    0x67, 0x77, 0xDF, 0x8E, 0x83, 0xC9, 0x32, 0xF8, 0x83, 0x00, 0xDF, 0x88, 0x93, 0x1E, 0x7E, 0xEF,
    0xDF, 0xCC, 0x2B, 0xB8, 0x0D, 0x4A, 0x4F, 0x57, 0x10, 0xFB, 0x00, 0xCB, 0x0F, 0xC8, 0x13, 0x75,
    0x5A, 0x45, 0xCE, 0x59, 0x84, 0xBF, 0xBA, 0x15, 0x84, 0x7C, 0x1E, 0x00]

datalist = [hash[i*17:17*(i+1):] for i in range(len(hash))] #每十七个作为一组哈希值,末尾的0是分隔符

flag ="}"
for i in datalist[::-1]:
    tmp=""
    for j in i: # 先把哈希值拼成一个字符串
        strtmp = hex(j)[2::]
        if len(strtmp) <2:
            strtmp = "0"*(2-len(strtmp)) + strtmp #补0
        tmp+= strtmp

    for char in range(32, 127):# 遍历所有可打印字符
        has = hashlib.md5((chr(char) + flag).encode()).hexdigest() #拼接字符到flag中生成md5值
        print(has,chr(char)+flag)
        if tmp.rstrip("0") == has: #去掉结尾的0(分隔符),判断相等,如果相等拼接到flag中生成下一组hash
            flag = chr(char) + flag

print(flag)
TPCTF{mag1c_RISC-V_linux-PDF}

chase

用fceux进行调试,amr search在吃豆的时候寻找改变的值,就可以发现0x84的数据是用于存储当前吃豆的数量,0x85好像是当前的关卡,是从0开始的。

image

用hexeditor修改值可以发现0x83就是目标的豆子数,直接修改关卡值好像会被检测输出hacker,于是继续修改豆子数来逐个通关,通过第五关后可以拿到第一段flag。

image

得到第一部分flag

在ppu viewer中看到了第三段flag

c4a6dff380cf02c5b1b3e31fffbd1b0d

第三部分

在PPU viewer页面还可以看到字符表。 查询资料可知,NES 游戏中Tile是游戏中所使用一个图案块。游戏的一个画面就是由多个Tile组成的,每个Tile都有一个索引值便于调用显示。

在PPU viewer页面可以看到每个Tile的索引值(左下角)。

image(1)

例如26就是上面F的值。。。,直接在010中搜索FLAG的Tile值(26 2C 21 27 )就可以找到对应FLAG这四个字符的tile值出现的位置,那么这个位置大概率就是flag在页面上出现的位置,提取下来,创建字符映射表映射回去就行。注意数字有两个表。

image(2)

table = list(range(32,91)) # 获取!~Z的ASCII码
table1 =[123,125,95]  # 添加最后的{}_

table.extend(table1)

# for i in table:
#     print(chr(i),end='')
# print()

data = [
    0x26, 0x2C, 0x21, 0x27, 0x00, 0x30, 0x34, 0x0E, 0xD2, 0x00, 0x26, 0x2F, 0x32, 0x00, 0x39, 0x2F,
    0x35, 0x00, 0x29, 0x33, 0x00, 0x01, 0x12, 0xA4, 0x00, 0x01, 0x18, 0x30, 0x2C, 0x21, 0x39, 0xD1,
    0x2E, 0xD9, 0x3D, 0xD6, 0x20, 0x2D, 0xD3, 0x33, 0x3D, 0x00, 0x01, 0x9A, 0xBD, 0xAD, 0xAD, 0x6D,
    0x00, 0x01, 0x03, 0xB9, 0xAD, 0xAD, 0x6E, 0x00, 0x01, 0x03, 0xB9, 0xAD, 0xAD, 0x6E, 0x00, 0x01,
    0x03, 0x0D, 0x01, 0x03, 0x00, 0x01, 0x10, 0x00, 0x01, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1C,
    0x2C, 0x3C, 0x0F, 0x12, 0x22, 0x32, 0x0F, 0x14, 0x24, 0x34, 0x0F, 0x11, 0x32, 0x30, 0x0F, 0x1C,
    0x2C, 0x3C, 0x0F, 0x09, 0x27, 0x38, 0x0F, 0x11, 0x21, 0x31, 0x0F, 0x11, 0x32, 0x30, 0x0F, 0x11,
    0x21, 0x31, 0x0F
] #010提取出来的以flag(26,2c,21,27)开头的字节,这里为第二组数据

dict = {i:j for i,j in zip(range(0x0,0x3E),table)} # 创建索引表1
dict2 = {i:j for i,j in zip(range(0xD0,0xDB),range(48,58))} # 额外的数字表

flag =""
for i in data:  # 获取映射值
    if(i>=0xD0 and i<=0xD9):
        flag+= chr(dict2[i])
    if(i>0x3E):
        continue
    flag+=chr(dict[i])
print(flag)

"""
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_
FLAG PT.2 FOR YOU IS !2 !8PLAY1N9_6@M3S_ ! !# !# !#-!# !0 ! /////<L}/2BR/4DT/1RP/<L}/)GX/1AQ/1RP/1AQ/

"""

解密得到flag的第二部分。

PLAY1N9_6@M3S_

最后的flag: TPCTF{D0_Y0U_L1KE_PLAY1N9_6@M3S_ON_Y0UR_N3S?}

magicfile

文件一般存储一个特征值来确定文件类型。linux通过一个libmagic.so来检测文件类型。文件类型被存储在一个magic文件内(magicfile),里面记录了文件类型(要比较的字节)和要比较的字节地址偏移,以及比较的数据类型。检测原理就是读取文件内容然后根据偏移的地址来获取数据与magic存储的内容进行比较。

本题模拟了libmagic.so的原理,我们输入的flag被作为文件内容进行文件检查。即flag与magic内的内容进行比较,正确则输出congratulations。我们的flag为48字节,如果直接存储在一个类型里那么就可以直接字符串找到flag,所以我们的flag一定是被分块了,而且是单字节。所以我们只需要挨个读取magic文件里比较的内容就行了。本题的magicfile已经被保存在数据段了,所以实现了自定义magic的比较。

image-20250318213438858

首先我们需要了解magic文件是怎么存储信息的。我们在github上可以找到libmagic的源码,查看magic结构体

struct magic {
    /* Word 1 */
    uint16_t cont_level;	/* level of ">" */
    uint8_t flag;
    uint8_t factor
    /* Word 2 */
    uint8_t reln;		/* relation (0=eq, '>'=gt, etc) */
    uint8_t vallen;		/* length of string value, if any */
    uint8_t type;		/* comparison type (FILE_*) */
    uint8_t in_type;	/* type of indirection */
    /* Word 3 */
    uint8_t in_op;		/* operator for indirection */
    uint8_t mask_op;	/* operator for mask */
    uint8_t cond;		/* conditional type */
    uint8_t factor_op;
    /* Word 4 */
    int32_t offset;		/* offset to magic number */
    /* Word 5 */
    int32_t in_offset;	/* offset from indirection */
    /* Word 6 */
    uint32_t lineno;	/* line number in magic file */
    /* Word 7,8 */
    union {
        uint64_t _mask;	/* for use with numeric and date types */
        struct {
            uint32_t _count;	/* repeat/line count */
            uint32_t _flags;	/* modifier flags */
        } _s;		/* for use with string types */
    } _u;
    /* Words 9-24 */
    union VALUETYPE value;	/* either number or string */
    /* Words 25-40 */
    char desc[MAXDESC];	/* description */
    /* Words 41-60 */
    char mimetype[MAXMIME]; /* MIME type */
    /* Words 61-62 */
    char apple[8];		/* APPLE CREATOR/TYPE */
    /* Words 63-78 */
    char ext[64];		/* Popular extensions */
};

value节点中是需要进行比较的内容,看一下value的定义,联合体的大小是最大类型的大小

union VALUETYPE {
    uint8_t b;
    uint16_t h;
    uint32_t l;
    uint64_t q;
    uint8_t hs[2];	/* 2 bytes of a fixed-endian "short" */
    uint8_t hl[4];	/* 4 bytes of a fixed-endian "long" */
    uint8_t hq[8];	/* 8 bytes of a fixed-endian "quad" */
    char s[MAXstring];	/* the search string or regex pattern */
    unsigned char us[MAXstring];
    uint64_t guid[2];
    float f;
    double d;
};

计算一下就可以知道magic结构体大小是376byte。我们可以遍历所有magic结构体,提取所有value位char的内容,flag估计就在里面。。看magic_load的magicfile变量可以看到程序的magic文件存在地址0x21004,后面的magiclen是magic文件大小。

image-20250318231837447

最后的flag要猜一下前面是个Y,最后结果是TPCTF{YoU_AR3_SO_5m@R7_TO_cRACk_Th1$_m@9iC_f1le}


data = open("magicfile_c970e3503feebf8274571f09d27cdd2f", "rb").read()
data = data[0x21004:][376:0x116f9f8]

res =''

for i in range(0,0x116f9f8,376):
    value = data[i:i+376:][32:96:].decode().replace(chr(0),'')
    res += value
    if value == '}':break

print(res)
# TPCTF{YoU_AR3_SO_5m@R7_TO_cRACk_Th1$_m@9iC_f1le}

下面是大佬的脚本参考复现

下面这些是libmagic编译时包含的文件,可以查看特征

$ strings magicfile_c970e3503feebf8274571f09d27cdd2f | grep File:
@(#)$File: magic.c,v 1.115 2021/09/20 17:45:41 christos Exp $
@(#)$File: apprentice.c,v 1.309 2021/09/24 13:59:19 christos Exp $
@(#)$File: encoding.c,v 1.32 2021/04/27 19:37:14 christos Exp $
@(#)$File: compress.c,v 1.129 2020/12/08 21:26:00 christos Exp $
@(#)$File: print.c,v 1.89 2021/06/30 10:08:48 christos Exp $
@(#)$File: fsmagic.c,v 1.81 2019/07/16 13:30:32 christos Exp $
@(#)$File: funcs.c,v 1.122 2021/06/30 10:08:48 christos Exp $
@(#)$File: cdf_time.c,v 1.19 2019/03/12 20:43:05 christos Exp $
@(#)$File: readcdf.c,v 1.74 2019/09/11 15:46:30 christos Exp $
@(#)$File: buffer.c,v 1.8 2020/02/16 15:52:49 christos Exp $
@(#)$File: softmagic.c,v 1.315 2021/09/03 13:17:52 christos Exp $
@(#)$File: ascmagic.c,v 1.109 2021/02/05 23:01:40 christos Exp $
@(#)$File: is_csv.c,v 1.6 2020/08/09 16:43:36 christos Exp $
@(#)$File: is_json.c,v 1.15 2020/06/07 19:05:47 christos Exp $
@(#)$File: is_tar.c,v 1.44 2019/02/20 02:35:27 christos Exp $
@(#)$File: readelf.c,v 1.178 2021/06/30 10:08:48 christos Exp $
@(#)$File: der.c,v 1.21 2020/06/15 00:58:10 christos Exp $
@(#)$File: cdf.c,v 1.120 2021/09/24 13:59:19 christos Exp $
data = open("magicfile_c970e3503feebf8274571f09d27cdd2f", "rb").read()
data = data[0x21004:][376:0x116f9f8]

MAGIC = [ #定义的结构体,理解更加清晰
  [2, "cont_level"],
  [1, "flag"],
  [1, "factor"],
  
  [1, "reln"],
  [1, "vallen"],
  [1, "type"],
  [1, "intype"],
  
  [1, "in_op"],
  [1, "mask_op"],
  [1, "cond"],
  [1, "factor_op"],
  
  [4, "offset"],
  [4, "in_offset"],
  [4, "lineno"],
  [8, "union"],
  
  [64, "value"],
  [64, "desc"],
  [80, "mimetype"],
  [8, "apple"],
  [64, "ext"],
  
  [64, "idk_whats_this"],
]

flag = b""

for offset in range(48625):
    c = data[376 * offset: 376 * (offset + 1)]
    
    print("===", offset)
    cur = 0
    for a, b in MAGIC:
        d = c[cur:cur+a] if sum(c[cur:cur+a]) else b"(null)"
        if b in ["in_op", "mask_op", "type", "vallen"]: d = c[cur:cur+a][0]
        if b in ["cont_level", "lineno", "offset"]: d = int.from_bytes(c[cur:cur+a], "little")
        if b in ["value", "mimetype"]: d = d.rstrip(b"\\x00")
        if d == b"(null)": d = d.decode()
        print(str(b).ljust(16, " "), d)
        cur += a
        
        if b == "value" and d != "(null)": flag += d
    print("\\n\\n")
    assert cur == 376
    
    if b"Congratulations" in c: break

print(flag[-48:])

# TPCTF{YoU_AR3_SO_5m@R7_TO_cRACk_Th1$_m@9iC_f1le}

stonegame

解包后用pycdas拿到pocode码,用AI写成python代码

import os
import random
import sys
from time import sleep


# DigitalDisplayGame 类: 游戏逻辑
class DigitalDisplayGame:
    def __init__(self, max_stones):
        self.max_stones = max_stones
        self.stones = [max_stones] * 7  # 初始化7个段,每个段有max_stones个石头
        self.current_player = 0  # 0表示玩家,1表示AI

    def is_valid_move(self, move):
        # 检查玩家的移动是否合法
        return all(0 <= m <= self.max_stones for m in move)

    def make_move(self, move):
        # 执行玩家的移动
        for i in range(7):
            self.stones[i] -= move[i]

    def switch_player(self):
        # 切换当前玩家
        self.current_player = 1 - self.current_player


# MonteCarloAI 类: 模拟AI的决策
class MonteCarloAI:
    def __init__(self, game, iterations=2000):
        self.game = game
        self.iterations = iterations

    def get_best_move(self):
        # 这里仅作为一个示例,AI 随机选择一个合法的动作
        valid_moves = []
        for i in range(7):
            if self.game.stones[i] > 0:
                move = [0] * 7
                move[i] = random.randint(1, self.game.stones[i])
                if self.game.is_valid_move(move):
                    valid_moves.append(move)
        return random.choice(valid_moves) if valid_moves else [0] * 7


# GameUI 类: 游戏界面和用户输入
class GameUI:
    def __init__(self):
        self.max_stones = self.max_stones = random.randint(0,100)
        self.reset_game()

    def reset_game(self):
        self.game = DigitalDisplayGame(self.max_stones)
        self.ai = MonteCarloAI(self.game, iterations=2000)
        self.current_player = 0

    def display_game(self):
        os.system('clear' if os.name == 'posix' else 'cls')
        print("\nDigital Display Game\n")
        print("\nCurrent stone count:")
        for i in range(7):
            print(f"Segment {i + 1}: {self.game.stones[i]} stones")
        print(f"\nCurrent player: {'You' if self.game.current_player == 0 else 'AI'}")

    def get_player_move(self):
        print("\nEnter the number of stones to remove from each segment (space-separated, e.g.: 0 1 0 2 0 0 0):")
        while True:
            try:
                move = list(map(int, input().split()))
                if len(move) != 7:
                    print("Input must be 7 numbers!")
                    continue
                if not self.game.is_valid_move(move):
                    print("Invalid move! Remember you cannot form cycles.")
                    continue
                return move
            except ValueError:
                print("Please enter valid numbers!")
            except EOFError:
                print("Input error. Exiting...")
                sys.exit(1)

    def play_single_game(self,total_round):

        faile_round = 0
        win_round =0

        for i in range(total_round):
            print("next round will start")
            sleep(2)
            self.reset_game()
            self.display_game()
            while sum(self.game.stones) > 0:
                if self.game.current_player == 0:  # 玩家回合
                    move = self.get_player_move()
                    self.game.make_move(move)
                else:  # AI回合
                    move = self.ai.get_best_move()
                    print(f"\nAI is making its move: {move}")
                    self.game.make_move(move)

                self.game.switch_player()
                self.display_game()

            print("Game over!")
            if self.game.current_player == 1:
                print("You win!")
                win_round +=1
            else:
                print("AI wins!")
                faile_round +=1
        if win_round == 90: return 1
        if faile_round == 10:
            return 0

# 主程序
if __name__ == "__main__":
    total_round = 100

    f=open("FLAG","r",encoding='utf-8').read()
    try:
        game_ui = GameUI()
        if game_ui.play_single_game(total_round,):
            print("you get")
            print(f)
    except KeyboardInterrupt:
        print("\nGame interrupted.")

大概的逻辑就是初始化一堆石子堆,每堆石子的初始值从100以内的数随机选取,玩家和ai反别按回合从每堆石子中抽取一定数量的石子,

有 7 堆

CYCLES = [[1, 2, 4, 5], [1, 3, 4, 6], [2, 4, 5, 7], [3, 4, 6, 7], [1, 2, 3, 7, 5, 6], [2, 4, 6, 7, 5], [3, 4, 5, 7, 6]]

每次可以取多个,不能形成 cycle

无法操作的玩家输

AI 使用了某种蒙特卡罗算法,在终局不是最优的

一种策略是:

  • 第一轮取完 1 2 3
  • AI 一般只是随便取一个
  • 第二轮取完 4 5 6 7

这样两轮能获胜

因为每局 sleep 2s 所以要耐心等待

from pwn import *

io = remote("1.95.128.179", 3675, level="debug")
io.sendline(b"")

while True:
    # io.recvuntil(b"Current stone count:\\n", timeout=10)
    a = []
    for i in range(1, 8):
        io.recvuntil(b"Segment ")
        a.append(int(io.recvline().decode().strip().split()[1]))
    
    io.recvuntil(b"Current player: ")
    player = io.recvline().decode().strip()
    
    if player.lower() == "you":
        io.recvline()
        if "Enter the number of stones" in io.recvline().decode():
            if any(a[:3]): b = a[:3] + [0, 0, 0, 0]
            else: b = [0, 0, 0] + a[3:]
            io.sendline(" ".join(map(str, b)).encode())

# TPCTF{M0nt3_C4rl0_S34rch_1s_4w3s0m3_f0r_g4m3s}
...
    b'You won this round!\\n'
    b'Score after round 100: 100/100\\n'
    b'\\n'
    b'=== Challenge Complete ===\\n'
    b'Final score: 100/100\\n'
    b'\\n'
    b"Congratulations! You've beaten the AI enough times to earn the flag:\\n"
    b'TPCTF{M0nt3_C4rl0_S34rch_1s_4w3s0m3_f0r_g4m3s}\\n'

protable

找到main函数只有一个异或

image-20250323150345412

image-20250323150402094

https://justine.lol/ape.html

https://github.com/jart/cosmopolitan

binwalk 提取特征字符串得到 APE 程序

根据 repo 中的 specification 文档

APE MZ Magic
- ASCII: `MZqFpD='`
- Hex: 4d 5a 71 46 70 44 3d 27

查找 magic 在 portable 文件的位置,直接取 0x10000 开始的程序

main 在 sub_407F30

静态链接的 binary

看上去是用 c++ string 处理

校验:

  • len(flag) = 73
  • flag[0…6] = “TPCTF{”
  • flag[72…73] = “}”
  • flag[i+6] xor key[i%12] = enc[i] for i = 0…65
enc: 34 2A 42 0E 00 1D 5C 33 5E 44 3E 1A 0B 5C 2C 3A 5F 22 03 28 36 1B 07 31 8D DE 10 A2 EB B2 DA A2 D8 18 0D 17 1C 1F BD D9 1D BF EB A2 D8 16 0D A0 F6 30 BD D8 17 BE DA 0F AB C1 AE EA 8D DE 11 01 A1 C5
key: Cosmopolitan

xor 得到是 flag 的一半

b'wE1com3_70_tH3_W0RlD_of_\\xce\\xb1c\\xcf\\x84\\xc2\\xb5\\xce\\xb1lly_p\\xce\\xb4r\\xcf\\x84\\xce\\xb1bl\\xce\\xb5_\\xce\\xb5x\\xce\\xb5c\\xc2\\xb5\\xcf\\x84\\xce\\xb1bl\\xce\\xb5'

在 linux 中运行,结果是 flag 正确?

原来 flag 不全是 ascii…

TPCTF{wE1com3_70_tH3_W0RlD_of_αcτµαlly_pδrταblε_εxεcµταblε}

大概是 windows 也要逆向一遍?

windows main 在 sub_4070BC(?)

有一个虚拟机 (?)

[已完成] elf → js

[已完成] js → wasm

[已完成] wasm → flag

这是 wasm 文件:

code

wasm 的字符串里有编译的命令,其中包含了参数的值:

-X 'main.encryptedFlag=5ab82be11ac991707e166bbfcbf05cb5776b0ecb34ce659e6209542fecba7ab6ec82f44c1ab55e4f4fb06b37ef935b08'
-X 'main.maskedKey=960937ed01e77d7662565988a67abbfe0a2c11742abd00d6cf74de094447f7d3'
-X 'main.maskedIV=a7ccfe57d2af1deb1a0088517c0a9240'
-X 'main.mask=5dabc0b2b7296eefeaadd177746adb4acb2439e7990792cc7fdb7124b1a2633d'

根据程序内字符串(Error unmasking key/IV)猜测 maskedKey = Key xor mask, maskedIV = IV xor mask,AES 解密得到 flag

ct       = bytes.fromhex("5ab82be11ac991707e166bbfcbf05cb5776b0ecb34ce659e6209542fecba7ab6ec82f44c1ab55e4f4fb06b37ef935b08")
mask_key = bytes.fromhex("960937ed01e77d7662565988a67abbfe0a2c11742abd00d6cf74de094447f7d3")
mask_iv  = bytes.fromhex("a7ccfe57d2af1deb1a0088517c0a9240")
mask     = bytes.fromhex("5dabc0b2b7296eefeaadd177746adb4acb2439e7990792cc7fdb7124b1a2633d")

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
def xor(x, y): return bytes([i ^ j for i, j in zip(x, y)])
key = xor(mask_key, mask)
iv = xor(mask_iv, mask)
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
pt = unpad(cipher.decrypt(ct), AES.block_size)
print(pt.decode())

# TPCTF{m47r3shk4_h4ppy_r3v3r53_g@_w45m}

这题确实套娃……


obfuscator

这题用的是 d3n0l4nd (https://github.com/denoland/deno)将 javascript 包装成 elf

在可执行文件末尾有 js 文件


js 文件中有大量混淆,而且 deobfuscator 都去除不了……

js 中间有一行 import {unzipSync as u} from "node:zlib";import {Buffer as l} from "node:buffer";

这一行前面的部分:

let HbGI;!function(){const Aevx=Array.prototype.slice.call(arguments);return eval("......")}();

其中省略了一个 2 MB 的字符串,这个字符串 unquote 后去混淆,大致逻辑是

(function Y4QD(HkYv) {
  const jS0v = Tr5t(HkYv, bIQv(Y4QD.toString()))
  try {
    let DfTv = eval(jS0v)
    return DfTv.apply(null, Aevx)
  } catch (fNVv) {
    // if   fNVv instanceof SyntaxError
    // then console.log('Error: the code has been tampered!')
    // else throw fNVv
  }
  function bIQv(bKnw) {
    // returns 8-letter key from hash(bKnw)
  }
  function Tr5t(vZ7t, Pm0t) {
    // returns decodeURI(vZ7t) xor Pm0t
  }
})("......")

其中省略了一个 1 MB 的字符串,这个字符串 URI 解码后异或 key = ipgslcfa (key 可以用明文攻击得到,因为 js 里有大量的函数定义)得到的是

(function() {
    function AYnQ() {
        return (IqhF()) + (QIKN())
    }

    function UTeQ() {
        return cypN() + AUkK() + EjQI() + EHOF() + sqiD() + glTI()
    }

    function wVhQ() {
        return (sqiD())[wtgN()]()
    }

    function QQYP() {
        return (+!+[] + (++[+[]][+[]])) + (+[] + !+[])
    }
    HbGI = {};

    function sSbQ() {
        return EjQI() + ceKC() + wVhQ() + ULQN()
    }

    function smPQ() {
        gJRF = [];
        const UnSQ = AUsA();
        const ojJQ = MxyB();
        const QkMQ = seBO();
        const kgDQ = wFNB();
        const MhGQ = MdDK();
        var gdxQ = (196698 % 0o200026);
        {
            let IeAQ;
            while (gdxQ < (196664 % 0o200011)) {
                switch (gdxQ) {
                    case (0x102D0 - 0o201270):
                        gdxQ = (262208 % 0o200014);
                        IeAQ = (0x75bcd15 - 0O726746425);
                        break;
                    case (262225 % 0o200017):
                        gdxQ = (0O264353757 % 8);
                        {
                            let kEBN = "";
                            const MFEN = QofD[IeAQ];
                            var gBvN = (0o201510 - 0x1032C);
                            {
                                let ICyN;
                                while (gBvN < (0x4009E % 0o200036)) {
                                    switch (gBvN) {
                                        case (0x10C4E - 0o206053):
                                            gBvN = (0o1000247 % 0x10023);
                                            {
                                                kEBN += UnSQ[ojJQ](MFEN[QkMQ](ICyN) ^ (0O264353757 % 8));
                                            }
                                            break;
                                        case (68056 - 0o204674):
                                            gBvN = (0o1000301 % 0x10027);
                                            ICyN = (0x21786 % 3);
                                            break;
                                        case (262319 % 0o200045):
                                            gBvN = (0o201344 - 0x102BF);
                                            ICyN++;
                                            break;
                                        case (0o600243 % 0x1002A):
                                            gBvN = ICyN < MFEN[kgDQ] ? (262319 % 0o200043) : (0o1000246 % 0x10020);
                                            break;
                                    }
                                }
                            }
                            gJRF[MhGQ](kEBN);
                        }
                        break;
                    case (0o1000104 % 65549):
                        gdxQ = IeAQ < QofD[kgDQ] ? (131113 % 0o200012) : (0o202652 - 66957);
                        break;
                    case (0O264353757 % 8):
                        gdxQ = (0x40058 % 0o200022);
                        IeAQ++;
                        break;
                }
            }
        }
    }

    function cypN() {
        return (typeof([] + []))[+!+[] + !+[]]
    }

    function EzsN() {
        return ((+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]]) * (orfJ())) + (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ])
    }

    function YujN() {
        return (AILL())[kYoO()](AoYK())
    }

    function AwmN() {
        return EbCG() + MVoI() + EvpH() + EjQI()
    }

    function AQZN() {
        return oPdG() + kMXF() + kwnL() + wNTN()
    }
    HbGI.t = ([null] == '');

    function cScO() {
        return ([][gViO()] + [])[cWnK()]
    }

    function wNTN() {
        return (EvpH())[wtgN()]()
    }

    function YOWN() {
        return (AQhE())[wtgN()]()
    }

    function sKNN() {
        return cypN() + oPdG() + YiSE() + wNTN() + oPdG() + kMXF() + kwnL() + wNTN()
    }

    function ULQN() {
        return (AUkK())[wtgN()]()
    }

    function oHHN() {
        return function() {};
    }

    function QIKN() {
        return (UrdN()) + (sCHB())
    }
    var QcyO = [(263359 % 0o200361), (86096 - 0o247517), (0x2935494a % 7), (0x20451009 % 9)];

    function seBO() {
        return gtpB() + UbBI() + AUkK() + cypN() + kwnL() + sqiD() + EHOF() + AsjH() + ULQN() + cOZH() + wVpG()
    }

    function MZrO() {
        return (++[+[]][+[]]) + ((QQYP()) * (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]]))
    }

    function obvO() {
        return UXxC() + EHOF() + EDDJ() + wNTN()
    }

    function IWlO() {
        return gZtK() + EHOF() + EHOF() + ofGK() + IaxK() + kAyH() + ETfO() + EDDJ()
    }

    function kYoO() {
        return wVpG() + sqiD() + QoXM() + wVpG() + cypN() + MVoI() + EjQI() + EvpH()
    }

    function ETfO() {
        return (IGJJ()) + []
    }

    function gViO() {
        return AQhE() + MVoI() + EjQI() + EHOF()
    }
    var gpWO = [(0o217620 - 0x11F2B), (0x3015A % 0o200121), (0o400345 % 65597), (0o216716 - 73057), (73446 - 0o217165)];

    function IqZO(cmQO, EnTO, YiKO) {
        let AkNO = "";
        var UfEO = (0o205120 - 0x10A3A);
        {
            let whHO;
            YWkQ: while (UfEO < (0x10E74 - 0o207117)) {
                switch (UfEO) {
                    case (0o400136 % 0x1001D):
                        UfEO = (0o400124 % 65561);
                        {
                            var YGIL = (262237 % 0o200017);
                            while (YGIL < (131179 % 0o200043)) switch (YGIL) {
                                case (66616 - 0o202024):
                                    YGIL = (0x20075 % 0o200050);
                                    break YWkQ;
                                case (0o400075 % 0x1000E):
                                    YGIL = whHO >= cmQO.length ? (0x400B4 % 0o200044) : (0x1073A - 0o203425);
                                    break;
                            }
                            AkNO += cmQO[whHO];
                        }
                        break;
                    case (0o600074 % 0x10009):
                        UfEO = whHO < EnTO + (YiKO === undefined ? cmQO.length : YiKO) ? (196737 % 0o200037) : (0x11158 - 0o210463);
                        break;
                    case (0o205240 - 68222):
                        UfEO = (0x3005D % 0o200024);
                        whHO++;
                        break;
                    case (0o205120 - 68154):
                        UfEO = (0x107BC - 0o203633);
                        whHO = EnTO;
                        break;
                }
            }
        }
        return AkNO;
    }

    function AILL() {
        return ((+[] + !+[] + (++[+[]][+[] + []])) * (wlSK())) + (+[] + !+[])
    }

    function UDCL(wFFL) {
        return gJRF[wFFL];
    }

    function QAwL() {
        return (+!+[] + !+[]) + (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+[]]
        ])
    }

    function sCzL() {
        return YmdB() + YGQB() + AsjH() + EjQI() + wVpG() + QoXM() + wVpG() + sqiD() + cypN() + AUkK() + EvpH() + AsjH()
    }

    function MxqL() {
        return (YCFF())[kYoO()](MlZC())
    }

    function oztL() {
        return '\\u0055'
    }
    let oTgM;

    function QUjM() {
        return gZtK() + EHOF() + EHOF() + ofGK()
    }

    function kQaM() {
        return glTI() + MVoI() + EjQI()
    }

    function MRdM() {
        return (EjQI())[wtgN()]()
    }

    function gNUL() {
        return ('' [koZI()]())[ErmB()]
    }

    function IOXL() {
        return YGQB() + EbCG() + cypN() + ULQN()
    }

    function cKOL() {
        return (QQYP()) + (AILL())
    }

    function ELRL() {
        return EreL() + kMXF() + cqjB() + EDDJ()
    }
    HbGI[(UXpM()) + (MBBH())] = function(EfFM, ghIM, AczM) {
        var ceCM = (262229 % 0o200020);
        while (ceCM < (0o206534 - 68918)) switch (ceCM) {
            case (0x9D8DE4 - 0O47306735):
                ceCM = (0o1000222 % 0x1001B);
                {
                    return QcyO[IWlO()]()[UzzF()][ghIM];
                }
                break;
            case (0o1000131 % 0x10011):
                ceCM = EfFM === (+[
                    [+[
                        [+[]] + [+[]]
                    ] + []][+[]][+!+[]]
                ]) ? (0x9D8DE4 - 0O47306735) : (0x1076C - 0o203506);
                break;
        }
        EfFM = sqaN()[ETnE()][kQaM()](EfFM, kUlI());
        const wZsM = IqhF() + sqaN()[ETnE()][ICGD()](EfFM / (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]]) - (MpcJ()), EfFM) - QIKN();
        var YawM = (0o203004 - 67054);
        while (YawM < (69976 - 0o210463)) switch (YawM) {
            case (0x30045 % 0o200014):
                YawM = (0x20073 % 0o200047);
                {
                    var sWmM = (0o1000265 % 65572);
                    while (sWmM < (0o600175 % 0x1001D)) switch (sWmM) {
                        case (0o204254 - 0x10887):
                            sWmM = AczM ? (0x1015E - 0o200473) : (0x102F8 - 0o201322);
                            break;
                        case (0o600214 % 0x10023):
                            sWmM = (262306 % 0o200037);
                            {
                                AczM();
                                return QcyO[(QUjM()) + (EXyA())]()[kgLG()](EfFM, ghIM);
                            }
                            break;
                    }
                }
                break;
            case (0x2003E % 0o200024):
                YawM = EfFM + (QAwL()) < (+[]) ? (0o201224 - 0x10273) : (0o600221 % 65572);
                break;
        }
        return gpWO[kgLG()](wZsM, ghIM, AczM);
    };

    function UXpM() {
        return ojRG() + IeIG() + oztL() + wNTN()
    }

    function UrdN() {
        return (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[]]) * (+[
            [+[
                [+![] + !+[]] + [+[]]
            ] + []][+[]][+[]]
        ]) + (++[+[]][+[]] + (++[+[]][+[]]))
    }

    function wtgN() {
        return wVpG() + sqiD() + oztL() + QEHH() + QEHH() + AsjH() + cypN() + kwnL() + AUkK() + EbCG() + AsjH()
    }

    function QoXM() {
        return (EbCG())[wtgN()]()
    }

    function sqaN() {
        var MlRM = (0o600127 % 65555);
        while (MlRM < (262347 % 0o200053)) switch (MlRM) {
            case (0o205670 - 68506):
                MlRM = !oTgM ? (73639709 % 9) : (0x20075 % 0o200053);
                break;
            case (0O3153050563 - 0x19AC516B):
                MlRM = (0x1026C - 0o201115);
                {
                    const onUM = oTgM = Function(cWvA(IukL(), MNaG(), AILL(), UHNH()))();
                    oncD();
                    let IiLM = onUM[gNcC() + sCzL()];
                    var kkOM = (0x30039 % 0o200010);
                    while (kkOM < (0x400D9 % 0o200055)) switch (kkOM) {
                        case (0o204160 - 67660):
                            kkOM = (0o600246 % 0x1002B);
                            {
                                oTgM[MZzE()] = onUM[EfNC() + UnaH()];
                                onUM[smXG()] = oHHN;
                            }
                            break;
                        case (0x30039 % 0o200010):
                            kkOM = !IiLM ? (0o1000264 % 0x10024) : (0o400171 % 0x1002A);
                            break;
                    }
                }
                break;
        }
        return oTgM;
    }

    function MJPJ() {
        return cypN() + EreL() + kwnL() + YmdB() + oPdG() + EnbF() + MFMD() + YmdB()
    }

    function oLSJ() {
        return AQhE() + YmdB() + EreL() + EDDJ()
    }
    HbGI[kkWC()] = (wlSK()) - sCHB();

    function IGJJ() {
        return (++[+[]][+[]]) + (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]]) + (+!+[] + (++[+[]][+[]]))
    }

    function kIMJ() {
        return IaxK() + MVoI() + EjQI() + EHOF()
    }

    function EDDJ() {
        return ([][IusB()]() + [])[cWnK()]
    }

    function gFGJ(AAxJ) {
        return gJRF[AAxJ];
    }

    function cCAJ() {
        return EjQI() + wNTN() + YOWN() + wNTN()
    }

    function cWnK() {
        return (++[+[]][+[]] + (++[+[]][+[]])) + (QIKN())
    }

    function EXqK() {
        return AQhE() + wNTN() + AUkK() + ofGK()
    }
    let YShK = MZrO() + (sqaN() ? +[] : +[] + !+[] + (++[+[]][+[] + []]));

    function AUkK() {
        return (![] + [])[+!+[]]
    }

    function UPbK() {
        return ((QIKN()) * (cumH())) + (QQYP())
    }

    function wReK() {
        return (MpcJ()) + (MZrO())
    }

    function QMVJ() {
        return (+!+[]) + ((wReK()) * (QAwL()))
    }

    function sOYJ() {
        return ((wReK()) * (++[+[]][+[]] + (++[+[]][+[]]))) + (++[+[]][+[]] + (++[+[]][+[]]) - +!+[])
    }

    function siMK() {
        return EjQI() + sqiD() + YqgH()
    }

    function UjPK() {
        return ((+[] + !+[] + (++[+[]][+[] + []])) * (QsiJ())) + (+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ])
    }
    QcyO[IWlO()]()[(kYwE()) + (wdEI())] = function() {
        YShK = (YShK + (0O57060516 - 0xbc614d)) % (AwuD());
        return HbGI.nGFGP5zE[YShK] > (QIKN());
    };

    function ofGK() {
        return (YujN())[wtgN()]()
    }

    function QgJK() {
        return this[(oLSJ()) + (EXqK())];
    }

    function kcAK() {
        return (MhOG())[wtgN()]()
    }

    function MdDK() {
        return QEHH() + MFMD() + EbCG() + UbBI()
    }

    function gZtK() {
        return (UbBI())[wtgN()]()
    }

    function IaxK() {
        return (typeof ![])[+[]]
    }

    function IukL() {
        return YqgH() + YqgH() + gpeF() + EnbF() + ISiI() + QYuI() + MRdM() + YeHI() + ciNI() + YaEC() + ofGK() + wVpG() + MFMD() + AsjH() + cypN() + AQhE() + QYuI() + cScO() + IiTC() + MhOG() + EbCG() + QEHH() + gNUL() + EjQI() + wVpG() + UXxC() + MVoI() + cypN() + QoXM() + QoXM() + YOWN() + oPdG() + oPdG() + YGQB() + UbBI() + kskF() + gNUL()
    }
    QcyO[(QUjM()) + (EXyA())]()[sKNN()] = (IqhF()) - MZrO();

    function kwnL() {
        return '\\u0043'
    }

    function EreL() {
        return (EHOF())[wtgN()]()
    }

    function gthL() {
        return AQhE() + MVoI() + AEIF() + kwnL()
    }

    function AoYK() {
        return (+[]) + ((+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]]) * (oDEH()))
    }

    function cqbL() {
        return ojRG() + MhOG() + YqgH() + ULQN()
    }

    function wlSK() {
        return (+!+[]) + ((++[+[]][+[]] + (++[+[]][+[]])) * (UrdN()))
    }

    function YmVK(AMWH) {
        return gJRF[AMWH];
    }
    wBCF();

    function cOZH() {
        const wJQH = sqaN()[gBDD()];
        return wJQH ? (wJQH + [])[wpdH % QsiJ()] : IqZO(wJQH + [], AILL());
    }

    function YKTH() {
        return AQhE() + AUkK() + YmdB() + ULQN()
    }

    function sGKH() {
        return kcAK() + QQgG() + EnbF() + ULQN()
    }

    function UHNH() {
        return (QQYP()) + (sOYJ())
    }

    function oDEH() {
        return ((QQYP()) * (MpcJ())) + (+[])
    }

    function QEHH() {
        return '\\u0070'
    }

    function QYuI() {
        return (wlSK()) + []
    }
    let sayI;

    function MVoI() {
        return (typeof([] + []))[+!+[] + !+[] + !+[]]
    }

    function oXrI() {
        return UXxC() + ETfO() + ojRG() + YmdB()
    }

    function ISiI() {
        return (((+!+[]) / (++[+[]][+[]] + (++[+[]][+[]]))) + [])[+!+[]]
    }

    function kUlI() {
        return (++[+[]][+[]]) + ((+!+[] + (++[+[]][+[]])) * (sCHB()))
    }

    function EPcI() {
        return EreL() + AUkK() + wVpG() + AsjH()
    }

    function gRfI() {
        return kcAK() + YGQB() + EnbF() + EDDJ()
    }

    function glTI() {
        return (cKOL())[kYoO()](AoYK())
    }
    let ImWI = {
        [kUlI()]: AoYK() < AYvG(),
        [UjPK()]: kwvB() > UHNH(),
        [YCFF()]: oHPD() < ghQC(),
        [wxrJ()]: AgKI() < AILL(),
        [AoYK()]: ErmB() < wReK(),
        [QMVJ()]: AoYK() > ovqF()
    };

    function ciNI() {
        return (wVpG())[wtgN()]()
    }

    function EjQI() {
        return ([][
            []
        ] + [])[+[] + !+[]]
    }

    function YeHI() {
        return (MxqL())[wtgN()]()
    }

    function AgKI() {
        return (++[+[]][+[]] + (++[+[]][+[]]) - +!+[]) + ((+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[]]) * (cWnK()))
    }

    function UbBI() {
        return (kUlI())[kYoO()](oHPD())
    }

    function wdEI() {
        return oPdG() + EnbF() + MFMD() + YmdB()
    }

    function wxrJ() {
        return ((QQYP()) * (QsiJ())) + (+!+[] + !+[])
    }
    HbGI.u = (function(YyuJ) {
        var sulJ = (66976 - 0o202574);
        while (sulJ < (131187 % 0o200047)) switch (sulJ) {
            case (0x30075 % 0o200033):
                sulJ = !sayI ? (67236 - 0o203202) : (0x11158 - 0o210463);
                break;
            case (65876 - 0o200462):
                sulJ = (0x20079 % 0o200052);
                {
                    (function(UvoJ) {
                        sayI = UvoJ;
                    })(ImWI)
                }
                break;
        }
        return sayI[YyuJ] ^ (gpWO.nGFGP5zE[YShK] < (QIKN()));
    });

    function orfJ() {
        return (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]]) + ((MpcJ()) * (gdFG()))
    }

    function QsiJ() {
        return ((++[+[]][+[]] + (++[+[]][+[]])) * (gxsH())) + (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ])
    }

    function koZI() {
        return AQhE() + sqiD() + EjQI() + wVpG() + gtpB() + sqiD() + cyxD() + sqiD() + cypN()
    }

    function MpcJ() {
        return (QAwL()) + (QQYP())
    }

    function oPdG() {
        return (cyxD())[wtgN()]()
    }

    function QQgG() {
        return (+[] + !+[]) + []
    }

    function kMXF() {
        return (sCHB()) + []
    }

    function MNaG() {
        return (+!+[] + !+[]) + (IWtE())
    }
    let gJRF;

    function IKUF(cGLF) {
        return gJRF[cGLF];
    }

    function EHOF() {
        return ([][
            []
        ] + [])[++[++[
            []
        ][+[]]][+[]]]
    }

    function EbCG() {
        return (![] + [])[+!+[] + !+[] + !+[]]
    }

    function gdFG() {
        return (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]) + ((QQYP()) * (MZrO()))
    }

    function AYvG() {
        return ((MpcJ()) * (sCHB())) + (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ])
    }

    function cazG() {
        return EjQI() + wNTN() + YOWN() + wNTN() + UXxC() + ETfO() + ojRG() + YmdB()
    }

    function wVpG() {
        return (typeof([] + []))[+!+[]]
    }
    HbGI[gthL()] = YmVK;

    function YWsG() {
        return MFMD() + EjQI() + ceKC() + EjQI() + sqiD() + YqgH() + EjQI()
    }

    function sSjG(UTmG) {
        return gJRF[UTmG];
    }

    function UnaH() {
        return EjQI() + EbCG() + sqiD() + cyxD() + AsjH()
    }

    function wpdH() {
        return sqaN()[EPcI()][siMK()]();
    }

    function QkUG() {
        return (cypN())[wtgN()]()
    }

    function smXG() {
        return ULQN() + IaxK() + sqiD() + cypN() + wVpG() + QoXM() + MVoI() + EvpH() + EjQI() + AUkK() + cyxD() + QkUG() + AsjH() + EjQI() + EHOF() + AsjH() + cypN() + AsjH() + cypN()
    }

    function MhOG() {
        return (QcGE())[kYoO()](cSkE())
    }
    HbGI[AcHC()] = wZAC;

    function ojRG() {
        return (IWtE())[kYoO()](AoYK())
    }

    function IeIG() {
        return (YGQB())[wtgN()]()
    }

    function kgLG() {
        return ojRG() + IeIG() + oztL() + wNTN() + ciNI() + MVoI() + MRdM() + wNTN()
    }

    function kAyH() {
        return (IaxK())[wtgN()]()
    }

    function MBBH() {
        return ciNI() + MVoI() + MRdM() + wNTN()
    }

    function gxsH() {
        return (+[
            [+[
                [+![] + !+[]] + [+[]]
            ] + []][+[]][+[]]
        ]) + (+[] + !+[] + (++[+[]][+[] + []])) + (+!+[] + !+[])
    }

    function IyvH() {
        return (+(((+!+[]) + []) + ((!![] + [])[+!+[] + !+[] + !+[]]) + (+!+[]) + (+[]) + (+[]) + (+[])) + [])[+!+[] + !+[] + !+[] + !+[] + !+[] + !+[] + !+[]]
    }
    HbGI[YKTH()] = AogB;

    function cumH() {
        return (++[+[]][+[]] + (++[+[]][+[]])) * (+[
            [+[
                [+![] + !+[]] + [+[]]
            ] + []][+[]][+[]]
        ]) + (+[] + !+[] + (++[+[]][+[] + []]))
    }

    function EvpH() {
        return (typeof([] + []))[+!+[] + !+[] + !+[] + !+[] + !+[]]
    }

    function YqgH() {
        return (wxrJ())[kYoO()](QcGE())
    }

    function AsjH() {
        return ([][
            []
        ] + [])[+!+[] + !+[] + !+[]]
    }

    function cSkE() {
        return (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[]]) + (wxrJ())
    }

    function ETnE() {
        return AEIF() + AUkK() + wVpG() + UbBI()
    }

    function YOeE() {
        HbGI[AkVE()] = sqaN()[gBDD()];
        sqaN()[EfNC() + UnaH()] = HbGI[YWsG()];
    }
    HbGI[UrlD()] = UDCL;

    function AQhE() {
        return ([][
            []
        ] + [])[+!+[] + !+[] + !+[] + !+[]]
    }

    function ULYD(wNbE, QISD) {
        let sKVD = - ++[+[]][+[]];
        var seJE = (0o201224 - 66163);
        {
            let UfME;
            while (seJE < (0o205036 - 68089)) {
                switch (seJE) {
                    case (131145 % 0o200024):
                        seJE = (0o204160 - 67660);
                        UfME = +[
                            [+[
                                [+!+[]] + [+[]]
                            ] + []][+[]][+!+[]]
                        ];
                        break;
                    case (67856 - 0o204363):
                        seJE = (0o202070 - 0x10414);
                        UfME++;
                        break;
                    case (0x10BF4 - 0o205722):
                        seJE = (0o400057 % 65545);
                        {
                            var obDE = (0o201510 - 0x10333);
                            while (obDE < (0x4007E % 0o200026)) switch (obDE) {
                                case (0x9D8DE4 - 0O47306735):
                                    obDE = (0x10A64 - 0o205076);
                                    return UfME;
                                case (68056 - 0o204703):
                                    obDE = wNbE[UfME] === QISD[+[
                                        [+[
                                            [+[]] + [+[]]
                                        ] + []][+[]][+!+[]]
                                    ]] ? (0O144657447 ^ 0x1935F20) : (0o400114 % 0x10013);
                                    break;
                            }
                        }
                        break;
                    case (0x105A0 - 0o202574):
                        seJE = UfME < wNbE.length ? (0x40092 % 0o200034) : (67386 - 0o203425);
                        break;
                }
            }
        }
        return sKVD;
    }

    function QcGE() {
        return (+[] + !+[]) + ((++[+[]][+[]] + (++[+[]][+[]])) * (cmYE()))
    }

    function kYwE() {
        return cypN() + EreL() + kwnL() + YmdB()
    }

    function MZzE() {
        return YqgH() + AsjH() + IaxK() + ceKC() + MVoI() + wVpG() + YmdB() + YGQB() + AsjH() + EjQI() + wVpG() + QoXM() + wVpG() + sqiD() + cypN() + AUkK() + EvpH() + AsjH()
    }

    function gVqE() {
        sqaN()[gBDD()] = HbGI[AkVE()];
    }

    function IWtE() {
        return (QQYP()) + ((cumH()) * (sCHB()))
    }
    HbGI[cqbL()] = kEJD;

    function IqhF() {
        return (+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[]]) + ((QQYP()) * (QQYP()))
    }

    function kskF() {
        return ([][gViO()] + [])[wReK()]
    }

    function EnbF() {
        return (+[
            [+[
                [+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ]) + []
    }

    function gpeF() {
        return ('' [koZI()]())[AYnQ()]
    }

    function AkVE() {
        return gtpB() + UbBI()
    }

    function cmYE() {
        return ((+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[]]) * (sCHB())) + (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ])
    }

    function whPE() {
        return YGQB() + YeHI() + UXxC() + wNTN()
    }
    HbGI[IOXL()] = gFGJ;

    function YiSE() {
        return (ceKC())[wtgN()]()
    }

    function YCFF() {
        return ((+([+[
            [!+[] + !+[]] + [+[]]
        ]] + [])[+[]]) * (wReK())) + (+[
            [+[
                [+!+[]] + [+[]]
            ] + []][+[]][+!+[]]
        ])
    }

    function AEIF() {
        return (glTI())[wtgN()]()
    }

    function UzzF() {
        return EreL() + kMXF() + cqjB() + EDDJ() + kcAK() + YGQB() + EnbF() + EDDJ()
    }

    function wBCF() {
        QcyO[IWlO()]()[(cCAJ()) + (oXrI())] = [];
        var QwtF = (0o200764 - 0x101EA);
        {
            let sywF;
            while (QwtF < (68536 - 0o205637)) {
                switch (QwtF) {
                    case (0o1000151 % 0x10017):
                        QwtF = (0x10226 - 0o201033);
                        sywF++;
                        break;
                    case (0o202114 - 66625):
                        QwtF = sywF < EzsN() ? (0o202520 - 0x1053F) : (67286 - 0o203275);
                        break;
                    case (0x102A8 - 0o201227):
                        QwtF = (0o400057 % 65553);
                        {
                            const MtnF = sqaN()[ETnE()][kQaM()](HbGI[(whPE()) + (obvO())], QcyO[(QUjM()) + (EXyA())]()[(YurD()) + (AQZN())]) || (QAwL());
                            QcyO[IWlO()]()[cazG()][MdDK()](sqaN()[ETnE()][AwmN()](MtnF) * sqaN()[ETnE()][cKWB()](sqaN()[ETnE()][UTeQ()]() * (EzsN()) + (++[+[]][+[]] + (++[+[]][+[]]) - +!+[])) + (QIKN()));
                        }
                        break;
                    case (196681 % 0o200025):
                        QwtF = (0x103DE - 0o201723);
                        sywF = +[
                            [+[
                                [+[]] + [+[]]
                            ] + []][+[]][+[]]
                        ];
                        break;
                }
            }
        }
    }

    function ovqF() {
        return ((wReK()) * (UrdN())) + (+[])
    }

    function QUrC(sWuC, MRlC) {
        let oToC = "";
        var IOfC = (0o201774 - 0x103EB);
        {
            let kQiC;
            while (IOfC < (0o201750 - 0x103CF)) {
                switch (IOfC) {
                    case (0o400073 % 65559):
                        IOfC = kQiC >= +[
                            [+[
                                [+[]] + [+[]]
                            ] + []][+[]][+[]]
                        ] ? (0x100F0 - 0o200330) : (0x20049 % 0o200030);
                        break;
                    case (0x3006B % 0o200036):
                        IOfC = (66576 - 0o202003);
                        kQiC = sWuC - (++[+[]][+[]]);
                        break;
                    case (0o1000054 % 0x10007):
                        IOfC = (0o200606 - 0x10179);
                        kQiC--;
                        break;
                    case (0x40070 % 0o200026):
                        IOfC = (0o600100 % 65552);
                        {
                            oToC += MRlC;
                        }
                        break;
                }
            }
        }
        return oToC;
    }
    HbGI[sGKH()] = sSjG;

    function ELZB() {
        return AQhE() + YmdB() + EreL() + EDDJ() + AQhE() + wNTN() + AUkK() + ofGK()
    }

    function gNcC() {
        return YqgH() + AsjH() + IaxK() + ceKC() + MVoI() + wVpG()
    }

    function ghQC() {
        return (+!+[] + (++[+[]][+[]])) + (UPbK())
    }

    function IiTC() {
        return ([][gViO()] + [])[sCHB()]
    }

    function ceKC() {
        return (UjPK())[kYoO()](gdFG())
    }

    function EfNC() {
        return gtpB() + sqiD()
    }

    function YaEC() {
        return ('' [koZI()]())[+[]]
    }
    HbGI[sSbQ()] = IKUF;

    function AcHC() {
        return IaxK() + EHOF() + gZtK() + kwnL()
    }

    function UXxC() {
        return (QEHH())[wtgN()]()
    }

    function wZAC(wtoD) {
        return gJRF[wtoD];
    }

    function YurD() {
        return cypN() + oPdG() + YiSE() + wNTN()
    }

    function sqiD() {
        return (typeof [])[+[]]
    }

    function UrlD() {
        return IaxK() + ETfO() + IyvH() + ULQN()
    }

    function oncD() {
        QcyO[ELZB()] = HbGI;
        QcyO[IWlO()] = QgJK[kIMJ()](QcyO);
        gpWO = QcyO[(QUjM()) + (EXyA())]();
        gpWO[(ELRL()) + (gRfI())] = [];
    }

    let QofD = [ ...... ];

    function kkWC() {
        return YGQB() + YeHI() + UXxC() + wNTN() + UXxC() + EHOF() + EDDJ() + wNTN()
    }

    function MlZC() {
        return (QQYP()) + ((IGJJ()) * (gxsH()))
    }

    function MFMD() {
        return ([][
            []
        ] + [])[+[]]
    }

    function oHPD() {
        return (MpcJ()) + (ErmB())
    }

    function ICGD() {
        return glTI() + AUkK() + MhOG()
    }

    function kEJD(EzAD) {
        return gJRF[EzAD];
    }

    function gBDD() {
        return gtpB() + sqiD() + EjQI() + EbCG() + sqiD() + cyxD() + AsjH()
    }
    YOeE();

    function AwuD() {
        return (cumH()) + ((MpcJ()) * (cmYE()))
    }

    function cyxD() {
        return (![] + [])[+!+[] + !+[]]
    }

    function EXyA() {
        return IaxK() + kAyH() + ETfO() + EDDJ()
    }

    function gZBA() {
        return QoXM() + wVpG() + cypN() + MVoI() + EjQI() + EvpH()
    }

    function AUsA() {
        return sqaN()[gZBA()];
    }

    function cWvA(wRmA, YSpA, sOgA, UPjA) {
        const UjXA = IqZO(wRmA, wRmA.length - (++[+[]][+[]] + (++[+[]][+[]]) - +!+[]));
        let wlaB = QUrC(YSpA - (+!+[]), UjXA);
        let QgRA = UPjA;
        var siUA = (0x10E9C - 0o207172);
        {
            let MdLA;
            while (siUA < (131165 % 0o200035)) {
                switch (siUA) {
                    case (0o1000124 % 65549):
                        siUA = (0o201604 - 66427);
                        {
                            const ofOA = wRmA[MdLA];
                            wlaB = IqZO(wlaB, +[
                                [+[
                                    [+!+[]] + [+[]]
                                ] + []][+[]][+!+[]]
                            ], QgRA - (+[] + !+[])) + ofOA + IqZO(wlaB, QgRA);
                            QgRA = (QgRA * sOgA) % YSpA;
                        }
                        break;
                    case (0o203314 - 0x106AF):
                        siUA = MdLA < YSpA - (+[
                            [+[
                                [+![] + !+[]] + [+[]]
                            ] + []][+[]][+[]]
                        ]) ? (196685 % 0o200017) : (0o202032 - 66551);
                        break;
                    case (0o207234 - 69242):
                        siUA = (0x10122 - 0o200405);
                        MdLA = +[
                            [+[
                                [!+[] + !+[]] + [+[]]
                            ] + []][+[]][+!+[]]
                        ];
                        break;
                    case (0o600077 % 0x10012):
                        siUA = (0o202652 - 0x1058D);
                        MdLA++;
                        break;
                }
            }
        }
        const IaFA = ULYD(wlaB, UjXA);
        var kcIA = (0x105DC - 0o202715);
        while (kcIA < (0x103A2 - 0o201603)) switch (kcIA) {
            case (0o1000102 % 0x1000C):
                kcIA = (0o1000247 % 65570);
                {
                    wlaB = IqZO(wlaB, +[
                        [+[
                            [!+[] + !+[]] + [+[]]
                        ] + []][+[]][+!+[]]
                    ], IaFA);
                }
                break;
            case (66886 - 0o202467):
                kcIA = IaFA >= +[
                    [+[
                        [+[]] + [+[]]
                    ] + []][+[]][+[]]
                ] ? (0o1000066 % 65545) : (262311 % 0o200042);
                break;
        }
        return wlaB;
    }

    function kwvB() {
        return ((QAwL()) * (QIKN())) + (+!+[] + (++[+[]][+[]]))
    }
    smPQ();

    function MxyB() {
        return AQhE() + cypN() + sqiD() + glTI() + kwnL() + UbBI() + AUkK() + cOZH() + cypN() + kwnL() + sqiD() + EHOF() + AsjH()
    }

    function gtpB() {
        return ([][gViO()] + [])[+!+[] + !+[] + !+[]]
    }

    function IusB() {
        return AsjH() + EjQI() + wVpG() + cypN() + MVoI() + AsjH() + EbCG()
    }

    function cqjB() {
        return (MZrO()) + []
    }

    function ErmB() {
        return (+[
            [+[
                [+![] + !+[]] + [+[]]
            ] + []][+[]][+[]]
        ]) + ((MpcJ()) * (cumH()))
    }

    function YmdB() {
        return (AsjH())[wtgN()]()
    }

    function AogB(AITB) {
        return gJRF[AITB];
    }
    gVqE();

    function cKWB() {
        return AQhE() + cyxD() + sqiD() + sqiD() + cypN()
    }

    function wFNB() {
        return cyxD() + AsjH() + EjQI() + EvpH() + cOZH() + wVpG() + UbBI()
    }

    function YGQB() {
        return (oHPD())[kYoO()](IWtE())
    }

    function sCHB() {
        return (cumH()) + (cumH())
    }
    HbGI.Q4lG = function() {
        return 24
    };
    HbGI.Q6SG = function() {
        return 16
    };
    HbGI.sEVG = function() {
        return 21
    };
    HbGI.M1NG = function() {
        return 7
    };
    HbGI.ozQG = function() {
        return 29
    };
    HbGI.IWIG = function() {
        return 30
    };
    HbGI.ERDG = function() {
        return 28
    };
    HbGI.gpGG = function() {
        return 37
    };
    HbGI.IOAE = function() {
        return 35
    };
    HbGI.kmDE = function() {
        return 27
    };
    HbGI.EJvE = function() {
        return 38
    };
    HbGI.ghyE = function() {
        return 39
    };
    HbGI.cctE = function() {
        return 22
    };
    HbGI.wzlE = function() {
        return 33
    };
    HbGI.Y6nE = function() {
        return 36
    };
    HbGI.Y8UE = function() {
        return 34
    };
    HbGI.orIE = function() {
        return 8
    };
    HbGI.otfF = function() {
        return 14
    };
    HbGI.Q0hF = function() {
        return 31
    };
    HbGI.koaF = function() {
        return 32
    };
    HbGI.ENzF = function() {
        return 10
    };
    HbGI.glCF = function() {
        return 11
    };
    HbGI.AIuF = function() {
        return 17
    };
    HbGI.cgxF = function() {
        return 13
    };
    HbGI.wDpF = function() {
        return 25
    };
    HbGI.YasF = function() {
        return 26
    };
    HbGI.wvhD = function() {
        return 9
    };
    HbGI.sqcD = function() {
        return 15
    };
    HbGI.UXeD = function() {
        return 18
    };
    HbGI.cEpv = function() {
        return 20
    };
    HbGI.Yykv = function() {
        return 12
    }
})

其中省略了一个字符串数组 QofD 的内容(这里的字符串 由于未知原因 因为 xor 加密 有大量的 0x7F 字符)

检查混淆,它将 QofD 的每个字符串都异或了 7

解异或后得到一串 base64,解码然后解压 gzip 得到一个 wasm 文件


后面的部分:

const UDKB=HbGI.faEA(2);(()=>{const ozBB=()=>{const QAEB=new Error(HbGI.b5yA(3));return QAEB[HbGI.zxwA(4)]=HbGI.vsrA(5),QAEB;};if(!globalThis[HbGI.X10A(6)]){let saGy=HbGI.nkOA(7);globalThis[HbGI.X10A(6)]={[HbGI.fiMC(8)]:{[HbGI.bdHC(9)]:-(0O57060516-0xbc614d),[HbGI.faEA(10)]:-(0O57060516-0xbc614d),[HbGI.b5yA(11)]:-(0O57060516-0xbc614d),[HbGI.zxwA(12)]:-(0O57060516-0xbc614d),[HbGI.vsrA(13)]:-(0O57060516-0xbc614d),[HbGI.X10A(14)]:-(0O57060516-0xbc614d),[HbGI.nkOA(15)]:-(0O57060516-0xbc614d)},[HbGI.fiMC(16)](UbJy,oXzy){saGy+=cGTv[HbGI.bdHC(17)](oXzy);const QYCy=saGy[HbGI.faEA(18)](`${HbGI.b5yA(19)}`);return QYCy!=-(0O57060516-0xbc614d)&&(console[HbGI.zxwA(20)](saGy[HbGI.vsrA(21)](HbGI.u(17)?0:-9,QYCy)),saGy=saGy[HbGI.vsrA(21)](QYCy+(0O57060516-0xbc614d))),oXzy[HbGI.X10A(22)];},[HbGI.nkOA(23)](kUty,MVwy,gRny,ISqy,Imez,kohz){if(gRny!==(0x75bcd15-0O726746425)||ISqy!==MVwy[HbGI.X10A(22)]||Imez!==null){kohz(ozBB());return;}const EjYy=this[HbGI.fiMC(16)](kUty,MVwy);kohz(null,EjYy);},[HbGI.fiMC(24)](glbz,AgSy,ciVy){ciVy(ozBB());},[HbGI.bdHC(25)](wdMy,YePy,YyCz,AAFz){AAFz(ozBB());},[HbGI.faEA(26)](Uvwz,wxzz){wxzz(ozBB());},[HbGI.b5yA(27)](Qsqz,sutz,Mpkz){Mpkz(ozBB());},[HbGI.zxwA(28)](ornz,oLaA,QMdA,kIUz){kIUz(ozBB());},[HbGI.vsrA(29)](MJXz,gFOz){gFOz(ozBB());},[HbGI.X10A(30)](IGRz,cCIz){cCIz(null);},[HbGI.nkOA(31)](EDLz,gdNw,IeQw){IeQw(ozBB());},[HbGI.fiMC(32)](caHw,EbKw,YWAw,AYDw){AYDw(ozBB());},[HbGI.bdHC(33)](UTuw,wVxw,wplx){wplx(ozBB());},[HbGI.faEA(34)](Yqox,smfx){smfx(ozBB());},[HbGI.b5yA(35)](Unix,ojZw,Qkcx){Qkcx(ozBB());},[HbGI.zxwA(36)](kgTw,MhWw,MBJx,oDMx){oDMx(ozBB());},[HbGI.vsrA(37)](IyDx,kAGx,Evxx,gxAx,Asrx,cuux){cuux(ozBB());},[HbGI.X10A(38)](cOhy,EPky){EPky(ozBB());},[HbGI.nkOA(39)](YKby,AMey){AMey(ozBB());},[HbGI.fiMC(40)](UHVx,wJYx,QEPx){QEPx(ozBB());},[HbGI.bdHC(41)](sGSx,UfUu){UfUu(ozBB());},[HbGI.faEA(42)](whXu,QcOu){QcOu(ozBB());},[HbGI.b5yA(43)](seRu,MZHu,obLu){obLu(ozBB());},[HbGI.zxwA(44)](IWBu,kYEu,kssv){kssv(ozBB());},[HbGI.vsrA(45)](Mtvv,gpmv){gpmv(ozBB());},[HbGI.X10A(46)](Iqpv,cmgv,Enjv,Yiav){Yiav(ozBB());}};}if(globalThis[HbGI.nkOA(47)]||(globalThis[HbGI.nkOA(47)]={[HbGI.fiMC(48)](){return -(0O57060516-0xbc614d);},[HbGI.bdHC(49)](){return -(0O57060516-0xbc614d);},[HbGI.faEA(50)](){return -(0O57060516-0xbc614d);},[HbGI.b5yA(51)](){return -(0O57060516-0xbc614d);},[HbGI.zxwA(52)](){throw ozBB();},[HbGI.vsrA(53)]:-(0O57060516-0xbc614d),[HbGI.X10A(54)]:-(0O57060516-0xbc614d),[HbGI.nkOA(55)](){throw ozBB();},[HbGI.fiMC(56)](){throw ozBB();},[HbGI.bdHC(57)](){throw ozBB();}}),globalThis[HbGI.faEA(58)]||(globalThis[HbGI.faEA(58)]={[HbGI.b5yA(59)](...Akdv){return Akdv[HbGI.zxwA(60)](HbGI.vsrA(61));}}),!globalThis[HbGI.X10A(62)])throw new Error(HbGI.nkOA(63));if(!globalThis[HbGI.fiMC(64)])throw new Error(HbGI.bdHC(65));if(!globalThis[HbGI.faEA(66)])throw new Error(HbGI.b5yA(67));if(!globalThis[HbGI.zxwA(68)])throw new Error(HbGI.vsrA(69));const AEQv=new TextEncoder(HbGI.X10A(70)),cGTv=new TextDecoder(HbGI.X10A(70));globalThis[HbGI.nkOA(71)]=class{constructor(){this[HbGI.fiMC(72)]=[HbGI.bdHC(73)],this[HbGI.faEA(74)]={},this[HbGI.b5yA(75)]=YCNv=>{YCNv!==(0x75bcd15-0O726746425)&&console[HbGI.zxwA(76)](HbGI.vsrA(77),YCNv);},this[HbGI.X10A(78)]=new Promise(syEv=>{this[HbGI.nkOA(79)]=syEv;}),this[HbGI.fiMC(80)]=null,this[HbGI.bdHC(81)]=new Map(),this[HbGI.faEA(82)]=(0O57060516-0xbc614d);const UzHv=(EHWv,gJZv)=>{this[HbGI.b5yA(83)][HbGI.zxwA(84)](EHWv+(0x75bcd15-0O726746425),gJZv,!(0x75bcd15-0O726746425)),this[HbGI.b5yA(83)][HbGI.zxwA(84)](EHWv+(0x5E30A78-0O570605164),Math[HbGI.vsrA(85)](gJZv/4294967296),!(0x75bcd15-0O726746425));},ovyv=Iibt=>{const kket=this[HbGI.b5yA(83)][HbGI.X10A(86)](Iibt+(0x75bcd15-0O726746425),!(0x75bcd15-0O726746425)),EfVs=this[HbGI.b5yA(83)][HbGI.nkOA(87)](Iibt+(0x5E30A78-0O570605164),!(0x75bcd15-0O726746425));return kket+EfVs*4294967296;},QwBv=ghYs=>{const AcPs=this[HbGI.b5yA(83)][HbGI.fiMC(88)](ghYs,!(0x75bcd15-0O726746425));if(AcPs===(0x75bcd15-0O726746425))return;if(!isNaN(AcPs))return AcPs;const ceSs=this[HbGI.b5yA(83)][HbGI.X10A(86)](ghYs,!(0x75bcd15-0O726746425));return this[HbGI.bdHC(89)][ceSs];},QQow=(wZIs,YaMs)=>{if(typeof YaMs==HbGI.faEA(90)&&YaMs!==(0x75bcd15-0O726746425)){if(isNaN(YaMs)){this[HbGI.b5yA(83)][HbGI.zxwA(84)](wZIs+(0x5E30A78-0O570605164),HbGI.u(20)?2146959360:2146959366,!(0x75bcd15-0O726746425)),this[HbGI.b5yA(83)][HbGI.zxwA(84)](wZIs,HbGI.u(26)?0:-11,!(0x75bcd15-0O726746425));return;}this[HbGI.b5yA(83)][HbGI.b5yA(91)](wZIs,YaMs,!(0x75bcd15-0O726746425));return;}if(YaMs===void (0x75bcd15-0O726746425)){this[HbGI.b5yA(83)][HbGI.b5yA(91)](wZIs,HbGI.u(32)?-10:0,!(0x75bcd15-0O726746425));return;}let Yuzt=this[HbGI.zxwA(92)][HbGI.vsrA(93)](YaMs);Yuzt===void (0x75bcd15-0O726746425)&&(Yuzt=this[HbGI.X10A(94)][HbGI.nkOA(95)](),Yuzt===void (0x75bcd15-0O726746425)&&(Yuzt=this[HbGI.bdHC(89)][HbGI.X10A(22)]),this[HbGI.bdHC(89)][Yuzt]=YaMs,this[HbGI.fiMC(96)][Yuzt]=(0x75bcd15-0O726746425),this[HbGI.zxwA(92)][HbGI.bdHC(97)](YaMs,Yuzt)),this[HbGI.fiMC(96)][Yuzt]++;let AwCt=(0x75bcd15-0O726746425);switch(typeof YaMs){case HbGI.faEA(98):YaMs!==null&&(AwCt=(0O57060516-0xbc614d));break;case HbGI.b5yA(99):AwCt=(15658734^0O73567354);break;case HbGI.zxwA(100):AwCt=(0O334664274-0x37368B9);break;case HbGI.vsrA(101):AwCt=(0x5E30A78-0O570605164);break;}this[HbGI.b5yA(83)][HbGI.zxwA(84)](wZIs+(0x5E30A78-0O570605164),2146959360|AwCt,!(0x75bcd15-0O726746425)),this[HbGI.b5yA(83)][HbGI.zxwA(84)](wZIs,Yuzt,!(0x75bcd15-0O726746425));},sSrw=Urtt=>{const wtwt=ovyv(Urtt+(0x75bcd15-0O726746425)),Qont=ovyv(Urtt+(0O347010110&0x463A71D));return new Uint8Array(this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.b5yA(83)][HbGI.fiMC(104)],wtwt,Qont);},MNiw=sqqt=>{const Mlht=ovyv(sqqt+(0x75bcd15-0O726746425)),onkt=ovyv(sqqt+(0O347010110&0x463A71D)),oHXt=new Array(onkt);for(let QIau=(0x75bcd15-0O726746425);QIau<onkt;QIau++)oHXt[QIau]=QwBv(Mlht+QIau*(0O347010110&0x463A71D));return oHXt;},oPlw=kERt=>{const MFUt=ovyv(kERt+(0x75bcd15-0O726746425)),gBLt=ovyv(kERt+(0O347010110&0x463A71D));return cGTv[HbGI.bdHC(17)](new DataView(this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.b5yA(83)][HbGI.fiMC(104)],MFUt,gBLt));},IKcw=(ICOt,cyFt)=>((this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.bdHC(105)](),this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.faEA(106)](ICOt,cyFt))),kMfw=Date[HbGI.b5yA(107)]()-performance[HbGI.b5yA(107)]();this[HbGI.zxwA(108)]={[HbGI.vsrA(109)]:{[HbGI.X10A(110)]:(EzIt,ETvu)=>EzIt+ETvu,[HbGI.nkOA(111)]:IKcw},[HbGI.fiMC(112)]:{[HbGI.bdHC(113)]:gVyu=>{gVyu>>>=(0x75bcd15-0O726746425);const AQpu=this[HbGI.b5yA(83)][HbGI.nkOA(87)](gVyu+(0O347010110&0x463A71D),!(0x75bcd15-0O726746425));this[HbGI.faEA(114)]=!(0x75bcd15-0O726746425),delete this[HbGI.X10A(102)],delete this[HbGI.bdHC(89)],delete this[HbGI.fiMC(96)],delete this[HbGI.zxwA(92)],delete this[HbGI.X10A(94)],this[HbGI.b5yA(75)](AQpu);},[HbGI.b5yA(115)]:cSsu=>{cSsu>>>=(0x75bcd15-0O726746425);const wNju=ovyv(cSsu+(0O347010110&0x463A71D)),YOmu=ovyv(cSsu+16),sKdu=this[HbGI.b5yA(83)][HbGI.nkOA(87)](cSsu+24,!(0x75bcd15-0O726746425));fs[HbGI.fiMC(16)](wNju,new Uint8Array(this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.b5yA(83)][HbGI.fiMC(104)],YOmu,sKdu));},[HbGI.zxwA(116)]:ULgu=>{this[HbGI.b5yA(83)]=new DataView(this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.b5yA(83)][HbGI.fiMC(104)]);},[HbGI.vsrA(117)]:wlir=>{wlir>>>=(0x75bcd15-0O726746425),UzHv(wlir+(0O347010110&0x463A71D),(kMfw+performance[HbGI.b5yA(107)]())*1e6);},[HbGI.X10A(118)]:Ymlr=>{Ymlr>>>=(0x75bcd15-0O726746425);const sicr=(new Date())[HbGI.nkOA(119)]();UzHv(Ymlr+(0O347010110&0x463A71D),sicr/1e3),this[HbGI.b5yA(83)][HbGI.fiMC(120)](Ymlr+16,sicr%1e3*1e6,!(0x75bcd15-0O726746425));},[HbGI.bdHC(121)]:Ujfr=>{Ujfr>>>=(0x75bcd15-0O726746425);const ofWq=this[HbGI.faEA(82)];this[HbGI.faEA(82)]++,this[HbGI.bdHC(81)][HbGI.bdHC(97)](ofWq,setTimeout(()=>{for(this[HbGI.faEA(122)]();this[HbGI.bdHC(81)][HbGI.b5yA(123)](ofWq);)console[HbGI.zxwA(76)](HbGI.zxwA(124)),this[HbGI.faEA(122)]();},ovyv(Ujfr+(0O347010110&0x463A71D)))),this[HbGI.b5yA(83)][HbGI.fiMC(120)](Ujfr+16,ofWq,!(0x75bcd15-0O726746425));},[HbGI.vsrA(125)]:QgZq=>{QgZq>>>=(0x75bcd15-0O726746425);const kcQq=this[HbGI.b5yA(83)][HbGI.nkOA(87)](QgZq+(0O347010110&0x463A71D),!(0x75bcd15-0O726746425));clearTimeout(this[HbGI.bdHC(81)][HbGI.vsrA(93)](kcQq)),this[HbGI.bdHC(81)][HbGI.X10A(126)](kcQq);},[HbGI.nkOA(127)]:MdTq=>{MdTq>>>=(0x75bcd15-0O726746425),crypto[HbGI.fiMC(128)](sSrw(MdTq+(0O347010110&0x463A71D)));},[HbGI.bdHC(129)]:MxGr=>{MxGr>>>=(0x75bcd15-0O726746425);const ozJr=this[HbGI.b5yA(83)][HbGI.X10A(86)](MxGr+(0O347010110&0x463A71D),!(0x75bcd15-0O726746425));if(this[HbGI.fiMC(96)][ozJr]--,this[HbGI.fiMC(96)][ozJr]===(0x75bcd15-0O726746425)){const IuAr=this[HbGI.bdHC(89)][ozJr];this[HbGI.bdHC(89)][ozJr]=null,this[HbGI.zxwA(92)][HbGI.X10A(126)](IuAr),this[HbGI.X10A(94)][HbGI.faEA(130)](ozJr);}},[HbGI.b5yA(131)]:kwDr=>{kwDr>>>=(0x75bcd15-0O726746425),QQow(kwDr+24,oPlw(kwDr+(0O347010110&0x463A71D)));},[HbGI.zxwA(132)]:Erur=>{Erur>>>=(0x75bcd15-0O726746425);const gtxr=Reflect[HbGI.vsrA(93)](QwBv(Erur+(0O347010110&0x463A71D)),oPlw(Erur+16));Erur=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(Erur+32,gtxr);},[HbGI.X10A(134)]:Aoor=>{Aoor>>>=(0x75bcd15-0O726746425),Reflect[HbGI.bdHC(97)](QwBv(Aoor+(0O347010110&0x463A71D)),oPlw(Aoor+16),QwBv(Aoor+32));},[HbGI.nkOA(135)]:cqrr=>{cqrr>>>=(0x75bcd15-0O726746425),Reflect[HbGI.fiMC(136)](QwBv(cqrr+(0O347010110&0x463A71D)),oPlw(cqrr+16));},[HbGI.bdHC(137)]:cKes=>{cKes>>>=(0x75bcd15-0O726746425),QQow(cKes+24,Reflect[HbGI.vsrA(93)](QwBv(cKes+(0O347010110&0x463A71D)),ovyv(cKes+16)));},[HbGI.faEA(138)]:ELhs=>{ELhs>>>=(0x75bcd15-0O726746425),Reflect[HbGI.bdHC(97)](QwBv(ELhs+(0O347010110&0x463A71D)),ovyv(ELhs+16),QwBv(ELhs+24));},[HbGI.b5yA(139)]:YGYr=>{YGYr>>>=(0x75bcd15-0O726746425);try{const AIbs=QwBv(YGYr+(0O347010110&0x463A71D)),UDSr=Reflect[HbGI.vsrA(93)](AIbs,oPlw(YGYr+16)),wFVr=MNiw(YGYr+32),QAMr=Reflect[HbGI.zxwA(140)](UDSr,AIbs,wFVr);YGYr=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(YGYr+56,QAMr),this[HbGI.b5yA(83)][HbGI.vsrA(141)](YGYr+64,HbGI.u(36)?5:1);}catch(sCPr){YGYr=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(YGYr+56,sCPr),this[HbGI.b5yA(83)][HbGI.vsrA(141)](YGYr+64,HbGI.u(17)?0:1);}},[HbGI.X10A(142)]:sWCs=>{sWCs>>>=(0x75bcd15-0O726746425);try{const UXFs=QwBv(sWCs+(0O347010110&0x463A71D)),oTws=MNiw(sWCs+16),QUzs=Reflect[HbGI.zxwA(140)](UXFs,void (0x75bcd15-0O726746425),oTws);sWCs=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(sWCs+40,QUzs),this[HbGI.b5yA(83)][HbGI.vsrA(141)](sWCs+48,HbGI.u(40)?2:1);}catch(kQqs){sWCs=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(sWCs+40,kQqs),this[HbGI.b5yA(83)][HbGI.vsrA(141)](sWCs+48,HbGI.u(17)?0:-7);}},[HbGI.nkOA(143)]:MRts=>{MRts>>>=(0x75bcd15-0O726746425);try{const gNks=QwBv(MRts+(0O347010110&0x463A71D)),IOns=MNiw(MRts+16),kopp=Reflect[HbGI.fiMC(144)](gNks,IOns);MRts=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(MRts+40,kopp),this[HbGI.b5yA(83)][HbGI.vsrA(141)](MRts+48,HbGI.u(36)?-8:1);}catch(Mpsp){MRts=this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(133)]()>>>(0x75bcd15-0O726746425),QQow(MRts+40,Mpsp),this[HbGI.b5yA(83)][HbGI.vsrA(141)](MRts+48,HbGI.u(26)?0:11);}},[HbGI.bdHC(145)]:gljp=>{gljp>>>=(0x75bcd15-0O726746425),UzHv(gljp+16,parseInt(QwBv(gljp+(0O347010110&0x463A71D))[HbGI.X10A(22)]));},[HbGI.faEA(146)]:Immp=>{Immp>>>=(0x75bcd15-0O726746425);const cidp=AEQv[HbGI.b5yA(147)](String(QwBv(Immp+(0O347010110&0x463A71D))));QQow(Immp+16,cidp),UzHv(Immp+24,cidp[HbGI.X10A(22)]);},[HbGI.zxwA(148)]:Ejgp=>{Ejgp>>>=(0x75bcd15-0O726746425);const YeXo=QwBv(Ejgp+(0O347010110&0x463A71D));sSrw(Ejgp+16)[HbGI.bdHC(97)](YeXo);},[HbGI.vsrA(149)]:Agap=>{Agap>>>=(0x75bcd15-0O726746425),this[HbGI.b5yA(83)][HbGI.vsrA(141)](Agap+24,QwBv(Agap+(0O347010110&0x463A71D)) instanceof QwBv(Agap+16)?(0O57060516-0xbc614d):(0x75bcd15-0O726746425));},[HbGI.X10A(150)]:AANp=>{AANp>>>=(0x75bcd15-0O726746425);const cCQp=sSrw(AANp+(0O347010110&0x463A71D)),wxHp=QwBv(AANp+32);if(!(wxHp instanceof Uint8Array||wxHp instanceof Uint8ClampedArray)){this[HbGI.b5yA(83)][HbGI.vsrA(141)](AANp+48,HbGI.u(20)?0:-8);return;}const YyKp=wxHp[HbGI.nkOA(151)](HbGI.u(32)?-7:0,cCQp[HbGI.X10A(22)]);cCQp[HbGI.bdHC(97)](YyKp),UzHv(AANp+40,YyKp[HbGI.X10A(22)]),this[HbGI.b5yA(83)][HbGI.vsrA(141)](AANp+48,HbGI.u(40)?1:1);},[HbGI.fiMC(152)]:suBp=>{suBp>>>=(0x75bcd15-0O726746425);const UvEp=QwBv(suBp+(0O347010110&0x463A71D)),orvp=sSrw(suBp+16);if(!(UvEp instanceof Uint8Array||UvEp instanceof Uint8ClampedArray)){this[HbGI.b5yA(83)][HbGI.vsrA(141)](suBp+48,HbGI.u(20)?0:-10);return;}const Qsyp=orvp[HbGI.nkOA(151)](HbGI.u(32)?10:0,UvEp[HbGI.X10A(22)]);UvEp[HbGI.bdHC(97)](Qsyp),UzHv(suBp+40,Qsyp[HbGI.X10A(22)]),this[HbGI.b5yA(83)][HbGI.vsrA(141)](suBp+48,HbGI.u(40)?12:1);},[HbGI.bdHC(153)]:QMlq=>{console[HbGI.zxwA(20)](QMlq);}}};}async [HbGI.faEA(154)](sOoq){if(!(sOoq instanceof WebAssembly[HbGI.b5yA(155)]))throw new Error(HbGI.zxwA(156));this[HbGI.X10A(102)]=sOoq,this[HbGI.b5yA(83)]=new DataView(this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.b5yA(83)][HbGI.fiMC(104)]),this[HbGI.bdHC(89)]=[NaN,(0x75bcd15-0O726746425),null,!(0x75bcd15-0O726746425),!(0O57060516-0xbc614d),globalThis,this],this[HbGI.fiMC(96)]=new Array(this[HbGI.bdHC(89)][HbGI.X10A(22)])[HbGI.vsrA(157)]((0O57060516-0xbc614d)/(0x75bcd15-0O726746425)),this[HbGI.zxwA(92)]=new Map([[(0x75bcd15-0O726746425),(0O57060516-0xbc614d)],[null,(15658734^0O73567354)],[!(0x75bcd15-0O726746425),(0O334664274-0x37368B9)],[!(0O57060516-0xbc614d),(0x5E30A78-0O570605164)],[globalThis,(0O507646144^0x51F4C61)],[this,(1011010-0O3666474)]]),this[HbGI.X10A(94)]=[],this[HbGI.faEA(114)]=!(0O57060516-0xbc614d);let MJfq=4096;const oLiq=EDTp=>{const gFWp=MJfq,gZJq=AEQv[HbGI.b5yA(147)](EDTp+HbGI.X10A(158));return new Uint8Array(this[HbGI.b5yA(83)][HbGI.fiMC(104)],MJfq,gZJq[HbGI.X10A(22)])[HbGI.bdHC(97)](gZJq),MJfq+=gZJq[HbGI.X10A(22)],MJfq%(0O347010110&0x463A71D)!==(0x75bcd15-0O726746425)&&(MJfq+=(0O347010110&0x463A71D)-MJfq%(0O347010110&0x463A71D)),gFWp;},IGZp=this[HbGI.fiMC(72)][HbGI.X10A(22)],kIcq=[];this[HbGI.fiMC(72)][HbGI.nkOA(159)](IaNq=>{kIcq[HbGI.faEA(130)](oLiq(IaNq));}),kIcq[HbGI.faEA(130)](HbGI.u(17)?0:-7),Object[HbGI.fiMC(160)](this[HbGI.faEA(74)])[HbGI.bdHC(161)]()[HbGI.nkOA(159)](cWDq=>{kIcq[HbGI.faEA(130)](oLiq(`${cWDq}${HbGI.faEA(162)}${this[HbGI.faEA(74)][cWDq]}`));}),kIcq[HbGI.faEA(130)](HbGI.u(32)?11:0);const EXGq=MJfq;if(kIcq[HbGI.nkOA(159)](YSxq=>{this[HbGI.b5yA(83)][HbGI.zxwA(84)](MJfq,YSxq,!(0x75bcd15-0O726746425)),this[HbGI.b5yA(83)][HbGI.zxwA(84)](MJfq+(0x5E30A78-0O570605164),HbGI.u(36)?-5:0,!(0x75bcd15-0O726746425)),MJfq+=(0O347010110&0x463A71D);}),MJfq>=12288)throw new Error(HbGI.b5yA(163));this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.faEA(154)](IGZp,EXGq),this[HbGI.faEA(114)]&&this[HbGI.nkOA(79)](),await this[HbGI.X10A(78)];}[HbGI.faEA(122)](){if(this[HbGI.faEA(114)])throw new Error(HbGI.zxwA(164));this[HbGI.X10A(102)][HbGI.nkOA(103)][HbGI.vsrA(165)](),this[HbGI.faEA(114)]&&this[HbGI.nkOA(79)]();}[HbGI.X10A(166)](AUAq){const UPrq=this;return function(){const wRuq={[HbGI.nkOA(167)]:AUAq,[HbGI.fiMC(168)]:this,[HbGI.bdHC(169)]:arguments};return UPrq[HbGI.fiMC(80)]=wRuq,UPrq[HbGI.faEA(122)](),wRuq[HbGI.faEA(170)];};}};})();process[HbGI.fiMC(72)][HbGI.X10A(22)]!==(0O334664274-0x37368B9)&&(console[HbGI.zxwA(20)](`${HbGI.b5yA(171)}`),process[HbGI.b5yA(75)](HbGI.u(20)?1:8));const Yqwn=new Go();Yqwn[HbGI.fiMC(72)]=[];Yqwn[HbGI.faEA(74)]={[HbGI.zxwA(172)]:HbGI.vsrA(173),[HbGI.X10A(174)]:process[HbGI.fiMC(72)][(15658734^0O73567354)]};Yqwn[HbGI.b5yA(75)]=process[HbGI.b5yA(75)];fetch(UDKB)[HbGI.nkOA(175)](Aszn=>Aszn[HbGI.fiMC(176)]())[HbGI.nkOA(175)](Unqn=>u(l[HbGI.bdHC(177)](Unqn)))[HbGI.nkOA(175)](wptn=>WebAssembly[HbGI.faEA(178)](wptn,Yqwn[HbGI.zxwA(108)]))[HbGI.nkOA(175)](Qkkn=>((process[HbGI.b5yA(179)](HbGI.b5yA(75),smnn=>{smnn===(0x75bcd15-0O726746425)&&!Yqwn[HbGI.faEA(114)]&&(Yqwn[HbGI.fiMC(80)]={[HbGI.nkOA(167)]:0},Yqwn[HbGI.faEA(122)]());}),Yqwn[HbGI.faEA(154)](Qkkn[HbGI.zxwA(180)]),Qkkn)))[HbGI.vsrA(181)](Mhen=>{console[HbGI.X10A(182)](Mhen),process[HbGI.b5yA(75)](HbGI.u(36)?-3:1);});

不知道是什么,但是不重要了