2019年红帽杯CTF竞赛中的这道easyRE题目,是一个典型的逆向工程挑战。作为一名长期活跃在CTF赛场的逆向选手,这类题目往往考察我们对程序逻辑的敏锐洞察力和快速分析能力。题目提供了一个名为easyRE的ELF可执行文件,我们需要通过逆向分析找到隐藏的flag。
拿到题目后,我首先进行了基础检查。使用file命令确认这是一个64位的ELF文件,然后通过checksec工具查看保护机制:
bash复制$ file easyRE
easyRE: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=..., stripped
$ checksec --file=easyRE
[*] '/tmp/easyRE'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x400000)
从保护机制来看,程序开启了栈保护(Canary)和NX(不可执行栈),但没有启用PIE(地址随机化)。这意味着我们可以直接使用静态分析工具IDA Pro来查看程序的固定地址。
在逆向工程中,字符串往往是重要的突破口。我使用IDA Pro打开文件后,首先按下F12查看字符串窗口,发现了一个明显的提示字符串"You found me!!"。双击跳转到引用位置,来到了sub_4009C6函数。
这个函数看起来是程序的核心验证逻辑。函数开头定义了一系列字符变量(v12-v47),这些字符的ASCII值被直接硬编码在程序中:
c复制v12 = 73; // 'I'
v13 = 111; // 'o'
v14 = 100; // 'd'
// ... 后续省略
这些字符组合起来形成了三段数据:
在函数的主体部分,我们发现了一个关键的解密逻辑:
c复制for ( i = 0; i < (unsigned __int64)sub_424BA0(v48); ++i )
{
if ( (unsigned __int8)(v48[i] ^ i) != *(&v12 + i) )
{
result = 4294967294LL;
goto LABEL_13;
}
}
这段代码表明,程序会将用户输入v48的每个字符与其索引值i进行异或操作,然后与硬编码的字符数组进行比较。如果全部匹配,就会输出"continue!"提示。
基于这个逻辑,我们可以编写Python脚本逆向计算出原始flag:
python复制segments = [
"Iodl>Qnb(ocy", 127,
"y.i", 127,
"d`3w}wek9{iy=~yL@EC"
]
v12 = []
for seg in segments:
if isinstance(seg, str):
v12.extend(ord(c) for c in seg)
else:
v12.append(seg)
flag_part1 = ''.join(chr(v12[i] ^ i) for i in range(len(v12)))
print("第一部分解密结果:", flag_part1)
运行脚本后,我们得到了一个提示信息:"Info:The first four chars are 'flag'"。这告诉我们flag的前四个字符确实是"flag",但完整的flag还需要进一步分析。
在通过第一层验证后,程序会继续读取用户输入,并进行第二层验证:
c复制v1 = sub_400E44(&v51);
v2 = sub_400E44(v1);
v3 = sub_400E44(v2);
// ... 共10次调用
if ( !(unsigned int)sub_400360(v10, off_6CC090) )
{
sub_410CC0("You found me!!!");
sub_410CC0("bye bye~");
}
分析sub_400E44函数,发现它是一个标准的Base64编码函数。程序将用户输入连续进行了10次Base64编码,然后与off_6CC090处的字符串进行比较。
查看off_6CC090处的数据,我们找到了目标字符串:
code复制Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTV0ZKdGVGWlZNakExVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZacVFtRlpWbHAwVFZSU1ZrMXJjRmhVVlZwM1ZqSktWVkpZWkZwbGEzQklWbXBHVDJSV1ZuUmhSazVzWWxob1dGWnRNWGRVTWtwSlVXcFNWV0pZYUhCVmFrWnpWakZrY21GR1pGaFNNMmhVV1d0a1UxWnJNVmRqUld4V1lsaG9WRmx0ZEV0WFJteHpXa1pPV0ZKcmJEVlZla1pYVjBaT2NscEdhR2xTTW1ob1YxZDBhMUl4V1hoWGJHaGhVbFJzVjFSV1dsWmxSbVJ5V2taT1YySlZjRWRaTUZaclpERlplV1JHVGxSU1ZuQlpXVEJhVDJOdFJrZFViR1JwVjBkb1dWWnRlR0ZaVm1SR1RsWmFVRll4U2xwV2JHTjRaREExYzFkc1pHcFNWR3hoV1ZSS2IxWXhXblZTYlhSWFRWWndlbFl5ZUdGV01rWnlUbFprVG1KR2NEQkRiVlpIVjJ0a2FGSnVRbFZXYlhoM1VqRndSMVp0UmxOTlZuQXdXa1ZrUzFkV1ZuSlBWbHBvWVRGd1NWWkhlR0ZaVmxwMFRVaG9hbEpzY0ZsWmJGWmhZekZrVjFwR1RtaE5XRUpJVm0xNGExVXhXWGhhU0ZaVllrWktjRlZxUmt0V1ZsbDVaVWRHVjJKSFVrOVdha0Y0VGxaYVdFMVZPV2hTYXpWd1ZXMTRkMlZzV2xoTlZGSlhUV3R3TUZrd1ZtdFhSbEp6V2taV1ZXSkhhRlJXTUZwWFYxWmFkR1ZJWkZSaVJscFlWVzB4TkZkR1duRlJiSEJYVW14d2VsWXlNVFJoUmxwWVpVZEdXRkl3VmpSWk1GSlBVMVpXY1ZKc1pHaFNia0pQVm0wd2QyVkdVblZXYms1b1VteHdWbFp0TVRCWlZscHlWMjVTVm1KSFVubFhWbHBoVjBkUmVtRkhkRlJOVm5CSlZtcEdhMlF4V25OalJXaFhWak5vZGxsV1dsTmpNV1IwVTJ0b1ZHSnRVbGhWYlhNeFZERmFjVk5yWkZoaVZWcFlXV3RrYjFZeFduSk5XRXBxVWxkNFYxbHJXbmRsVmtwMVVteGFUbFpzY0ZkWFZscGhVakZrY2xwR1NrNVdNVWwzVmxjeE5HUXlTa2hWYkdSWVltdHdXVlp0ZUZOWFJsVjNWMjFHV2xaV1ZqUmFSV1JIVWpGT2RWVnNXbWxTYmtKWFZGWmFhMVp0U2tkV2JHUnBWa1ZhV1ZaWGVHRmtNbFp5VDFaa1YyVnNXakJXYWtwTFYxWmFjVkp0UmxwV2JIQXdXbFZrUzFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1dtRXlhRlJXYWtwTFUxWmFjVk5zWkZoaVJscFlWVzB4ZDFZeFpISmhSM2hUVFZad1dGWnRNVk5XTURGeVRsWmtXRkl4U2xCV2JHaERVMVpXY1ZKdFJtcFNiVkp3Vld4b2IxWXhXWGhYYmtaVllrWndjRlZ0ZUhkaFJUQjVZVVp3YUdWc1dsWlhiRnB6VlcxR05sSnJOVmROVjFKSVZqSjRZVmRHYkhKWGJtUnFUV3RhU0ZVeU5VOVhSMHBJVld4c1