PHP 原始碼加密學習

chaofu發表於2020-02-20

有時候公司要求加密php 原始碼

因為公司的程式碼會部署到代理商上, 所以很有可能程式碼被盜取。那麼就要把程式碼加密,在加密的工具如何選擇,
有些收費的,也有些開源。

選擇收費的 缺點是 需要花錢,但是可能加密性好一點,在效能方面會好一點

PHP 原始碼加密學習

選擇開源的 優點不需要 花錢,可能效能不是很好,不過也可以使用。

選擇 php-beast 為php一個擴充套件,可以方便快捷為php程式碼進行加密處理

有這幾個特點

  1. 提供只能在指定的機器上執行的功能。要使用此功能可以在 networkcards.c 檔案新增能夠執行機器的網路卡號
  2. 程式碼使用可以設定有效期,超過這個有效期程式碼就不能使用了
  3. 可以自定義修改預設的的金鑰,提高了被盜取的可靠性

原始碼:https://github.com/liexusong/php-beast 可以參照文件
注意如果系統有多個php 版本,安裝方法有所不同,需要安裝擴充套件到對應的php 版本 例子 部落格:多 PHP 版本共存的環境下安裝 Swoole 到指定版本

Linux 系統安裝 步驟1 (注意需要root 安裝保證許可權)

$ wget https://github.com/liexusong/php-beast/archive/master.zip
$ unzip master.zip
$ cd php-beast-master
$ phpize
$ ./configure
$ sudo make && make install 

編譯好之後修改php.ini配置檔案(可能php.ini 配置 有cli和fpm)cli 就命令列執行php, 加入配置項: extension=beast.so, 重啟php-fpm

確定beast擴充套件是否載入上

PHP 原始碼加密學習

加密方案 進入 php-beast-master/tool/ 目錄配置 configure.ini 檔案

#source path   
src_path = ""

#destination path 加密的php 放到的目錄
dst_path = ""

#expire time 原始碼使用有效期
expire = "2021-02-13 14:48:12"

#encrypt type 加密型別 可以有 selection: DES, AES, BASE64
encrypt_type = "DES"

進入 php-beast-master/tool/ 執行 php encode_files.php,加密後的結果

![PHP 原始碼加密學習]

PHP 原始碼加密學習

可以定製修改 預設的加密原始碼這個不容易給破解

  1. 修改加密後的檔案頭結構:開啟header.c檔案,找到以下程式碼:
    char encrypt_file_header_sign[] = {
     0xe8, 0x16, 0xa4, 0x0c,
     0xf2, 0xb2, 0x60, 0xee
    }; 
    int encrypt_file_header_length = sizeof(encrypt_file_header_sign);
    自定義修改以下程式碼(其中的數字的範圍為:0-8,字母的範圍為:a-f):
    0xe8, 0x16, 0xa4, 0x0c,
    0xf2, 0xb2, 0x60, 0xee 
  2. 修改aes模組加密key:
    開啟php-beast-master/aes_algo_handler.c檔案,找到以下程式碼:
    static uint8_t key[] = {
    0x2b, 0x7e, 0x61, 0x16, 0x28, 0xae, 0xd2, 0xa6,
    0xab, 0xi7, 0x10, 0x88, 0x09, 0xcf, 0xef, 0xxc,
    }; 
    自定義修改以下程式碼(其中的數字的範圍為:0-8,字母的範圍為:a-f):
    0x3b, 0x7d, 0x61, 0x16, 0x28, 0xae, 0xd2, 0xa6,
    0xab, 0xi7, 0x10, 0x88, 0x49, 0xcf, 0xef, 0xxc,
  3. 修改des模組加密key:
    開啟php-beast-master/des_algo_handler.c檔案,找到以下程式碼
    static char key[8] = {
     0x01, 0x1f, 0x01, 0x1f,
     0x01, 0x0e, 0x01, 0x0e,
    };
    // 修改以 {} 裡面的程式碼(其中的數字的範圍為:0-8,字母的範圍為:a-f):

加密前 和 加密後的時間的對比

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章