先来说说php变量的命名规则,百度下一抓一大把:

(1) PHP的变量名区分大小写;

(2) 变量名必须以美元符号$开始;

(3) 变量名开头可以以下划线开始;

(4) 变量名不能以数字字符开头.

其实所有编程都类似的命名规范就是:

1. 变量第一个字符最好是 字母或_,不能以数字开头

2. 第二个字符开始允许 数字,字母,_

好了,差不多就是这样了,但是这不是我们要说的重点。

今天我们说说 PHP 变量的可用字符,不仅仅是 数字,字母,_ 哦。

前几天QQ上一朋友发我一个shell,是加密过的,通篇乱码,不过上面有注释,叫做 “神盾加密” 好霸气的样子。

里面用了一些比较生僻的知识点,其中最明显的就是变量名,所以今天我们先从变量开始讲。

当然网上我也没找到权威的质料强有力的说明PHP的变量名可用字符的信息,所以我只能自己测试了。(英文不好,没办法谷歌到有利的证据)

先来看下我所用的方法,(如果你有更好的方法,希望分享下。)

复制代码 代码如下:

if ($_POST) {

$chr = chr($_POST['chr']);

eval('$'.$chr."=1;");

echo 'ok';

exit;

}

?>

test

for(var i = 0x00; i <= 0xFF; i++) { // 0x00 - 0xFF  255个字符

$.ajaxSettings.async = false; // 同步模式, 为了按顺序返回数据

$.post( "?", {chr: i}, (function (data) { // post i 给 php 解析

data === 'ok' && console.log( "\\x"+(i).toString(16) ); // 如果只返回 ok 说明能正常执行,否则会抛出异常

});

}

代码还算比较简单,PHP 部分只负责解析每一个字符当作变量名的执行结果是否会抛出溢出。

比如 字符 a 那么会解析  eval('$a=1;');  这样的结果肯定没问题,所以不会抛出异常,返回结果就是 ok 字符。

如果 字符 - 那么会解析  eval('$-=1;');  这明显是不对的,所以会抛出  PHP Parse error: syntax error, unexpected '-', expecting T_VARIABLE or '$'  和 ok 字符。

而下面的 ajax 部分者正是利用返回结果是否为 'ok' 而判断是否是有效的变量名。

看看执行后的结果是什么吧:

复制代码 代码如下:

"\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, \x5f, \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, \x7f, \x80, \x81, \x82, \x83, \x84, \x85, \x86, \x87, \x88, \x89, \x8a, \x8b, \x8c, \x8d, \x8e, \x8f, \x90, \x91, \x92, \x93, \x94, \x95, \x96, \x97, \x98, \x99, \x9a, \x9b, \x9c, \x9d, \x9e, \x9f, \xa0, \xa1, \xa2, \xa3, \xa4, \xa5, \xa6, \xa7, \xa8, \xa9, \xaa, \xab, \xac, \xad, \xae, \xaf, \xb0, \xb1, \xb2, \xb3, \xb4, \xb5, \xb6, \xb7, \xb8, \xb9, \xba, \xbb, \xbc, \xbd, \xbe, \xbf, \xc0, \xc1, \xc2, \xc3, \xc4, \xc5, \xc6, \xc7, \xc8, \xc9, \xca, \xcb, \xcc, \xcd, \xce, \xcf, \xd0, \xd1, \xd2, \xd3, \xd4, \xd5, \xd6, \xd7, \xd8, \xd9, \xda, \xdb, \xdc, \xdd, \xde, \xdf, \xe0, \xe1, \xe2, \xe3, \xe4, \xe5, \xe6, \xe7, \xe8, \xe9, \xea, \xeb, \xec, \xed, \xee, \xef, \xf0, \xf1, \xf2, \xf3, \xf4, \xf5, \xf6, \xf7, \xf8, \xf9, \xfa, \xfb, \xfc, \xfd, \xfe, \xff"

整理后发现是这样的16进制数据,当然看不懂没关系,看下转义后的结果:

复制代码 代码如下:

"A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, _, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, , ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  , ¡, ¢, £, ¤, ¥, ¦, §, ¨, ©, ª, «, ¬, ­, ®, ¯, °, ±, ², ³, ´, µ, ¶, ?, ¸, ¹, º, », ¼, ½, ¾, ¿, À, Á, Â, Ã, Ä, Å, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ñ, Ò, Ó, Ô, Õ, Ö, ×, Ø, Ù, Ú, Û, Ü, Ý, Þ, ß, à, á, â, ã, ä, å, æ, ç, è, é, ê, ë, ì, í, î, ï, ð, ñ, ò, ó, ô, õ, ö, ÷, ø, ù, ú, û, ü, ý, þ, ÿ"

除了前面的 A-Z_a-z 是我们熟悉的,后面的那些乱七八糟的东西竟然也能当作正常的变量名,简直不可思议。

其实只是PHP拓展了变量名的字符范围,在 A-Z_a-z 之上,将变量可用字符范围拓展到了 \x7f-\xff。

所以,第一个字符范围应该是 [a-zA-Z_\x7f-\xff]

那么第二个字符是否也是这样能,我们继续测试下。

将上面 php 代码里的  eval('$'.$chr."=1;");  改成  eval('$a'.$chr."=1;");  保存测试、

复制代码 代码如下:

"\x9, \xa, \xd, \x20, \x30, \x31, \x32, \x33, \x34, \x35, \x36, \x37, \x38, \x39, \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, \x5f, \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, \x7f, \x80, \x81, \x82, \x83, \x84, \x85, \x86, \x87, \x88, \x89, \x8a, \x8b, \x8c, \x8d, \x8e, \x8f, \x90, \x91, \x92, \x93, \x94, \x95, \x96, \x97, \x98, \x99, \x9a, \x9b, \x9c, \x9d, \x9e, \x9f, \xa0, \xa1, \xa2, \xa3, \xa4, \xa5, \xa6, \xa7, \xa8, \xa9, \xaa, \xab, \xac, \xad, \xae, \xaf, \xb0, \xb1, \xb2, \xb3, \xb4, \xb5, \xb6, \xb7, \xb8, \xb9, \xba, \xbb, \xbc, \xbd, \xbe, \xbf, \xc0, \xc1, \xc2, \xc3, \xc4, \xc5, \xc6, \xc7, \xc8, \xc9, \xca, \xcb, \xcc, \xcd, \xce, \xcf, \xd0, \xd1, \xd2, \xd3, \xd4, \xd5, \xd6, \xd7, \xd8, \xd9, \xda, \xdb, \xdc, \xdd, \xde, \xdf, \xe0, \xe1, \xe2, \xe3, \xe4, \xe5, \xe6, \xe7, \xe8, \xe9, \xea, \xeb, \xec, \xed, \xee, \xef, \xf0, \xf1, \xf2, \xf3, \xf4, \xf5, \xf6, \xf7, \xf8, \xf9, \xfa, \xfb, \xfc, \xfd, \xfe, \xff"

发现结果多了好多字符,其实有一部分我们是要去掉的,比如 \x20 其实就是 空格,相当于  eval('$a =1;');  而已,当然是能正常执行的。

除了空格,还有 \t\r\n 都去掉因为这些也是PHP语法说允许的 \t=\x9,\n=\xa,\r=\xd,所以我们要去掉结果中的前4个数据\x9, \xa, \xd, \x20,

最终得到的结果其实只是多了  \x30, \x31, \x32, \x33, \x34, \x35, \x36, \x37, \x38, \x39  熟悉 ascii 的人也许一眼就看出来了,这就是数字 0-9

所以第一个字符范围应该是 [\w\x7f-\xff] 对正则不熟的也许会觉得怎么不是 [0-9a-zA-Z_\x7f-\xff],其实 \w 就是 0-9a-zA-Z_

也许有人会说  $$a; ${$a};  这样的变量呢?

我觉得这个已脱离了变量命名的范围了,不是么。

好了,关于 php 变量可用字符的知识点分享完毕了,如果有哪说的不对的,请留言,我会及时改正以免误导大家。

我的猜测: ascii 范围 0-127(\x00-\x7f), latin1 范围 0-255(\x00-\xff),也许PHP就是将范围扩充到 latin1 字符集了,当然我没看过PHP源码,只能说是个猜想而已。

注:以上文章由网友x9JikW4t分享,仅用学习使用,不代表本站的观点,如有侵犯你的版权或违法信息,请联系站长删除。

红盟php 解密,php教程_神盾加密解密教程(一)PHP变量可用字符相关推荐

  1. lua加密教程_我们相信加密! 教程

    lua加密教程 许多人认为加密是一个复杂的主题,这很难理解. 可以实现其某些方面,但是每个人都可以理解它在更高层次上的工作方式. 这就是我要处理的这篇文章. 用简单的术语解释它是如何工作的,然后使用一 ...

  2. php神盾 var 1.54,PHP变量可用字符 - 神盾加密解密教程(一)

    PHP变量可用字符 - 神盾加密解密教程(一) 分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/10/16 我们都知道php变量的命名规则,如下: (1) PHP的变量名区 ...

  3. php的变量规定前面要加什么字符,PHP_神盾加密解密教程(一)PHP变量可用字符,先来说说php变量的命名规则, - phpStudy...

    神盾加密解密教程(一)PHP变量可用字符 先来说说php变量的命名规则,百度下一抓一大把: (1) PHP的变量名区分大小写; (2) 变量名必须以美元符号$开始; (3) 变量名开头可以以下划线开始 ...

  4. php神盾 var 1.54,神盾加密解密教程(一)PHP变量可用字符

    先来说说php变量的命名规则,百度下一抓一大把: (1) PHP的变量名区分大小写; (2) 变量名必须以美元符号$开始; (3) 变量名开头可以以下划线开始; (4) 变量名不能以数字字符开头. 其 ...

  5. java des加密解密_Java实现的DES加密解密工具类实例

    本文实例讲述了Java实现的DES加密解密工具类.分享给大家供大家参考,具体如下: 一个工具类,很常用,不做深入研究了,那来可直接用 DesUtil.java package lsy; import ...

  6. php64解密,PHP 用base64兑现加密解密

    PHP 用base64实现加密解密 php中用base64实现加密解密:    base64_encode() 和 base64_decode() 进行加密和解密. 语法:    string bas ...

  7. 加密解密系列文章之 - ASCII 加密解密(最简单的加密解密) 上

    前言: 首先.在这里声明.本人没学过加密解密专业以及没有对加密解密做过任何的系统学习.文章用来记录我自己学到的加密解密的一些我理解的东西,有错误之处欢迎大家指出.谢谢. 加密解密.在以前我的眼里.是灰 ...

  8. 加密解密系列文章之 - ASCII 加密解密(最简单的加密解密) 下

    继上一篇 加密解密系列文章之 - ASCII 加密解密(最简单的加密解密) 上 的下篇. 我在 上 篇里 已经给大家说了最基本的ASCII 加密 解密的东西.然后再最后 我们说了ASCII加密解密的问 ...

  9. php神盾解密,浅谈PHP神盾的解密过程

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 前些日子一个朋友丢了个shell给我,让我帮忙解密,打开源码看了下写着是 "神盾加密" , 其实网上早 ...

最新文章

  1. 摄像头ISP系统原理(上)
  2. java 变量的线程可见性_Java多线程——变量可见性
  3. java获得项目绝对路径
  4. linux文件需求管理,CaliberRM 需求管理系统
  5. 【数据结构与算法】之深入解析“下一个更大元素II”的求解思路与算法示例
  6. 天鼎:一个技术人在世界读书日的遐想
  7. OpenGL显示列表
  8. Android 内容提供器---简介
  9. 【数据结构笔记44】线性探测的散列表的逆问题(拓扑排序的方法)
  10. webpack的可视化资源分析工具webpack-bundle-analyzer的使用
  11. 管理新语:工作没做好,批评几句,怎么成了诛心
  12. linux操作系统实用教程课后答案,Linux操作系统案例教程课后习题答案
  13. python绘图苹果_如何使用python代码画一个苹果?
  14. 7人制足球技战术要点
  15. LibVLC —— 本地音视频例子、Qt播放例子
  16. java实现上位机与下位机串口通信
  17. 关于网线,你了解多少?
  18. idea 配置web项目图片无法显示问题
  19. Error creating bean with name ‘servletEndpointRegistrar‘ defined in class path resource
  20. web widget(微件)

热门文章

  1. 1103 Integer Factorization (30 分)【难度: 中 / 爆搜】
  2. Quartz关闭超时订单
  3. MySQL删除同一个字段的多条记录
  4. 三层登录VB.NET实现
  5. 有了这篇你还说你不会redis性能优化、内存分析及优化
  6. 推荐一个牛逼的 GitHub 项目+支付宝、微信支付项目实战!快来获取!
  7. 好用到爆的 Java 小技巧
  8. Spring面试题和答案
  9. Java IO流之转换流
  10. java 多线程下载器_Java多线程的下载器(1)