php神盾 var 1.54,神盾加密解密教程(一)PHP变量可用字符
先来说说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源码,只能说是个猜想而已。
php神盾 var 1.54,神盾加密解密教程(一)PHP变量可用字符相关推荐
- php的变量规定前面要加什么字符,PHP_神盾加密解密教程(一)PHP变量可用字符,先来说说php变量的命名规则, - phpStudy...
神盾加密解密教程(一)PHP变量可用字符 先来说说php变量的命名规则,百度下一抓一大把: (1) PHP的变量名区分大小写; (2) 变量名必须以美元符号$开始; (3) 变量名开头可以以下划线开始 ...
- php神盾 var 1.54,PHP变量可用字符 - 神盾加密解密教程(一)
PHP变量可用字符 - 神盾加密解密教程(一) 分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/10/16 我们都知道php变量的命名规则,如下: (1) PHP的变量名区 ...
- 红盟php 解密,php教程_神盾加密解密教程(一)PHP变量可用字符
先来说说php变量的命名规则,百度下一抓一大把: (1) PHP的变量名区分大小写; (2) 变量名必须以美元符号$开始; (3) 变量名开头可以以下划线开始; (4) 变量名不能以数字字符开头. 其 ...
- java 3des_如何用Java进行3DES加密解密 java实现3des加密解密教程
3des,全称为3DESede或TripleDES,中文解释为是三重数据加密,用户可以通过通过对DES算法进行改进,针对每个数据块进行三次DES加密,下面小编为你带来java实现3des加密解密教程! ...
- encrypt decrypt 加密解密完整实例(密文可用密钥解密)
<?php error_reporting(0); header("content-Type: text/html; charset=utf-8");//输出编码/**功能: ...
- Windows系统文件夹加密解密教程
个人信息安全,尤其是公共电脑,隐私保护就很重要了.如何让你文件夹看起来更个性,信息更安全?使用更方便呢?在本文中编辑将给大家介绍这方面的技巧,一定会让你的系统看起来更加有个性,使用更方便,信息更安全. ...
- java rsa字符串_使用RSA对字符串加密解密
本文介绍,使用命令行和编程语言(nodejs和java),将字符串用RSA加密和解密. 命令行:openssl 使用Mac,openssl自带了,以下使用步骤在Mac OSX 10.9.2下测试通过. ...
- 解析php混淆加密解密的手段,如 phpjm,phpdp神盾,php威盾
解析php混淆加密解密的手段,如 phpjm,phpdp神盾,php威盾 原文 解析php混淆加密解密的手段,如 phpjm,phpdp神盾,php威盾 php做为一门当下非常流行的web语言,常常看 ...
- 最新互普威盾4.62.0415 IPguard4.62电脑行为管理 各类文件加密解密 威盾4.61 IP-guard4.62 威盾4.54 IP-guard3.5 IPguard4.5
最新互普威盾4.62.0415 IPguard4.62电脑行为管理 各类文件加密解密 威盾4.61 IP-guard4.62 威盾4.54 IP-guard3.5 IPguard4.5 互普威盾IP- ...
最新文章
- Android Studio安卓开发中使用json来作为网络数据传输格式
- linux 下挂载光盘
- Android 源码分析之 EventBus 的源码解析
- kettle将文件路径定义为_kettle_步骤解释
- 手把手教你在Windows10环境下安装深度学习框架(pytorch or tensorflow)
- C#算数运算符、关系运算符、逻辑运算符、语句
- C语言能否写windows应用程序,C语言能写windows的窗口吗?
- xdocument查找节点值_二叉查找树(java)
- python中常用的方法
- TCP/IP原理 (四) IP编址
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结...
- SQL Server内存
- 再次总结一下压缩与解压缩
- 究竟是什么人在买爱马仕?
- 2022年哈工大秋季学期程序人生
- Vmware Ubuntu虚拟机磁盘扩容(非常简单)
- RabbitMQ(四):mandatory、immediate、备份交换器
- 性能测试-实例讲解VU、RPS、RT公式换算
- Python入门--Pthon环境的安装
- UI设计是青春饭?今天告诉你真相!
热门文章
- 深度相机_深度相机(TOF)的工作原理
- python如何打开npy文件_操作python实现npy格式文件转换为txt文件
- 【文献阅读】Stacked What-Where Auto-encoders -ICLR-2016
- LeetCode Week 4:第 31 ~ 40 题
- Java 实验5 T4 检验字符串是否合法
- 计算机视觉CV中特征点提取SURF算法的学习笔记
- tomcat使用方法大全
- 人脸识别+检索项目记录
- leetcode953. Verifying an Alien Dictionary
- JAVA虚拟机类加载机制之类加载的时机双亲委派模型