关于php无字母代码的研究
2019獨角獸企業重金招聘Python工程師標準>>>
什么是無字母代碼,也就是代碼中不出現任何的數字或者字母.而是通過用一些特殊的方法構造出字母.這個在javascript里面經常看到.PHP 也可以通過一些hack的方式來實現
首先php 里有一個非常特殊的字符就是 "_" ?這個字符在不經過引號的引起來的情況就可以直接輸出
例如執行
<?php echo _; ?>你會得到 ?_ 這個字符的輸出。而其他的特殊字符則不可以.
好了開始轉變思路.眾所周知php是弱類型語言,字符串是可以直接和數字進行運算的. 那么 _ 這個字符應該也同樣可以
嘗試如下代碼:
<?php echo +_; ?>
會看到輸出 的是數字 0.很神奇對吧,其實上面的代碼類似 ?echo 0+_; 字符串 _ 被轉成整型來進行計算了.
好了現在數字0已經有了. 那么1 怎么獲得呢..
那么就要用到取反的符號了 ~ ,嘗試執行如下代碼
<?php echo -~+_; ?>可以看到輸出是 1 ,原理也比較簡單 0 按位取反得到 -1 (注意是二進制的按位取反), - 則是數學意義上的取反,最終得到1
好了現在 1 和 0 我們都有了..可以說這個世界就擁有了一半了.后面的數字就不用再舉例了.
即使最簡單的 (-~+_)+(-~+_) ...的方式也足夠得到其余所有的數字了.
好了下面要解決比較困難的問題,如何獲得abcd 這樣的字母呢
暫時我只能找到用數組變量轉成Array的字符串,然后用數組字符串的形式取出其中的字母
我們先來得到一個數組
$_[]++; 注:php 5.4以前是不支持 $_=[]; 這樣的數組定義語法的.所以只能變通一下用 $_[]++ 來得到一個數組。
然后看下面的代碼
<?php $_[]++; echo $_._; ?>你會看到輸出 Array_ ?, 哈哈 ,終于得到我們要的字符串了。
下面思路就比較清晰了,只要取出 這個字符串數組里的字符即可。看代碼把
<?php $_[]++; $_[]=$_._; echo $_[-~+_][+_]; ?>這樣就得到 第一個字母 A 了.?
其他的字母 想要得到就簡單多了
<?php $_[]++; $_[]=$_._; $_=$_[-~+_][+_]; echo ++$_; ?>這樣就可以得到字母B 了.
好了我們來 嘗試執行如下代碼:
<?php $_[]++; $_[]=$_._; $_=$_[-~+_][+_]; ++$_;++$_;++$_;++$_;$__=++$_;++$_;$___=++$_;++$_;++$_;++$_;++$_;++$_;$____=++$_;$______=$_____=++$_; $_=++$_____.$___.$_____.++$___.$____.$__.$______; $_(); ?>代碼有些丑陋, 但正常執行應該是沒有問題的.那么你看出上面的代碼執行的是什么內容了嗎?
實際上上述代碼 等等同于 phpinfo() 這一行代碼.
有些蛋疼的研究,不過很有趣.?
轉載于:https://my.oschina.net/jiuxiaoyao/blog/151367
總結
以上是生活随笔為你收集整理的关于php无字母代码的研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文广体新局文书档案整理方案
- 下一篇: 今年会招去年应征报名的吗