摘要:前面一篇文章實戰還原加密文件說到我發現了加密文件方式的不足,所以才有了這篇文章。加密分為兩種方式執行一種是有擴展。第二種代表的有和松哥的。來個例子這次咱們拿松哥的來下手。松哥的代碼寫得非常漂亮,知道解密耗費時間還寫了個。
只是技術交流,并沒有惡意,請不要濫用此技術。如果有疑問歡迎跟我交流。
前面一篇文章 實戰還原PHP加密文件 說到我發現了PHP加密文件方式的不足,所以才有了這篇文章。
背景分析眾所周知 PHP 是一種腳本語言,腳本語言主要是使用解釋運行而非編譯運行。所以相對于編譯型語言(C、C#、C++),它沒有直接生成exedll的能力。所以傳統型的加密方式加殼它使用不上。
所以PHP的加密方式一般有兩種:混淆和加密。
混淆這種嚴格意義上不算加密,這種代碼就像用拼音縮寫命名變量的代碼,只是你看起來費勁了點。這種不在我們討論范圍。
加密分為兩種方式執行:一種是有擴展(Loader)。 另外一種是無擴展。
首先講講無擴展的加密方式。這種加密方式非常的無腦,因為他的解密過程是公開的,而且得利用已知的PHP函數。加密之后的代碼一般類似下面:
即使看起來非常復雜的:
也不過是上面的變式而已。像這種解密形式公開的非常好破解,只要找到 eval 改成 echo 就行。
另外一種有擴展方式就比較復雜了。擴展在這里的作用主要是解密跟執行代碼,相比無擴展的形式他將解密跟執行的代碼隱藏在擴展里,所以破解較為復雜。
這里的擴展一般分為兩種類型的:1、提供解密執行函數的。2、直接覆蓋 zend_compile_file 實現解析自定義的php文件功能。
第一種最典型的例子就是我上篇文章提到的 zoeeyguard,主要使用了 zend_eval_string 這個函數來執行php代碼。
第二種代表的有:Zend Guard 和 松哥的 php-beast 。
可以說兩種破解思路都差不多。可以優先嘗試我上一篇文章里面的思路。
當然如果我上一篇沒有解決的情況下怎么辦呢?
這個時候就需要奉上大殺器了。
你會發現我在前文一直說到兩個的函數 zend_compile_file 和 zend_eval_string,有些聰明的phper已經想到了,對!思路還是 只要找到 eval 改成 echo 就行。
實戰例子咱們不能光打嘴炮,光說不做。來個例子:
這次咱們拿松哥的 php-beast 來下手。松哥的代碼寫得非常漂亮,知道 AES DES 解密耗費時間還寫了個 Cache 。
1.下載 linux 的 php 源碼包(版本最好在5.6跟5.5之間選擇一個,7不支持,BTW:7的改動還是挺大的,很多東西都沒兼容,Zend Guard 也不支持7。這里我走了彎路。)
2.找到文件 Zendzend_language_scanner.c 中的函數:zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) 大概在500多行的樣子,將如下的代碼加在前面(代碼寫得爛,切勿吐槽):
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) { zend_lex_state original_lex_state; zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); zend_op_array *original_active_op_array = CG(active_op_array); zend_op_array *retval=NULL; int compiler_result; zend_bool compilation_successful=0; znode retval_znode; zend_bool original_in_compilation = CG(in_compilation); /** BEGIN **/ //加在這里的含義就是每次php編譯php源碼的時候都把這份源碼打印一份 char *buf; size_t size; zend_stream_fixup(file_handle, &buf, &size); printf(" ####### FILE TYPE: %d FILE NAME: %s CONTENT: %s ####### ", (*file_handle).type, (*file_handle).filename, buf); /** END **/在php文件夾下執行:
//節省點時間 ./configure --disable-ipv6 --disable-all make make install4.如果順利的話PHP已經安裝成功了。
5.我們寫兩個測試文件:
作用是: test.php 執行它去加密 before.php 生成 after.php。//test.php//before.php7.執行以下 php test.php 接著在執行 php after.php。
下面就看截圖吧:
總結1、沒有破不了的密碼。我們能做的只是增加破解時間。如果這個破解時間大于一個人的壽命,那么這個加密方式肯定是成功的。
廣告
2、對于加密的程序,就像破解者需要了解、猜測編寫者的思路一樣,編寫者也需要去了解破解者的方法、手段。這樣才能寫出破解難度更高的程序。
3、相比加密我覺得混淆更適合php源代碼的“加密”。
4、如果你的php代碼想要加密發布出去,最好的方式還是提高收費然后直接源碼提供。如果您覺得寫的好,隨便支持一點吧!
http://wx-app.com.cn 是一個微信小程序的資訊站點。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30508.html
摘要:先說環境實戰過程手頭上有一個加密過的項目和一個擴展的動態連接庫。根據數據更改里面的文件。主要的時間是在試探加密參數上,很幸運的是文件也沒有加殼。在破解的過程中也了解了加密的缺陷性,所以才有了下一篇文章通用加密文件還原方法。 先說環境: Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-52-generic x86_64) PHP 5.5.9-1u...
摘要:前言首先聲明這不是,具體齊博版本就不說了,后面應該有人也發現這個漏洞并且發出來了。那時候對當時的齊博系列進行完整的分析和代碼審計,漏洞不少,挑幾個有意思的發出來。任意長度最終密文則為由于網絡傳輸字符關系,齊博這里對進行了一次操作。 前言 首先聲明這不是0day,具體齊博版本就不說了,后面應該有人也發現這個漏洞并且發出來了。 本文為篤行日常工作記錄,文章是大概14年國慶節寫的,一直未公開...
摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...
摘要:所謂對稱加密,就是加密和解密使用同一秘鑰,這也是這種加密算法最顯著的缺點之一。非對稱加密算法由于對稱加密在通信加密領域的缺陷,年和提出了非對稱加密的概念。非對稱加密,其主要缺點之一就是慢,適合加密少量數據。 1. 加密的目的 加密不同于密碼,加密是一個動作或者過程,其目的就是將一段明文信息(人類或機器可以直接讀懂的信息)變為一段看上去沒有任何意義的字符,必須通過事先約定的解密規則才能將...
閱讀 1128·2021-08-12 13:24
閱讀 2974·2019-08-30 14:16
閱讀 3303·2019-08-30 13:01
閱讀 2064·2019-08-30 11:03
閱讀 2769·2019-08-28 17:53
閱讀 3079·2019-08-26 13:50
閱讀 2263·2019-08-26 12:00
閱讀 943·2019-08-26 10:38