声明:本文仅供学习研究,严禁用于非法用途,否则后果自负!如有侵权,请告知删除,谢谢。
缘由
我在 JS逆向:猿人学爬虫比赛第五题详细题解(上) 这篇文章里介绍了AST反混淆的思路,现在来看看 如何进行大数组字面量元素替换。
样例地址
"aHR0cHM6Ly93d3cubmlrZS5jb20vc3RhdGljL2QwZmU4NDViOWEwdGkyMDkxYjg5NThmZjIxZDA0ZDg2YQ=="
样本分析
将代码复制并格式化保存为js文件后,可以看到代码开头定义了这么一个数组:
var _ac = ["\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65", "\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74", "\x64\x6f\x61\x63\x74", "\x62\x61\x74\x3a", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x36\x2c", "\x67\x65\x74\x66\x6f\x72\x6d\x69\x6e\x66\x6f", "\x4a\x61\x76\x61\x20\x41\x70\x70\x6c\x65\x74\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x6d\x65\x5f\x63\x6e\x74", "\x6f\x6e\x4c\x69\x6e\x65", "\x41\x76\x65\x6e\x69\x72\x20\x4e\x65\x78\x74", "\x50\x61\x70\x79\x72\x75\x73", "\x70\x6f\x69\x6e\x74\x65\x72\x54\x79\x70\x65", "\x6d\x6e\x5f\x6d\x63\x5f\x6c\x6d\x74", "\x68\x70\x64", "\x2c\x73\x37\x3a", "\x67\x65\x74\x46\x6c\x6f\x61\x74\x56\x61\x6c", "\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74", "\x64\x61\x74\x61", "\x43\x6f\x72\x73\x69\x76\x61\x20\x48\x65\x62\x72\x65\x77", "\x68\x6e", "\x70\x65\x72\x73\x69\x73\x74\x65\x6e\x74\x2d\x73\x74\x6f\x72\x61\x67\x65", "\x6e\x6f\x6e\x3a", "\x3d", "\x53\x69\x6c\x76\x65\x72\x6c\x69\x67\x68\x74\x20\x50\x6c\x75\x67\x2d\x49\x6e", "\x61\x62", "\x73\x66\x34", "\x62\x6d", "\x55\x6e\x69\x74\x79\x20\x50\x6c\x61\x79\x65\x72", "\x57\x69\x64\x65\x76\x69\x6e\x65\x20\x43\x6f\x6e\x74\x65\x6e\x74\x20\x44\x65\x63\x72\x79\x70\x74\x69\x6f\x6e\x20\x4d\x6f\x64\x75\x6c\x65", "\x6b\x65\x79\x75\x70", "\x63\x68\x69\x6c\x64\x4e\x6f\x64\x65\x73", "\x64\x6f\x5f\x64\x69\x73", "\x42\x69\x72\x63\x68\x20\x53\x74\x64", "\x69\x73\x20\x6e\x6f\x74\x20\x61\x20\x76\x61\x6c\x69\x64\x20\x65\x6e\x75\x6d\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x74\x79\x70\x65\x20\x50\x65\x72\x6d\x69\x73\x73\x69\x6f\x6e\x4e\x61\x6d\x65", "\x76\x63\x61\x63\x74", "\x5c\x5c\x22", "\x73\x70\x61\x77\x6e", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x39\x2c", "\x63\x6e\x73", "\x63\x6c\x69\x63\x6b", "\x68\x76\x63", "\x63\x65\x5f\x6a\x73\x5f\x70\x6f\x73\x74", "\x74\x6f\x75\x63\x68\x65\x6e\x64", "\x74\x6f\x46\x69\x78\x65\x64", "\x67\x79\x72\x6f\x73\x63\x6f\x70\x65", "\x78", "\x6d\x6f\x7a\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e", "\x57\x65\x62\x4b\x69\x74\x2d\x69\x6e\x74\x65\x67\x72\x69\x65\x72\x74\x65\x20\x50\x44\x46", "\x63\x63", "\x22\x7d", "\x6d\x6f\x7a\x48\x69\x64\x64\x65\x6e", "\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73", "\x50\x49", "\x73\x65\x6e\x64", "\x67\x65\x74\x5f\x73\x74\x6f\x70\x5f\x73\x69\x67\x6e\x61\x6c\x73", "\x66\x6f\x6e\x74", "\x64\x32", "\x73\x65\x6e\x64\x42\x65\x61\x63\x6f\x6e", "\x6f\x6e\x6c\x6f\x61\x64", "\x6d\x6d\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x72\x65\x71\x75\x65\x73\x74\x4d\x65\x64\x69\x61\x4b\x65\x79\x53\x79\x73\x74\x65\x6d\x41\x63\x63\x65\x73\x73", "\x69\x73\x54\x72\x75\x73\x74\x65\x64", "\x66\x69\x6c\x6c\x54\x65\x78\x74", "\x64\x69\x73\x70\x6c\x61\x79", "\x7b\x22\x73\x65\x73\x73\x69\x6f\x6e\x5f\x69\x64\x22\x20\x3a\x20\x22", "\x61\x6a\x5f\x73\x73", "\x6d\x6f\x75\x73\x65\x75\x70", "\x52\x6f\x62\x6f\x74\x6f", "\x7e", "\x55\x62\x75\x6e\x74\x75\x20\x52\x65\x67\x75\x6c\x61\x72", "\x64\x6f\x61\x5f\x74\x68\x72\x6f\x74\x74\x6c\x65", "\x6b\x65\x5f\x76\x65\x6c", "\x6a\x73\x5f\x70\x6f\x73\x74", "\x73\x68\x69\x66\x74", "\x63\x68\x72\x6f\x6d\x65", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x32\x2c", "\x55\x62\x75\x6e\x74\x75\x20\x4d\x65\x64\x69\x75\x6d", "\x69\x64", "\x41\x76\x65\x6e\x69\x72", "\x2d", "\x72\x76\x65", "\x73\x6f\x72\x74", "\x63\x72\x65\x64\x65\x6e\x74\x69\x61\x6c\x73", "\x50\x4f\x53\x54", "\x6d\x6e\x5f\x73", "\x6d\x61\x70", "\x70\x72\x65\x76\x66\x69\x64", "\x6f\x6e\x6d\x6f\x75\x73\x65\x64\x6f\x77\x6e", "\x6d\x65\x73\x73\x61\x67\x65", "\x2f", "\x6d\x6f\x7a\x52\x54\x43\x50\x65\x65\x72\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e", "\x73\x74\x6f\x72\x65\x57\x65\x62\x57\x69\x64\x65\x54\x72\x61\x63\x6b\x69\x6e\x67\x45\x78\x63\x65\x70\x74\x69\x6f\x6e", "\x71\x75\x65\x72\x79", "\x62\x64", "\x70\x69", "\x63\x6f\x6f\x6b\x69\x65\x45\x6e\x61\x62\x6c\x65\x64", "\x61\x63\x63\x65\x6c\x65\x72\x6f\x6d\x65\x74\x65\x72", "\x3d\x3d", "\x67\x62\x72\x76", "\x68\x61\x73\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79", "\x76\x63", "\x70\x6c\x65\x6e", "\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x6d\x6c\x6c\x69", "\x65\x76\x65\x6e\x74", "\x70\x72\x6f\x6d\x70\x74", "\x39\x30\x70\x78", "\x76\x65\x72", "\x43\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72", "\x68\x6b\x64", "\x2f\x2f", "\x61\x70\x70\x65\x6e\x64\x43\x68\x69\x6c\x64", "\x36\x70\x74\x20\x41\x72\x69\x61\x6c", "\x3b\x20", "\x57\x69\x6e\x64\x6f\x77\x73\x20\x4d\x65\x64\x69\x61\x20\x50\x6c\x61\x79\x65\x72\x20\x50\x6c\x75\x67\x2d\x69\x6e\x20\x44\x79\x6e\x61\x6d\x69\x63\x20\x4c\x69\x6e\x6b\x20\x4c\x69\x62\x72\x61\x72\x79", "\x6d\x6e\x5f\x77", "\x51\x75\x69\x63\x6b\x73\x61\x6e\x64", "\x6d\x61\x63\x74", "\x22\x2c\x22\x73\x65\x6e\x73\x6f\x72\x5f\x64\x61\x74\x61\x22\x20\x3a\x20\x22", "\x6d\x6e\x5f\x63\x74", "\x68\x74\x73", "\x41\x72\x69\x61\x6c\x48\x65\x62\x72\x65\x77\x2d\x4c\x69\x67\x68\x74", "\x6f\x6e\x6b\x65\x79\x70\x72\x65\x73\x73", "\x69\x50\x68\x6f\x74\x6f\x50\x68\x6f\x74\x6f\x63\x61\x73\x74", "\x6d\x6e\x5f\x69\x6e\x69\x74", "\x6f\x66\x66", "\x3c\x69\x6e\x69\x74\x2f\x3e", "\x61\x6a\x5f\x6c\x6d\x74\x5f\x74\x61\x63\x74", "\x70\x6d\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x7a\x31", "\x41\x70\x70\x6c\x65\x20\x47\x6f\x74\x68\x69\x63", "\x64\x69\x76", "\x73\x74\x61\x72\x74\x54\x72\x61\x63\x6b\x69\x6e\x67", "\x69\x6e\x73", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x31\x2c", "\x65\x6e\x47\x65\x74\x4c\x6f\x63", "\x73\x63\x72\x65\x65\x6e", "\x62\x63", "\x57\x69\x6e\x67\x64\x69\x6e\x67\x73\x20\x32", "\x64\x63\x73", "\x6d\x6e\x5f\x74\x63\x6c", "\x5f", "\x73\x65\x72\x76\x69\x63\x65\x57\x6f\x72\x6b\x65\x72", "\x70\x6d\x65\x5f\x63\x6e\x74", "\x66\x70\x56\x61\x6c\x43\x61\x6c\x63\x75\x6c\x61\x74\x65\x64", "\x70\x61\x67\x65\x58", "\x65\x6e\x63\x6f\x64\x65", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x30\x2c", "\x65\x6d\x61\x69\x6c", "\x70\x6f\x69\x6e\x74\x65\x72\x75\x70", "\x68\x6d\x64", "\x3b", "\x61\x6c\x70\x68\x61", "\x44\x61\x6d\x61\x73\x63\x75\x73", "\x6d\x6e\x5f\x75\x70\x64\x61\x74\x65\x5f\x63\x68\x61\x6c\x6c\x65\x6e\x67\x65\x5f\x64\x65\x74\x61\x69\x6c\x73", "\x62\x6d\x69\x73\x63", "\x70\x6f\x69\x6e\x74\x65\x72\x64\x6f\x77\x6e", "\x64\x65\x66\x61\x75\x6c\x74\x56\x61\x6c\x75\x65", "\x47\x69\x6c\x6c\x20\x53\x61\x6e\x73\x20\x4d\x54", "\x61\x6a\x5f\x6c\x6d\x74\x5f\x64\x6d\x61\x63\x74", "\x70\x6c\x75\x67\x69\x6e\x73", "\x73\x70\x61\x6e", "\x61\x72\x63", "\x66\x69\x64\x63\x6e\x74", "\x76\x69\x62\x3a", "\x64\x65\x66\x61\x75\x6c\x74", "\x65\x6e\x52\x65\x61\x64\x44\x6f\x63\x55\x72\x6c", "\x73\x70\x6c\x69\x63\x65", "\x64\x72\x69\x76\x65\x72", "\x61\x70\x69\x63\x61\x6c\x6c\x5f\x62\x6d", "\x78\x31\x32\x3a", "\x70\x64\x75\x63\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x67\x65\x74\x56\x6f\x69\x63\x65\x73", "\x72\x65\x67\x69\x73\x74\x65\x72\x50\x72\x6f\x74\x6f\x63\x6f\x6c\x48\x61\x6e\x64\x6c\x65\x72", "\x6d\x6e\x5f\x61\x62\x63\x6b", "\x73\x63\x3a", "\x6d\x73\x48\x69\x64\x64\x65\x6e", "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f", "\x68\x70\x75", "\x6f\x6e\x6b\x65\x79\x75\x70", "\x75\x61\x72", "\x65\x78\x70", "\x63\x6d\x61", "\x73\x74\x61\x72\x74\x64\x6f\x61\x64\x6d\x61", "\x54\x69\x6d\x65\x73", "\x66\x6d", "\x66\x70\x63\x66", "\x70\x73\x75\x62", "\x74\x6f\x75\x63\x68\x73\x74\x61\x72\x74", "\x72\x75\x6e\x46\x6f\x6e\x74\x73", "\x74\x69\x6d\x65\x7a\x6f\x6e\x65\x4f\x66\x66\x73\x65\x74\x4b\x65\x79", "\x63\x61\x6c\x63\x5f\x66\x70", "\x65\x6d\x69\x74", "\x63\x64\x6f\x61", "\x73\x6c\x69\x63\x65", "\x63\x61\x6d\x65\x72\x61", "\x64\x6d\x5f\x64\x69\x73", "\x6f\x70\x63\x3a", "\x78\x31\x31\x3a", "\x41\x64\x6f\x62\x65\x41\x41\x4d\x44\x65\x74\x65\x63\x74", "\x63\x66\x5f\x75\x72\x6c", "\x74\x6f\x75\x63\x68\x6d\x6f\x76\x65", "\x67\x65\x74\x6d\x72", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x38\x2c", "\x4d\x6f\x6e\x61\x63\x6f", "\x6c\x65\x6e\x67\x74\x68", "\x6b\x65\x79\x64\x6f\x77\x6e", "\x6f\x75\x74\x65\x72\x57\x69\x64\x74\x68", "\x61\x63\x6f\x73", "\x72\x67\x62\x28\x31\x30\x32\x2c\x20\x32\x30\x34\x2c\x20\x30\x29", "\x66\x73\x70", "\x6f\x64", "\x67\x65\x74\x53\x74\x6f\x72\x61\x67\x65\x55\x70\x64\x61\x74\x65\x73", "\x61\x66\x53\x62\x65\x70\x38\x79\x6a\x6e\x5a\x55\x6a\x71\x33\x61\x4c\x30\x31\x30\x6a\x4f\x31\x35\x53\x61\x77\x6a\x32\x56\x5a\x66\x64\x59\x4b\x38\x75\x59\x39\x30\x75\x78\x71", "\x43\x61\x6c\x69\x62\x72\x69", "\x74\x68\x65\x6e", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x33\x2c", "\x46\x69\x6c\x65\x52\x65\x61\x64\x65\x72", "\x68\x66", "\x43\x68\x72\x6f\x6d\x65\x20\x50\x44\x46\x20\x56\x69\x65\x77\x65\x72", "\x64\x65\x76\x69\x63\x65\x2d\x69\x6e\x66\x6f", "\x77\x67\x6c", "\x44\x65\x66\x61\x75\x6c\x74\x20\x42\x72\x6f\x77\x73\x65\x72\x20\x48\x65\x6c\x70\x65\x72", "\x3a", "\x61\x6a\x5f\x6c\x6d\x74\x5f\x64\x6f\x61\x63\x74", "\x4d\x53\x49\x45", "\x69\x73\x49\x67\x6e", "\x58\x4d\x4c\x48\x74\x74\x70\x52\x65\x71\x75\x65\x73\x74", "\x63\x61\x6c\x6c\x50\x68\x61\x6e\x74\x6f\x6d", "\x4e\x61\x74\x69\x76\x65\x20\x43\x6c\x69\x65\x6e\x74", "\x6d\x73\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x63\x68\x61\x6e\x67\x65", "\x64\x65\x6e\x69\x65\x64", "\x74\x65\x78\x74", "\x6d\x6e\x5f\x6c\x63\x6c", "\x79", "\x63\x73", "\x77\x65\x62\x73\x74\x6f\x72\x65", "\x65\x6e\x41\x64\x64\x48\x69\x64\x64\x65\x6e", "\x74\x6f\x53\x74\x72\x69\x6e\x67", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x31\x2c", "\x72\x56\x61\x6c", "\x68\x63", "\x6d\x6e\x5f\x72\x74\x73", "\x52\x65\x61\x6c\x50\x6c\x61\x79\x65\x72\x20\x56\x65\x72\x73\x69\x6f\x6e\x20\x50\x6c\x75\x67\x69\x6e", "\x43\x6f\x75\x72\x69\x65\x72\x20\x4e\x65\x77", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x34\x2c", "\x47\x65\x6e\x65\x76\x61", "\x61\x70\x70\x4d\x69\x6e\x6f\x72\x56\x65\x72\x73\x69\x6f\x6e", "\x64\x6d\x61\x5f\x74\x68\x72\x6f\x74\x74\x6c\x65", "\x2c\x6c\x6f\x63\x3a", "\x53\x68\x72\x65\x65\x20\x44\x65\x76\x61\x6e\x61\x67\x61\x72\x69\x20\x37\x31\x34", "\x77\x6c", "\x73\x65\x61\x72\x63\x68", "\x6c\x6f\x63", "\x77\x65\x62\x72\x74\x63\x4b\x65\x79", "\x6e\x70", "\x61\x6c\x74\x4b\x65\x79", "\x74\x73\x74", "\x3c\x2f\x62\x70\x64\x3e", "\x67\x65\x74\x5f\x63\x66\x5f\x64\x61\x74\x65", "\x6d\x65\x64\x69\x61\x44\x65\x76\x69\x63\x65\x73", "\x61\x6a\x5f\x69\x6e\x64\x78\x5f\x74\x61\x63\x74", "\x63\x6c\x69\x65\x6e\x74\x59", "\x50\x61\x6c\x61\x74\x69\x6e\x6f", "\x70\x61\x72\x61\x6d\x73\x5f\x75\x72\x6c", "\x52\x65\x61\x6c\x50\x6c\x61\x79\x65\x72\x28\x74\x6d\x29\x20\x47\x32\x20\x4c\x69\x76\x65\x43\x6f\x6e\x6e\x65\x63\x74\x2d\x45\x6e\x61\x62\x6c\x65\x64\x20\x50\x6c\x75\x67\x2d\x49\x6e\x20\x28\x33\x32\x2d\x62\x69\x74\x29", "\x66\x69\x6c\x6c\x52\x65\x63\x74", "\x64\x6d\x3a", "\x62\x64\x6d", "\x69\x6e\x66\x6f\x72\x6d\x69\x6e\x66\x6f", "\x73\x75\x62\x73\x74\x72\x69\x6e\x67", "\x62\x75\x74\x74\x6f\x6e", "\x61\x6a\x5f\x69\x6e\x64\x78\x5f\x64\x6d\x61\x63\x74", "\x53\x65\x72\x69\x66", "\x77\x65\x62\x6b\x69\x74\x54\x65\x6d\x70\x6f\x72\x61\x72\x79\x53\x74\x6f\x72\x61\x67\x65", "\x3c\x73\x65\x74\x53\x44\x46\x4e\x3e", "\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x73\x79\x6e\x63", "\x64\x6f\x4e\x6f\x74\x54\x72\x61\x63\x6b", "\x67\x65\x74\x64\x75\x72\x6c", "\x63\x6b\x69\x65", "\x61\x6d\x62\x69\x65\x6e\x74\x2d\x6c\x69\x67\x68\x74\x2d\x73\x65\x6e\x73\x6f\x72", "\x4d\x65\x6e\x6c\x6f", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x35\x2c", "\x72\x65\x70\x6c\x61\x63\x65", "\x6d\x6f\x7a\x49\x73\x4c\x6f\x63\x61\x6c\x6c\x79\x41\x76\x61\x69\x6c\x61\x62\x6c\x65", "\x2c", "\x4c\x6f\x62\x73\x74\x65\x72", "\x61\x6a\x5f\x69\x6e\x64\x78\x5f\x64\x6f\x61\x63\x74", "\x77\x65\x62\x6b\x69\x74\x52\x54\x43\x50\x65\x65\x72\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e", "\x66\x6f\x72\x45\x61\x63\x68", "\x64\x6f\x63\x75\x6d\x65\x6e\x74", "\x73\x65\x6c\x65\x6e\x69\x75\x6d", "\x6e\x6f\x77", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x39\x2c", "\x61\x6a\x5f\x69\x6e\x64\x78", "\x68\x74\x65", "\x61\x63\x63\x65\x6c\x65\x72\x61\x74\x69\x6f\x6e", "\x74\x61", "\x73\x74\x72\x69\x6e\x67", "\x62\x6f\x64\x79", "\x66\x75\x6e\x63\x74\x69\x6f\x6e", "\x73\x68\x69\x66\x74\x4b\x65\x79", "\x66\x6c\x6f\x6f\x72", "\x74\x6f", "\x72\x67\x62\x28\x31\x32\x30\x2c\x20\x31\x38\x36\x2c\x20\x31\x37\x36\x29", "\x5f\x61\x62\x63\x6b", "\x6e\x61\x76\x5f\x70\x65\x72\x6d", "\x73\x65\x73\x73\x69\x6f\x6e\x5f\x69\x64", "\x6d\x6e\x5f\x6c\x63", "\x2c\x73\x31\x3a", "\x61\x75\x74\x68", "\x48\x65\x6c\x76\x65\x74\x69\x63\x61\x20\x4e\x65\x75\x65", "\x77\x76", "\x6d\x6e\x5f\x69\x6c", "\x2c\x73\x32\x3a", "\x69\x6e\x6e\x65\x72\x48\x65\x69\x67\x68\x74", "\x74\x65\x5f\x63\x6e\x74", "\x56\x65\x72\x73\x69\x6f\x6e\x2f\x34\x2e\x30", "\x50\x6f\x69\x6e\x74\x65\x72\x45\x76\x65\x6e\x74", "\x74\x79\x70\x65", "\x64\x6f\x61\x64\x6d\x61\x5f\x65\x6e", "\x64\x6f\x65\x5f\x76\x65\x6c", "\x63\x68\x6b\x6e\x75\x6c\x6c", "\x4e\x69\x6d\x62\x75\x73\x20\x52\x6f\x6d\x61\x6e\x20\x4e\x6f\x20\x39\x20\x4c", "\x50\x61\x6c\x61\x74\x69\x6e\x6f\x2d\x42\x6f\x6c\x64", "\x63\x6c\x69\x65\x6e\x74\x58", "\x66\x63\x3a", "\x43\x61\x6e\x74\x61\x72\x65\x6c\x6c", "\x6c\x61\x6e\x67\x75\x61\x67\x65", "\x68\x6b\x70", "\x53\x6f\x75\x72\x63\x65\x20\x53\x61\x6e\x73\x20\x50\x72\x6f", "\x66\x61\x73", "\x7b\x22\x73\x65\x6e\x73\x6f\x72\x5f\x64\x61\x74\x61\x22\x3a\x22", "\x68\x74\x74\x70\x73\x3a\x2f\x2f", "\x77\x69\x74\x68\x43\x72\x65\x64\x65\x6e\x74\x69\x61\x6c\x73", "\x70\x69\x78\x65\x6c\x44\x65\x70\x74\x68", "\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x73\x42\x79\x54\x61\x67\x4e\x61\x6d\x65", "\x44\x65\x76\x69\x63\x65\x4f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x45\x76\x65\x6e\x74", "\x6d\x72", "\x63\x68\x61\x72\x43\x6f\x64\x65", "\x74\x6f\x44\x61\x74\x61\x55\x52\x4c", "\x78\x61\x67\x67", "\x6d\x6e\x5f\x63\x64", "\x43\x65\x6e\x74\x75\x72\x79\x20\x47\x6f\x74\x68\x69\x63", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x35\x2c", "\x67\x65\x74\x42\x61\x74\x74\x65\x72\x79", "\x63\x6c\x69\x65\x6e\x74\x57\x69\x64\x74\x68", "\x4c\x61\x74\x6f", "\x63\x65\x69\x6c", "\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x2e\x58\x4d\x4c\x48\x54\x54\x50", "\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74", "\x47\x6f\x6f\x67\x6c\x65\x20\x54\x61\x6c\x6b\x20\x50\x6c\x75\x67\x69\x6e\x20\x56\x69\x64\x65\x6f\x20\x52\x65\x6e\x64\x65\x72\x65\x72", "\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c", "\x6d\x6e\x5f\x70\x72", "\x73\x74\x72\x6f\x6b\x65", "\x74\x64\x75\x63\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x6d\x6e\x5f\x73\x74\x6f\x75\x74", "\x2c\x63\x70\x65\x6e\x3a", "\x6b\x61\x63\x74", "\x6d\x64\x75\x63\x65\x5f\x63\x6e\x74", "\x63\x6c\x69\x70\x62\x6f\x61\x72\x64", "\x77\x65\x6e", "\x6d\x6e\x5f\x63\x63", "\x70\x61\x72\x73\x65", "\x64\x6f\x63\x75\x6d\x65\x6e\x74\x4d\x6f\x64\x65", "\x70\x64", "\x6d\x2c\x45\x76\x21\x78\x56\x36\x37\x42\x61\x55\x3e\x20\x65\x68\x32\x6d\x3c\x66\x33\x41\x47\x33\x40", "\x67\x65\x74\x5f\x74\x79\x70\x65", "\x6d\x6e\x5f\x74\x6f\x75\x74", "\x62\x72\x61\x76\x65", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x32\x2c", "\x70\x6c\x75\x67\x69\x6e\x49\x6e\x66\x6f", "\x70\x61\x72\x73\x65\x5f\x67\x70", "\x72\x65\x71\x75\x69\x72\x65\x64", "\x5c\x27", "\x6d\x6e\x5f\x61\x6c", "\x46\x61\x6e\x74\x61\x73\x71\x75\x65\x20\x53\x61\x6e\x73\x20\x4d\x6f\x6e\x6f", "\x77\x65\x62\x6b\x69\x74\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x63\x68\x61\x6e\x67\x65", "\x72\x65\x6d\x6f\x76\x65\x43\x68\x69\x6c\x64", "\x6d\x6f\x75\x73\x65\x64\x6f\x77\x6e", "\x6e\x5f\x63\x6b", "\x4d\x6f\x7a\x69\x6c\x6c\x61\x20\x44\x65\x66\x61\x75\x6c\x74\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x6d\x6e\x5f\x72\x74", "\x74\x6f\x75\x63\x68\x63\x61\x6e\x63\x65\x6c", "\x42\x61\x74\x61\x6e\x67", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x34\x2c", "\x70\x72\x6f\x64\x75\x63\x74\x53\x75\x62", "\x43\x65\x6e\x74\x75\x72\x79", "\x68\x61\x72\x64\x77\x61\x72\x65\x43\x6f\x6e\x63\x75\x72\x72\x65\x6e\x63\x79", "\x6b\x65\x5f\x63\x6e\x74", "\x4d\x6f\x6e\x6f\x73\x70\x61\x63\x65", "\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65", "\x74\x65\x6c", "\x23\x66\x36\x30", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x38\x2c", "\x68\x61\x73\x49\x6e\x64\x65\x78\x65\x64\x44\x42", "\x63\x6c\x69\x70\x62\x6f\x61\x72\x64\x2d\x77\x72\x69\x74\x65", "\x74\x5f\x65\x6e", "\x74\x6f\x45\x6c\x65\x6d\x65\x6e\x74", "\x74\x6d\x65\x5f\x63\x6e\x74", "\x68\x74\x63", "\x75\x70\x64\x61\x74\x65\x74", "\x61\x70\x69\x5f\x70\x75\x62\x6c\x69\x63\x5f\x6b\x65\x79", "\x72\x61\x6e\x64\x6f\x6d", "\x43\x61\x6d\x62\x72\x69\x61", "\x69\x73\x42\x72\x61\x76\x65", "\x53\x68\x6f\x63\x6b\x77\x61\x76\x65\x20\x46\x6c\x61\x73\x68", "\x67\x72\x61\x6e\x74\x65\x64", "\x6a\x6f\x69\x6e", "\x2c\x22\x61\x75\x74\x68\x22\x20\x3a\x20\x22", "\x77\x69\x64\x74\x68", "\x6d\x6e\x5f\x6c\x67", "\x61\x6c\x74\x46\x6f\x6e\x74\x73", "\x4a\x61\x76\x61\x20\x50\x6c\x75\x67\x2d\x69\x6e\x20\x32\x20\x66\x6f\x72\x20\x4e\x50\x41\x50\x49\x20\x42\x72\x6f\x77\x73\x65\x72\x73", "\x66\x69\x72\x73\x74\x4c\x6f\x61\x64", "\x42\x65\x6c\x6c\x20\x4d\x54", "\x64\x65\x66\x61\x75\x6c\x74\x5f\x73\x65\x73\x73\x69\x6f\x6e", "\x72\x6f\x75\x6e\x64", "\x6d\x6e\x5f\x77\x74", "\x2c\x69\x74\x30", "\x63\x6b\x61", "\x6d\x73\x4d\x61\x6e\x69\x70\x75\x6c\x61\x74\x69\x6f\x6e\x56\x69\x65\x77\x73\x45\x6e\x61\x62\x6c\x65\x64", "\x3c\x40\x6e\x76\x34\x35\x2e\x20\x46\x31\x6e\x36\x33\x72\x2c\x50\x72\x31\x6e\x37\x31\x6e\x36\x21", "\x24\x63\x64\x63\x5f\x61\x73\x64\x6a\x66\x6c\x61\x73\x75\x74\x6f\x70\x66\x68\x76\x63\x5a\x4c\x6d\x63\x66\x6c\x5f", "\x63\x64\x6d\x61", "\x3c\x2f\x73\x65\x74\x53\x44\x46\x4e\x3e", "\x2c\x30", "\x6f\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68", "\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x6a\x73\x6f\x6e", "\x74\x5f\x64\x69\x73", "\x6d\x64\x75\x63\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x66\x6f\x6e\x74\x73", "\x67\x64", "\x7a", "\x31\x36\x70\x74\x20\x41\x72\x69\x61\x6c", "\x6e\x61\x76\x69\x67\x61\x74\x6f\x72", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x36\x2c", "\x41\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e", "\x63\x61\x63\x68\x65", "\x73\x65\x64", "\x73\x74\x61\x72\x74\x5f\x74\x73", "\x64\x6d\x65\x5f\x63\x6e\x74", "\x64\x65\x76\x69\x63\x65\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e", "\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65", "\x6f\x6e\x66\x6f\x63\x75\x73", "\x6d\x6f\x7a\x49\x6e\x6e\x65\x72\x53\x63\x72\x65\x65\x6e\x59", "\x2f\x67\x65\x74\x5f\x70\x61\x72\x61\x6d\x73", "\x6d\x6e\x5f\x6d\x63\x5f\x69\x6e\x64\x78", "\x63\x6c\x65\x61\x72\x43\x61\x63\x68\x65", "\x6f\x6e\x6d\x6f\x75\x73\x65\x6d\x6f\x76\x65", "\x2c\x73\x65\x74\x53\x44\x46\x4e\x3a", "\x6c\x76\x63", "\x76\x69\x62\x72\x61\x74\x65", "\x72\x69\x72", "\x64\x6f\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x66\x70\x56\x61\x6c", "\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x20\x54\x61\x69\x20\x4c\x65", "\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65", "\x75\x73\x65\x72\x41\x67\x65\x6e\x74", "\x67\x65\x6f\x6c\x6f\x63\x61\x74\x69\x6f\x6e", "\x64\x65\x6e", "\x6f\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74", "\x6c\x61\x6e\x67", "\x42\x75\x66\x66\x65\x72", "\x73\x65\x6e\x73\x6f\x72\x5f\x64\x61\x74\x61", "\x3b\x20\x70\x61\x74\x68\x3d\x2f\x3b\x20\x65\x78\x70\x69\x72\x65\x73\x3d\x46\x72\x69\x2c\x20\x30\x31\x20\x46\x65\x62\x20\x32\x30\x32\x35\x20\x30\x38\x3a\x30\x30\x3a\x30\x30\x20\x47\x4d\x54\x3b", "\x64\x65\x76\x69\x63\x65\x50\x69\x78\x65\x6c\x52\x61\x74\x69\x6f", "\x6c\x6f\x61\x70", "\x3c\x62\x70\x64\x3e", "\x72\x43\x46\x50", "\x22", "\x2d\x31", "\x74\x64", "\x43\x6f\x6d\x69\x63\x20\x4e\x65\x75\x65", "\x70\x61\x67\x65\x59", "\x64\x6d\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x70\x64\x75\x63\x65\x5f\x63\x6e\x74", "\x63\x61\x74\x63\x68", "\x61\x63\x74\x69\x76\x65\x45\x6c\x65\x6d\x65\x6e\x74", "\x6d\x6f\x75\x73\x65\x6d\x6f\x76\x65", "\x68\x74\x74\x70\x73\x3a", "\x6c\x6f\x63\x61\x6c\x53\x74\x6f\x72\x61\x67\x65", "\x75\x72\x6c", "\x2c\x6d\x6e\x5f\x77\x3a", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x37\x30\x2c", "\x70\x61\x73\x73\x77\x6f\x72\x64", "", "\x73\x64\x66\x6e", "\x31\x39\x32\x70\x78", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x38\x30\x2c", "\x6d\x69\x64\x69", "\x6d\x6f\x7a\x41\x6c\x61\x72\x6d\x73", "\x63\x74\x72\x6c\x4b\x65\x79", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x30\x31\x2c", "\x72\x6f\x74\x61\x74\x65\x5f\x72\x69\x67\x68\x74", "\x61\x74\x61\x6e\x68", "\x6d\x61\x67\x6e\x65\x74\x6f\x6d\x65\x74\x65\x72", "\x64\x6f\x6d\x41\x75\x74\x6f\x6d\x61\x74\x69\x6f\x6e", "\x62\x72\x76", "\x68\x61\x73\x53\x65\x73\x73\x69\x6f\x6e\x53\x74\x6f\x72\x61\x67\x65", "\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x63\x68\x61\x6e\x67\x65", "\x73\x65\x73\x73\x69\x6f\x6e\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79", "\x6d\x6e\x5f\x72", "\x72\x6f\x74\x61\x74\x69\x6f\x6e\x52\x61\x74\x65", "\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66", "\x6f\x6e", "\x44\x65\x76\x69\x63\x65\x4d\x6f\x74\x69\x6f\x6e\x45\x76\x65\x6e\x74", "\x4f\x73\x77\x61\x6c\x64", "\x78\x31", "\x42\x6f\x64\x6f\x6e\x69\x20\x37\x32", "\x59\x6f\x75\x54\x75\x62\x65\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x64\x6f\x63\x75\x6d\x65\x6e\x74\x45\x6c\x65\x6d\x65\x6e\x74", "\x73\x70\x6c\x69\x74", "\x6b\x65\x79\x70\x72\x65\x73\x73", "\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x20\x53\x61\x6e\x73\x20\x53\x65\x72\x69\x66", "\x6b\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x6c\x6f\x63\x61\x6c\x53\x74\x6f\x72\x61\x67\x65\x4b\x65\x79", "\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74", "\x68\x62\x43\x61\x6c\x63", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x32\x2c", "\x68\x62", "\x6f\x6e\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6e\x67\x65", "\x67\x66", "\x45\x64\x67\x65\x20\x50\x44\x46\x20\x56\x69\x65\x77\x65\x72", "\x69\x6e\x6e\x65\x72\x57\x69\x64\x74\x68", "\x69\x72", "\x73\x74\x61\x74\x65", "\x77\x65\x62\x64\x72\x69\x76\x65\x72", "\x58\x50\x61\x74\x68\x52\x65\x73\x75\x6c\x74", "\x76\x61\x6c\x75\x65", "\x6e\x6f\x6e\x65", "\x61\x6a\x5f\x74\x79\x70\x65", "\x63\x6c\x69\x70\x62\x6f\x61\x72\x64\x2d\x72\x65\x61\x64", "\x61\x70\x70\x6c\x79\x46\x75\x6e\x63", "\x6f\x70\x65\x72\x61", "\x69\x6e\x70\x75\x74", "\x74\x65\x5f\x76\x65\x6c", "\x61\x75\x74\x6f\x63\x6f\x6d\x70\x6c\x65\x74\x65", "\x78\x32", "\x6d\x6e\x5f\x70\x73\x6e", "\x53\x68\x6f\x63\x6b\x77\x61\x76\x65\x20\x66\x6f\x72\x20\x44\x69\x72\x65\x63\x74\x6f\x72", "\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65", "\x67\x65\x74\x5f\x62\x72\x6f\x77\x73\x65\x72", "\x70\x65\x5f\x76\x65\x6c", "\x73\x74\x6f\x72\x61\x67\x65", "\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x20\x6c\x65\x66\x74\x3a\x20\x2d\x39\x39\x39\x39\x70\x78\x3b\x20\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x20\x68\x69\x64\x64\x65\x6e\x3b\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\x63\x6b\x20\x21\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74", "\x63\x74\x61", "\x7c\x7c", "\x57\x61\x73\x65\x65\x6d", "\x70\x61\x79\x6d\x65\x6e\x74\x2d\x68\x61\x6e\x64\x6c\x65\x72", "\x2c\x73\x33\x3a", "\x79\x31", "\x68\x6d\x6d", "\x72\x73\x74", "\x62\x70\x64", "\x41\x64\x6f\x62\x65\x20\x42\x72\x61\x69\x6c\x6c\x65", "\x4e\x6f\x74\x6f", "\x63\x77\x65\x6e\x3a", "\x6d\x6d\x65\x5f\x63\x6e\x74", "\x6e\x75\x6d\x62\x65\x72", "\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x37\x2c", "\x68\x65\x69\x67\x68\x74", "\x6d\x6e\x5f\x74\x73", "\x64\x33", "\x32", "\x4e\x65\x77\x20\x59\x6f\x72\x6b", "\x70\x72\x6f\x64\x75\x63\x74", "\x73\x74\x61\x63\x6b", "\x69\x6d\x75\x6c", "\x68\x6d\x75", "\x63\x62\x72\x74", "\x30\x61\x34\x36\x47\x35\x6d\x31\x37\x56\x72\x70\x34\x6f\x34\x63", "\x6d\x65\x74\x61\x4b\x65\x79", "\x64\x6d\x5f\x65\x6e", "\x6c\x69\x73\x74\x46\x75\x6e\x63\x74\x69\x6f\x6e\x73", "\x50\x4c\x55\x47\x49\x4e\x53", "\x62\x65\x74\x61", "\x75\x6e\x64\x65\x66", "\x6d\x6e\x5f\x67\x65\x74\x5f\x6e\x65\x77\x5f\x63\x68\x61\x6c\x6c\x65\x6e\x67\x65\x5f\x70\x61\x72\x61\x6d\x73", "\x63\x6f\x6f\x6b\x69\x65", "\x69\x50\x61\x64\x3b", "\x67\x61\x6d\x6d\x61", "\x61\x70\x70\x56\x65\x72\x73\x69\x6f\x6e", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x39\x2c", "\x69\x6e\x69\x74\x5f\x74\x69\x6d\x65", "\x67\x65\x74\x47\x61\x6d\x65\x70\x61\x64\x73", "\x67\x62", "\x70\x75\x73\x68", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x33\x2c", "\x66\x6f\x6e\x74\x53\x69\x7a\x65", "\x42\x61\x73\x69\x63\x20", "\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72", "\x68\x6b\x75", "\x70\x61\x63\x74", "\x6d\x6e\x5f\x73\x74\x61\x74\x65", "\x73\x70\x65\x65\x63\x68\x53\x79\x6e\x74\x68\x65\x73\x69\x73", "\x6d\x65\x5f\x76\x65\x6c", "\x65\x78\x63\x65\x70\x74\x69\x6f\x6e", "\x6e\x61\x6d\x65", "\x64\x69\x73", "\x2c\x75\x61\x65\x6e\x64\x2c", "\x63\x6c\x69\x65\x6e\x74\x48\x65\x69\x67\x68\x74", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x37\x2c", "\x63\x73\x73\x54\x65\x78\x74", "\x63\x6f\x6f\x6b\x69\x65\x5f\x63\x68\x6b\x5f\x72\x65\x61\x64", "\x61\x76\x61\x69\x6c\x48\x65\x69\x67\x68\x74", "\x4d\x61\x63\x20\x4f\x53\x20\x58\x20\x31\x30\x5f\x35", "\x74\x61\x63\x74", "\x41\x64\x6f\x62\x65\x20\x48\x65\x62\x72\x65\x77", "\x69\x31\x3a", "\x41\x70\x70\x6c\x65\x20\x4c\x69\x47\x6f\x74\x68\x69\x63", "\x63\x73\x68", "\x70\x65\x72\x6d\x69\x73\x73\x69\x6f\x6e\x73", "\x30", "\x46\x75\x74\x75\x72\x61", "\x70\x6f\x77", "\x73\x64\x5f\x64\x65\x62\x75\x67", "\x76\x63\x5f\x63\x6e\x74", "\x64\x6d\x65\x5f\x76\x65\x6c", "\x70\x72\x6f\x74\x6f\x63\x6f\x6c", "\x63\x70\x61", "\x43\x6f\x6e\x74\x65\x6e\x74\x2d\x74\x79\x70\x65", "\x44\x72\x6f\x69\x64\x20\x53\x65\x72\x69\x66", "\x70\x72\x6f\x64", "\x68\x69\x64\x64\x65\x6e", "\x74\x6f\x4c\x6f\x77\x65\x72\x43\x61\x73\x65", "\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72", "\x6d\x6f\x75\x73\x65", "\x76\x6f\x69\x63\x65\x55\x52\x49", "\x33", "\x63\x61\x6c\x6c", "\x47\x45\x54", "\x77\x68\x69\x63\x68", "\x77\x65\x62\x6b\x69\x74\x47\x65\x74\x47\x61\x6d\x65\x70\x61\x64\x73", "\x6d\x6e\x5f\x6c\x64", "\x6f\x6e\x62\x6c\x75\x72", "\x6f\x6e\x63\x6c\x69\x63\x6b", "\x66\x6d\x68", "\x70\x61\x74\x70", "\x77\x65\x62\x6b\x69\x74\x48\x69\x64\x64\x65\x6e", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x30\x2c", "\x69\x73\x63\x3a", "\x67\x65\x74\x5f\x63\x6f\x6f\x6b\x69\x65", "\x70\x72\x6f\x74\x6f\x74\x79\x70\x65", "\x6a\x61\x76\x61\x45\x6e\x61\x62\x6c\x65\x64", "\x69\x6e\x64\x65\x78\x65\x64\x44\x42", "\x73\x74\x79\x6c\x65", "\x54\x6f\x75\x63\x68\x45\x76\x65\x6e\x74", "\x70\x65\x6e", "\x77\x72\x63\x3a", "\x43\x61\x6e\x64\x61\x72\x61", "\x61\x63\x63\x65\x73\x73\x69\x62\x69\x6c\x69\x74\x79\x2d\x65\x76\x65\x6e\x74\x73", "\x62\x6c\x75\x65\x74\x6f\x6f\x74\x68", "\x70\x65\x5f\x63\x6e\x74", "\x63\x68\x65\x63\x6b\x5f\x73\x74\x6f\x70\x5f\x70\x72\x6f\x74\x6f\x63\x6f\x6c", "\x61\x70\x70\x6c\x79", "\x73\x65\x73\x73\x69\x6f\x6e\x53\x74\x6f\x72\x61\x67\x65", "\x57\x65\x62\x45\x78\x36\x34\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x6c\x75\x67\x69\x6e\x20\x43\x6f\x6e\x74\x61\x69\x6e\x65\x72", "\x6c\x6f\x63\x61\x74\x69\x6f\x6e", "\x62\x6d\x2d\x74\x65\x6c\x65\x6d\x65\x74\x72\x79", "\x61\x73\x69\x6e", "\x49\x54\x43\x20\x42\x6f\x64\x6f\x6e\x69\x20\x37\x32\x20\x42\x6f\x6c\x64", "\x73\x65\x72\x69\x66", "\x61\x6c\x6c", "\x61\x76\x61\x69\x6c\x57\x69\x64\x74\x68", "\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x73\x42\x79\x4e\x61\x6d\x65", "\x61\x74\x73", "\x68\x6f\x73\x74\x6e\x61\x6d\x65", "\x64\x6f\x5f\x65\x6e", "\x66\x66", "\x74\x61\x72\x67\x65\x74", "\x61\x74\x74\x61\x63\x68\x45\x76\x65\x6e\x74", "\x5f\x70\x68\x61\x6e\x74\x6f\x6d", "\x4d\x69\x6e\x69\x6f\x6e\x20\x50\x72\x6f", "\x74\x64\x75\x63\x65\x5f\x63\x6e\x74", "\x72\x65\x71\x75\x65\x73\x74\x57\x61\x6b\x65\x4c\x6f\x63\x6b", "\x64\x69\x73\x46\x70\x43\x61\x6c\x4f\x6e\x54\x69\x6d\x65\x6f\x75\x74", "\x6f\x6e\x70\x6f\x69\x6e\x74\x65\x72\x75\x70", "\x41\x6c\x4e\x69\x6c\x65", "\x63\x61\x6e\x76\x61\x73", "\x43\x6f\x75\x72\x69\x65\x72", "\x6e\x6f\x74\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x73", "\x48\x54\x4d\x4c\x45\x6c\x65\x6d\x65\x6e\x74", "\x68\x79\x70\x6f\x74", "\x77\x72", "\x73\x70\x65\x61\x6b\x65\x72", "\x47\x6f\x6f\x67\x6c\x65\x20\x45\x61\x72\x74\x68\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x73\x71\x72\x74", "\x52\x54\x43\x50\x65\x65\x72\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e", "\x6d\x6f\x7a\x50\x68\x6f\x6e\x65\x4e\x75\x6d\x62\x65\x72\x53\x65\x72\x76\x69\x63\x65", "\x69\x6e\x64\x65\x78\x4f\x66", "\x74\x6d\x65\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x70\x61\x72\x73\x65\x49\x6e\x74", "\x62\x69\x6e\x64", "\x6a\x72\x73", "\x6b\x65\x79\x43\x6f\x64\x65", "\x63\x68\x61\x72\x41\x74", "\x66\x6d\x7a", "\x32\x64", "\x6f\x39", "\x6d\x6e\x5f\x70\x6f\x6c\x6c", "\x4c\x75\x63\x69\x64\x61\x20\x53\x61\x6e\x73", "\x66\x70\x56\x61\x6c\x73\x74\x72", "\x43\x68\x72\x6f\x6d\x65\x20\x52\x65\x6d\x6f\x74\x65\x20\x44\x65\x73\x6b\x74\x6f\x70\x20\x56\x69\x65\x77\x65\x72", "\x51\x75\x69\x63\x6b\x54\x69\x6d\x65\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x50\x72\x65\x73\x73\x20\x53\x74\x61\x72\x74\x20\x32\x50", "\x6d\x6f\x7a\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x63\x68\x61\x6e\x67\x65", "\x64\x6f\x65\x5f\x63\x6e\x74", "\x2f\x5f\x62\x6d\x2f\x5f\x64\x61\x74\x61", "\x64\x65\x76\x69\x63\x65\x6d\x6f\x74\x69\x6f\x6e", "\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x20\x4f\x66\x66\x69\x63\x65\x20\x4c\x69\x76\x65\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x61\x62\x73", "\x66\x6f\x6e\x74\x46\x61\x6d\x69\x6c\x79", "\x69\x6e\x64\x65\x78\x65\x64\x44\x62\x4b\x65\x79", "\x54\x49\x2d\x4e\x73\x70\x69\x72\x65", "\x64\x6d\x61\x63\x74", "\x61\x63\x63\x65\x6c\x65\x72\x61\x74\x69\x6f\x6e\x49\x6e\x63\x6c\x75\x64\x69\x6e\x67\x47\x72\x61\x76\x69\x74\x79", "\x6f\x6e\x70\x6f\x69\x6e\x74\x65\x72\x64\x6f\x77\x6e", "\x6d\x69\x63\x72\x6f\x70\x68\x6f\x6e\x65", "\x75\x6e\x6b", "\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64", "\x73\x65\x74\x5f\x63\x6f\x6f\x6b\x69\x65", "\x67\x65\x74\x5f\x6d\x6e\x5f\x70\x61\x72\x61\x6d\x73\x5f\x66\x72\x6f\x6d\x5f\x61\x62\x63\x6b", "\x75\x6e\x64\x65\x66\x69\x6e\x65\x64", "\x63\x6f\x6c\x6f\x72\x44\x65\x70\x74\x68", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x32\x30\x2c", "\x67\x65\x74\x54\x69\x6d\x65\x7a\x6f\x6e\x65\x4f\x66\x66\x73\x65\x74", "\x53\x68\x61\x72\x65\x50\x6f\x69\x6e\x74\x20\x42\x72\x6f\x77\x73\x65\x72\x20\x50\x6c\x75\x67\x2d\x69\x6e", "\x65\x6e\x63\x6f\x64\x65\x5f\x75\x74\x66\x38", "\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x4f\x66", "\x63\x61\x6c\x5f\x64\x69\x73", "\x6d\x6e\x5f\x73\x65\x6e", "\x2d\x31\x2c\x32\x2c\x2d\x39\x34\x2c\x2d\x31\x31\x36\x2c", "\x77\x65\x68", "\x68\x61\x73\x4c\x6f\x63\x61\x6c\x53\x74\x6f\x72\x61\x67\x65", "\x76\x63\x5f\x63\x6e\x74\x5f\x6c\x6d\x74", "\x58\x44\x6f\x6d\x61\x69\x6e\x52\x65\x71\x75\x65\x73\x74", "\x41\x64\x6f\x62\x65\x20\x41\x63\x72\x6f\x62\x61\x74", "\x6d\x6e\x5f\x67\x65\x74\x5f\x63\x75\x72\x72\x65\x6e\x74\x5f\x63\x68\x61\x6c\x6c\x65\x6e\x67\x65\x73", "\x6f\x6e\x6b\x65\x79\x64\x6f\x77\x6e", "\x68\x74\x74\x70\x3a\x2f\x2f", "\x73\x73\x68", "\x66\x6f\x6e\x74\x73\x5f\x6f\x70\x74\x6d", "\x6e", "\x7d", "\x74\x5f\x74\x73\x74", "\x70\x73\x74\x61\x74\x65", "\x55\x52\x4c", "\x68\x74\x6d", "\x6f\x70\x65\x6e", "\x31", "\x69\x50\x68\x6f\x6e\x65", "\x61\x62\x63\x64\x65\x66\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x78\x79\x7a\x31\x32\x33\x34\x35\x36\x37\x38\x39\x30\x3b\x2b\x2d\x2e", "\x6f\x6e\x6d\x6f\x75\x73\x65\x75\x70"];
而后面的代码多次引用了该数组里的元素。如图:
这样显示的非常的不直观。现在写个简单的插件来将数组的引用直接替换为元素。
思路
将上面的数组定义代码复制到AST处理代码中。
先处理十六进制的字符串,让字符串直观。
遍历类似 _ac[607] 的MemberExpression节点,再进行判断
判断条件成立,进行替换。
插件编写
一,使用 利用AST解混淆先导知识:调用babel库反混淆代码模板 这篇文章介绍的代码,并将数组定义代码复制到该代码中。
二,十六进制的字符串,使用 JavaScript反混淆插件一:处理十六进制、中英文Unicode字符串或数值 这篇文章介绍的插件即可。
三,遍历类似 _ac[607] 的MemberExpression节点:
const visitor =
{
MemberExpression(path)
{
},
}
四,条件判断,成立则替换:
const visitor =
{
MemberExpression(path)
{
let {object,property} = path.node;
if (!types.isIdentifier(object,{name:"_ac"})) return;
if (!types.isNumericLiteral(property)) return;
let index = property.value;
let value = _ac[index];
path.replaceWith(types.valueToNode(value));
},
}
运行后部分代码截图如下:
这样看下来,比之前的代码要简单易读得多。而且,插件的编写也是非常的容易,几乎是零难度。
注意事项
数组元素需要全部为字面量。
要确保数组至始至终都没有被改变。
如果使用作用域可能会好点,不过对于有些代码无法使用作用域,这种方式更好。对特定的网站使用专用AST还原插件,效果会更好。
也行你觉得就算进行了数组元素的替换,距离分析出加密参数还很远,没什么用。不过既然有方法能让代码更清晰一点,那为啥不用呢?
大家有没有发现比正则替换简单多了?