天天看點

解析php混淆加密解密的手段,如 phpjm,phpdp神盾,php威盾

php做為一門當下非常流行的web語言常常看到有人求解密php檔案想當年的asp也是一樣。一些人不了解為什麼要混淆(加密)甚至鄙視混淆(加密)在我看來混淆加密代碼可以用來防一般的小人會起到一定的保護作用。

加密的原因

1. 保護代碼防止别人剽竊

2. 保護檔案防止别人發現/清除(php木馬 or 後門)

3. 剽竊了他人代碼防止被發現

4. 其他商業或非商業目的

我一直都比較關注代碼的加解密從簡單eval base64,gzcompress,gzinflate 到 威盾Zend Guard加密到近期比較流行的一種二進制(unicode亂碼)加密,如 phpjm,phpdp神盾。對比這幾種加密方式。

第一種加密方式就是簡單的使用函數encode代碼之後再eval(decode('encode的代碼')),解密非常簡單直接把eval替換成exit即可輸出源代碼如果經過多層加密就繼續替換下去...

解密難度

第二種威盾加密做為第一種方式的更新版即把之前的base64之類的系統内置函數變成了匿名函數。解密也是一樣把eval替換成exit即可。

第三種Zend Guard,這種加密方式無法像前面一樣手動解密。需要用到工具如dezender黑刀。

目前我知道的就隻有php4~php5.2的可以被此工具解密出來解密出來的變量或函數可能比較醜像$_obfuscate開頭因為經過混淆了。不過如果在php代碼裡加上一句代碼可使該程式溢出導緻解密失敗。

第四種二進制(unicode亂碼)加密如phpjm,phpdp神盾。這種加密方式其實也是威盾的更新版即把匿名函數字元串經過一系列的打亂分散處理之後再把函數、變量、字元串替換成經過處理的unicode字元串。這樣生成的檔案就不能輕易的修改了。加大了解密的難度解密方法也簡單就是替換掉那些變量和方法使之成為正常的字元串再exit即可。

總結php無擴充加密無非用到的幾個函數 eval , preg_replace使用e修飾符 , strtr , base64_decode。