当前位置:  开发笔记 > 编程语言 > 正文

PHP中不包含字符串的`$ {...}`是什么意思?

如何解决《PHP中不包含字符串的`${}`是什么意思?》经验,为你挑选了1个好方法。

PHP中${...} 的字符串不是什么意思?我想知道文档的位置.

${"GLOBALS"}["a"]    = "b";
${${"GLOBALS"}["a"]} = "c";

上下文

我正在解决xcz.kr上的战争游戏挑战,它给了我这个混淆的PHP源代码(带有一些HTML).




Prob21


Title
PHP Obfuscation Crack

Description
View source

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对其进行了反混淆处理,它给了我代码开头:



我可以猜到它意味着什么,但我以前从未见过这种语法.

我读了

$ {}在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.



1> helmbert..:

这在"变量变量"主题下的文档中有所介绍:

为了将变量变量与数组一起使用,您必须解决模糊问题.也就是说,如果你编写,$$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.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有