首頁 >後端開發 >php教程 >php源碼怎麼加密?

php源碼怎麼加密?

藏色散人
藏色散人原創
2019-05-22 10:51:3829905瀏覽

php是目前最受歡迎的web程式語言,沒有之一。但由於php是解釋執行的,原始碼即程序,為了商業化(也或是其他一些目的)加密是必不可少的。本系列將對國內常見/常用的一些php加密手段做一些介紹和分析。

php源碼怎麼加密?

php原始碼怎麼加密?

#php原始碼加密的方法:

一、無需任何PHP擴充的加密

此類加密的代表有威盾PHP加密專家、PHP線上加密平台、PHP神盾等。

這類加密都是以eval函數為核心,輔以各式各樣的字串混淆和各種小技巧,來達到加密目的(更準確的說,應該算是混淆)。以下以一個簡單的hello world為例來說明這類加密的大體過程。

<?php
  echo "hello world";

首先,我們把這段程式碼變成透過eval執行的

<?php
  eval(&#39;echo "hello world";&#39;);

然後,我們再進行一些轉換,比如說base64編碼

<?php 
  eval(base64_decode(&#39;ZWNobyAiaGVsbG8gd29ybGQiOw==&#39;));

就這樣子,我們的第一個加密過的php程式碼新鮮出爐了。 。 。

上面這個例子非常非常簡單,基本上任何有一點php語言基礎甚至別的語言基礎的人都能輕鬆的看懂並解密。因此,我們需要一些方法來讓這個加密至少看起來不是那麼簡單。

二、同時採用多種編碼函數

除了剛才提到的base64,php還有許多內建的編碼函數,例如urlencode、gzcompress等。把這些函數混合使用可以提高解密的複雜度(不是難度),此外還可以使用strtr來制定自己的編碼規則。使用變數來代替函數名 使用特定字符來命名變數

這兒所說的特定字符是一些極其相似的字符,如I和1,0和O。試想滿螢幕都是O和0組成的變量,而且每一個的名字長度都在10個字元以上。 。 。判斷文件本身是否被修改

這個功能看似容易,對文件做一下摘要再進行下對比即可知道是否被修改了,但是如何才能在文件內把摘要嵌入進去呢?我沒有找到完美的方案,但變通的方案還是很容易的。 。 。

<?php
$code = substr(file_get_contents(__FILE__), 0, -32);
$hash = substr(file_get_contents(__FILE__), -32);
if(md5($code) !== $hash) {
  exit(&#39;file edited&#39;);
}
ACBC41F727E00F85BEB3440D751BB4E3

當然,你可以把這個校驗字串放在別的位置來提高破解的難度。有了這個,別人想破解你的程式可就得多費一點功夫了。 。 。

既然知道了原理,那解密自然也就非常簡單了,總體來說就三步:

把eval替換為輸出,比如echo 根據編碼規則把字符串還原如果文件未解密完全,從第一步開始繼續

當然,實際上的解密過程並沒有這麼簡單,比如說如果加密的時候使用了gzcompress,那得到的數據將會包含一些二進制數據,而採用一般的文字編輯器開啟時這些資料都會顯示為亂碼,並且在儲存時會遺失部分資料。解決方法很簡單也很麻煩,那就是使用二進位(16進位)方式開啟、修改和儲存。

以上是php源碼怎麼加密?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn