PHP中${...}
的字符串不是什么意思?我想知道文档的位置.
${"GLOBALS"}["a"] = "b"; ${${"GLOBALS"}["a"]} = "c";
我正在解决xcz.kr上的战争游戏挑战,它给了我这个混淆的PHP源代码(带有一些HTML).
Prob21 Title PHP Obfuscation Crack Description View source ${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x67\x61\x73y\x61\x72\x6b\x6e\x64"]="\x62";${"\x47\x4c\x4f\x42AL\x53"}["r\x77\x6cii\x69\x71\x66\x76\x66\x70"]="i";function h($a){${"\x47\x4cO\x42\x41L\x53"}["\x70x\x7a\x77\x65\x61h\x72\x75\x71\x6f\x6b"]="\x62";${${"\x47LO\x42\x41\x4c\x53"}["\x70\x78z\x77\x65\x61\x68\x72u\x71\x6f\x6b"]}="";${"GL\x4fB\x41\x4c\x53"}["u\x78\x6fi\x69i\x6b\x61pcv"]="\x62";for(${${"\x47\x4c\x4f\x42A\x4c\x53"}["r\x77\x6c\x69\x69i\x71\x66\x76fp"]}=0;${${"\x47\x4c\x4f\x42A\x4cS"}["\x72\x77l\x69i\x69\x71\x66\x76\x66\x70"]}<5;${${"G\x4c\x4f\x42\x41\x4c\x53"}["\x72\x77\x6ci\x69\x69qf\x76\x66\x70"]}++){$ydzorvqk="\x61";$gflrozo="\x62";${"\x47\x4cOB\x41\x4cS"}["\x65\x72p\x78\x7a\x6fz\x64\x65y"]="i";${$gflrozo}=${${"G\x4c\x4f\x42AL\x53"}["\x67\x61sy\x61\x72k\x6e\x64"]}+ord(substr(${$ydzorvqk},${${"\x47\x4c\x4f\x42ALS"}["\x65rp\x78\x7a\x6fz\x64e\x79"]},1));}return${${"\x47\x4c\x4fBA\x4cS"}["\x75x\x6fi\x69i\x6b\x61\x70\x63v"]};}$jbojdbertutk="\x4b\x45\x59";$vtefigaylx="mu\x6e";${"G\x4cOB\x41L\x53"}["\x68p\x63eeyx\x74o"]="\x61";$ktjmdjm="a";${"\x47\x4c\x4f\x42ALS"}["\x6d\x69mt\x65\x6du\x63\x79\x62\x70c"]="\x6d\x75\x6e";${$jbojdbertutk}="\x43o\x6e\x67\x72a\x74\x75\x6ca\x74\x69\x6f\x6es\x21\x62r\x3e\x4be\x79\x20i\x73 ?????????????????????";${"GL\x4f\x42\x41\x4cS"}["\x67\x6d\x66i\x66\x62f\x6c"]="\x61";${${"G\x4c\x4f\x42AL\x53"}["\x6d\x69\x6d\x74em\x75c\x79\x62p\x63"]}=@$_GET["\x6b\x65y"];${"GL\x4f\x42A\x4c\x53"}["w\x76d\x63\x78\x73\x64\x73\x71b"]="x";@${$ktjmdjm}=explode("-",${$vtefigaylx});$gfxqkfxurga="\x78";$dlmordkk="\x61";for(${${"\x47\x4c\x4fBA\x4cS"}["w\x76\x64\x63\x78\x73\x64\x73\x71b"]}=0;${${"\x47\x4c\x4f\x42\x41LS"}["\x77v\x64\x63\x78s\x64\x73\x71\x62"]}<5;${$gfxqkfxurga}++){if(preg_match("/[^a-\x7a\x41-\x5a\x30-\x39]/",@${${"\x47\x4cOB\x41\x4c\x53"}["\x68pc\x65e\x79\x78\x74\x6f"]}[${${"\x47\x4cO\x42A\x4c\x53"}["\x77vd\x63\x78\x73ds\x71\x62"]}])){exit("\x45rr\x6f\x72!");}}if(is_numeric(substr(${${"\x47LO\x42\x41\x4c\x53"}["\x68p\x63e\x65y\x78to"]}[0],0,2))&&!is_numeric(substr(${${"\x47\x4c\x4f\x42\x41\x4cS"}["\x68\x70\x63ee\x79\x78t\x6f"]}[0],4,1))&&h(${${"\x47\x4c\x4f\x42\x41\x4c\x53"}["gm\x66\x69fbfl"]}[0])>312&&h(${${"\x47L\x4f\x42A\x4cS"}["h\x70\x63e\x65yx\x74\x6f"]}[0])<333&&!is_numeric(substr(${$dlmordkk}[1],0,1))&&is_numeric(substr(${${"\x47\x4c\x4fB\x41LS"}["hpc\x65ey\x78to"]}[1],3,2))){$qcpkjlbgy="\x61";${"G\x4c\x4f\x42\x41\x4c\x53"}["\x6f\x71\x6f\x74\x6a\x62\x76\x6e"]="\x61";${"G\x4cO\x42ALS"}["bb\x67h\x7a\x6f\x74"]="\x61";if(h(${${"\x47\x4c\x4f\x42\x41LS"}["b\x62g\x68z\x6ft"]}[1])>300&&h(${$qcpkjlbgy}[1])<326&&!is_numeric(substr(${${"GL\x4f\x42\x41\x4c\x53"}["hp\x63\x65\x65yx\x74o"]}[2],0,1))&&is_numeric(substr(${${"\x47LO\x42AL\x53"}["\x68\x70c\x65e\x79xt\x6f"]}[2],1,1))&&h(${${"GLO\x42\x41L\x53"}["o\x71o\x74\x6a\x62\x76n"]}[2])>349&&h(${${"\x47\x4c\x4fB\x41\x4cS"}["h\x70c\x65\x65\x79x\x74o"]}[2])<407){${"\x47L\x4fBA\x4cS"}["\x77\x73ju\x78\x77\x78bz\x6d\x73"]="\x61";${"\x47\x4cOB\x41\x4c\x53"}["o\x66\x76\x6d\x69\x61\x74\x63\x64ko"]="a";$oqhejquzit="a";if(!is_numeric(substr(${${"G\x4c\x4fBA\x4cS"}["\x77\x73\x6au\x78\x77\x78bz\x6d\x73"]}[3],0,2))&&is_numeric(substr(${$oqhejquzit}[3],2,3))&&h(${${"GL\x4f\x42\x41\x4c\x53"}["o\x66\x76\x6di\x61\x74\x63\x64\x6b\x6f"]}[3])>357&&h(${${"\x47\x4c\x4fBA\x4cS"}["hp\x63\x65ey\x78\x74\x6f"]}[3])<359){${"G\x4c\x4f\x42\x41L\x53"}["\x65rq\x71jp\x63t"]="\x61";${"G\x4c\x4fBAL\x53"}["ok\x67\x6f\x6e\x64\x66\x69\x64\x6b\x79"]="\x61";if(round((h(${${"G\x4c\x4f\x42A\x4c\x53"}["\x68\x70c\x65\x65y\x78t\x6f"]}[0])+h(${${"\x47\x4c\x4f\x42\x41L\x53"}["\x6fkg\x6f\x6ed\x66\x69\x64\x6b\x79"]}[1])+h(${${"\x47\x4c\x4f\x42AL\x53"}["h\x70c\x65e\x79\x78\x74\x6f"]}[2])+h(${${"\x47L\x4f\x42A\x4cS"}["h\x70\x63e\x65\x79\x78\x74o"]}[3]))/4)==h(${${"\x47L\x4f\x42ALS"}["\x65\x72\x71\x71\x6a\x70ct"]}[4])){$oaqqkxn="\x4b\x45\x59";exit(${$oaqqkxn});}}}}echo"\x57\x72ong\x20\x54.T"; ?>
我使用在线PHP反混淆器UnPHP对其进行了反混淆处理,它给了我代码开头:
${"GLOBALS"}["gasyarknd"] = "b"; ${"GLOBALS"}["rwliiiqfvfp"] = "i";
我可以猜到它意味着什么,但我以前从未见过这种语法.
$ {}在PHP语法中意味着什么?(似乎他们${...}
在字符串中谈论,但这不是我想知道的.我已经知道它意味着什么.)
helmbert.. 7
这在"变量变量"主题下的文档中有所介绍:
为了将变量变量与数组一起使用,您必须解决模糊问题.也就是说,如果你编写,
$$a[1]
那么解析器需要知道你$a[1]
是否想要$$a
用作变量,或者你想要作为变量,然后是该变量的[1]
索引.解决这种歧义的语法是:${$a[1]}
第一种情况和${$a}[1]
第二种情况.
所以基本上,您可以使用${
访问动态名称的变量
,其中
可以是返回字符串的任何表达式.或者,您可以写:
$foo = "GLOBALS"; ${$foo}["gasyarknd"] = "b"; // equivalent to: $GLOBALS["gasyarknd"] = "b";
当然,在你的问题的上下文中,${"GLOBALS"}
实际上并不是一个变量变量,因为它"GLOBALS"
是一个静态字符串,而不是一个变量.在语义上,它意味着完全相同的东西$GLOBALS
.
有关更多信息,您还可以查看PHP语法中的相应规则:
simple_variable: T_VARIABLE { $$ = $1; } | '$' '{' expr '}' { $$ = $3; } | '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); } ;
规则的第二部分'$' '{' expr '}'
,仅涵盖:${
接下来是任何表达式,其后}
是一种在PHP中访问变量的完全有效的方法.规则的第三部分涵盖"常规"变量,如$$foo
.
这在"变量变量"主题下的文档中有所介绍:
为了将变量变量与数组一起使用,您必须解决模糊问题.也就是说,如果你编写,
$$a[1]
那么解析器需要知道你$a[1]
是否想要$$a
用作变量,或者你想要作为变量,然后是该变量的[1]
索引.解决这种歧义的语法是:${$a[1]}
第一种情况和${$a}[1]
第二种情况.
所以基本上,您可以使用${
访问动态名称的变量
,其中
可以是返回字符串的任何表达式.或者,您可以写:
$foo = "GLOBALS"; ${$foo}["gasyarknd"] = "b"; // equivalent to: $GLOBALS["gasyarknd"] = "b";
当然,在你的问题的上下文中,${"GLOBALS"}
实际上并不是一个变量变量,因为它"GLOBALS"
是一个静态字符串,而不是一个变量.在语义上,它意味着完全相同的东西$GLOBALS
.
有关更多信息,您还可以查看PHP语法中的相应规则:
simple_variable: T_VARIABLE { $$ = $1; } | '$' '{' expr '}' { $$ = $3; } | '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); } ;
规则的第二部分'$' '{' expr '}'
,仅涵盖:${
接下来是任何表达式,其后}
是一种在PHP中访问变量的完全有效的方法.规则的第三部分涵盖"常规"变量,如$$foo
.