欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP代碼加密和擴(kuò)展解密實(shí)戰(zhàn)

 更新時(shí)間:2021年04月20日 11:09:53   作者:一個(gè)不靠譜的程序員  
這篇文章主要介紹了PHP代碼加密和擴(kuò)展解密實(shí)戰(zhàn),對(duì)加密解密感興趣的同學(xué),可以參考下

這種方案是通過(guò)對(duì)代碼進(jìn)行加密,然后利用C語(yǔ)音寫解密的PHP擴(kuò)展。破解難度會(huì)有提升,但依然是會(huì)被破解的。
從網(wǎng)上找過(guò)各種代碼加密的開(kāi)源方案。
一旦開(kāi)源,就不可能保證安全性。畢竟加密和解密的東西都是公開(kāi)的。
目前我們沒(méi)有能力自己去寫擴(kuò)展。還是需要采用開(kāi)源的方案。
我找到的比較好用的是php-beast。
https://github.com/liexusong/php-beast

實(shí)戰(zhàn)開(kāi)始

1.下載源碼

wget https://github.com/liexusong/php-beast/archive/master.zip

2.解壓

unzip master.zip

3.進(jìn)入源碼目錄

cd php-beast-master

4.修改自定義文件頭header.c

char encrypt_file_header_sign[] = {
    0xe8, 0x16, 0xa4, 0x0c,
    0xf2, 0xb2, 0x60, 0xee
};

5.修改默認(rèn)的加密key

這里選用的是AES加密。因此修改aes_algo_handler.c文件,可以隨機(jī)生成字符串替換。建議不要使用我測(cè)試時(shí)隨便寫的key。部署人員記得修改該key并保存。

static uint8_t key[] = {
    0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
    0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c,
};

6.為了安全機(jī)制,開(kāi)啟綁定網(wǎng)卡選項(xiàng)

修改networkcards.c文件,將MAC地址加進(jìn)來(lái)。

char *allow_networkcards[] = {   "替換成網(wǎng)卡的MAC地址", NULL,};

開(kāi)啟綁定網(wǎng)卡以后,beast默認(rèn)的網(wǎng)卡名字是eth0,如果你的網(wǎng)卡名字不是這個(gè),后邊需要將你的網(wǎng)卡名字加入到php.ini里。如:beast.networkcard = “eth0,eth1,eth2”。

使用phpize添加擴(kuò)展
phpize
./configure
make install
如果有一步報(bào)找不到php-config錯(cuò)誤的話,手動(dòng)加上php-config的路徑編譯。

安裝完成后,修改php.ini
extension=beast.so
重啟php-fpm

到此為止,擴(kuò)展安裝完成。

加密代碼

安裝完 php-beast 擴(kuò)展后,可以使用 tools 目錄下的 encode_files.php 來(lái)加密你的項(xiàng)目。使用 encode_files.php 之前先修改 tools 目錄下的 configure.ini 文件,如下:

; source path
src_path = ""

; destination path
dst_path = ""

; expire time
expire = ""

; encrypt type (selection: DES, AES, BASE64)
encrypt_type = "AES"

src_path 是要加密項(xiàng)目的路徑,dst_path 是保存加密后項(xiàng)目的路徑,expire 是設(shè)置項(xiàng)目可使用的時(shí)間 (expire 的格式是:YYYY-mm-dd HH:ii:ss)。encrypt_type是加密的方式,選擇項(xiàng)有:DES、AES、BASE64。 修改完 configure.ini 文件后就可以使用命令 php encode_files.php 開(kāi)始加密項(xiàng)目。

注意事項(xiàng)

步驟很多,但都是命令行。敲完命令就行了。
4,5,6是為了安全要做的。
綁定MAC地址以后,如果非綁定的MAC地址,重啟php-fpm會(huì)無(wú)法啟動(dòng),報(bào)錯(cuò)信息為NOTICE: PHP message: PHP Fatal error: Unable to start beast module in Unknown on line 0
failed
必須在綁定的網(wǎng)卡里才能加載生成的beast.so擴(kuò)展。

部署安裝方式

  1. 在目標(biāo)機(jī)上安裝擴(kuò)展。裝完擴(kuò)展以后把php-beast-master目錄的東西全部刪除。
  2. 在部署的機(jī)子上也就是jenkins服務(wù)器上安裝的擴(kuò)展的目錄不用刪除,刪除也行,記得備份第5步自定義的key。
  3. 在構(gòu)建階段執(zhí)行自動(dòng)化腳本執(zhí)行php encode_files.php 加密代碼。
  4. 在部署階段將加密后的代碼發(fā)布到目標(biāo)機(jī)上。

優(yōu)缺點(diǎn)

安全性

  1. 客戶直接從目標(biāo)機(jī)down下來(lái)代碼,因?yàn)榭蛻魴C(jī)上不知道加密的key,所以是無(wú)法正常解密和閱讀的。
  2. 客戶從目標(biāo)機(jī)上down下來(lái)代碼+beast.so擴(kuò)展,因?yàn)榻壎∕AC地址的緣故,也是無(wú)法正常啟動(dòng)php-fpm的。基本上可以保證基本的安全

缺點(diǎn)

  1. 代碼執(zhí)行過(guò)程需要解密,有略微的性能損失。
  2. 自定義加密邏輯,可能有難度。畢竟C語(yǔ)音忘得差不多了。

可破解的方案

這里我只提供思路,因?yàn)榧用芎蟮拇a需要正常被zend引擎解析,所以在最后zend引擎編譯代碼在過(guò)詞法分析器和語(yǔ)法分析器時(shí),代碼已經(jīng)是解密以后的代碼。也就是在目標(biāo)機(jī)上的zend引擎編譯函數(shù)zend_compile_file里是可以得到解密以后的代碼,可以修改該函數(shù),在函數(shù)里將解密后的代碼寫入文件,即可拿到源碼。 而我們并不需要關(guān)注加密的邏輯和加密的key。
聽(tīng)起來(lái)是不是很扯。如果我有了目標(biāo)機(jī)的權(quán)限,也就相當(dāng)于我可以通過(guò)修改zend引擎的編譯邏輯來(lái)拿到源碼。這樣安全么?
講道理,沒(méi)有絕對(duì)的安全。
php-beast確實(shí)也是劫持的zend_compile_file方法,在代碼到達(dá)zend引擎編譯函數(shù)之前,完成解密的。
對(duì)于該類寫擴(kuò)展加密的情況,在擁有服務(wù)器權(quán)限的情況下。破解的難度可能就在于是否熟悉C語(yǔ)音和zend引擎的工作原理。
想要絕對(duì)的安全(絕對(duì)的安全應(yīng)該是不存在的),只能是修改zend_compile_file的編譯邏輯,也就是改zend引擎的底層邏輯。也就是swoole complier的思路了。不過(guò)swoole complier是對(duì)編譯以后的opcode作了手腳,也就是zend引擎在執(zhí)行opcode之前需要完成解密的,或者是在執(zhí)行過(guò)程中動(dòng)態(tài)解密。具體的不太了解swoole complier的思路。不過(guò)可以知道的是swoole complier需要技術(shù)底蘊(yùn)深厚的人才能破解。
這樣做就看是否值得了。

更安全一點(diǎn)?

在這樣的情況下我們可以開(kāi)啟兩層加密,第一層用ascii碼127到255中間的亂碼混淆PHP代碼。第二層對(duì)亂碼混淆的代碼做加密。就是說(shuō)即使他們登錄上服務(wù)器修改了zend引擎的解析函數(shù),拿到的也是混淆以后的亂碼。想要還原成PHP代碼還需要一定的時(shí)間。只是增大了破解的難度,但是對(duì)于有耐心的人,依然是可以破解,只是時(shí)間問(wèn)題。

以上就是PHP代碼加密和擴(kuò)展解密實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于PHP代碼加密和擴(kuò)展解密的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解JIT編譯器在PHP8中的工作原理

    詳解JIT編譯器在PHP8中的工作原理

    JIT是Just-In-Time 編譯的縮寫,是一種在運(yùn)行時(shí)將高級(jí)源代碼編譯成機(jī)器碼的技術(shù),JIT是PHP 8.0中最重要的新功能之一,JIT 編譯器的核心思想是將 PHP 源代碼分為熱代碼路徑和冷代碼路徑,本文給大家詳細(xì)介紹了JIT編譯器在PHP8中的工作原理,需要的朋友可以參考下
    2023-10-10
  • PHP解析xml格式數(shù)據(jù)工具類示例

    PHP解析xml格式數(shù)據(jù)工具類示例

    這篇文章主要介紹了PHP解析xml格式數(shù)據(jù)工具類,涉及php針對(duì)xml格式數(shù)據(jù)節(jié)點(diǎn)添加、獲取、解析等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • PHP反射基礎(chǔ)知識(shí)回顧

    PHP反射基礎(chǔ)知識(shí)回顧

    這篇文章主要介紹了PHP 反射的相關(guān)資料,幫助大家回顧和理解PHP的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-09-09
  • PHP實(shí)現(xiàn)防重復(fù)提交(防抖)的方法總結(jié)

    PHP實(shí)現(xiàn)防重復(fù)提交(防抖)的方法總結(jié)

    當(dāng)涉及到處理表單提交或用戶點(diǎn)擊按鈕等操作時(shí),防抖(Debounce)是一種重要的技術(shù),它可以有效地防止不必要的重復(fù)操作,本文為大家整理了 PHP 中防抖的多種實(shí)現(xiàn)方法,需要的可以參考下
    2023-09-09
  • php下使用無(wú)限生命期Session的方法

    php下使用無(wú)限生命期Session的方法

    php下使用無(wú)限生命期Session的方法...
    2007-03-03
  • PHP實(shí)現(xiàn)根據(jù)時(shí)間戳獲取周幾的方法

    PHP實(shí)現(xiàn)根據(jù)時(shí)間戳獲取周幾的方法

    這篇文章主要介紹了PHP實(shí)現(xiàn)根據(jù)時(shí)間戳獲取周幾的方法,涉及PHP針對(duì)時(shí)間與日期操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-02-02
  • ThinkPHP5.0之底層運(yùn)行原理執(zhí)行流程分析

    ThinkPHP5.0之底層運(yùn)行原理執(zhí)行流程分析

    run()方法可以在/thinkphp/library/think/App.php文件中找到對(duì)應(yīng)方法,這個(gè)方法是整個(gè)框架的核心方法,實(shí)現(xiàn)了路由轉(zhuǎn)換、獲取調(diào)度信息、根據(jù)調(diào)度信息執(zhí)行相應(yīng)模塊控制器的方法、獲取方法返回?cái)?shù)據(jù)、將返回?cái)?shù)據(jù)賦值給Response對(duì)象等一系列操作。
    2023-05-05
  • PHP處理Json字符串解碼返回NULL的解決方法

    PHP處理Json字符串解碼返回NULL的解決方法

    這篇文章主要介紹了PHP處理Json字符串解碼返回NULL的解決方法,以一個(gè)過(guò)濾函數(shù)的實(shí)例展示了處理json返回錯(cuò)誤的解決方法,并羅列了造成這一錯(cuò)誤的常見(jiàn)情況,需要的朋友可以參考下
    2014-09-09
  • PHP 函數(shù)執(zhí)行效率的小比較

    PHP 函數(shù)執(zhí)行效率的小比較

    要求寫一個(gè)自定義函數(shù),使 $data = array(12, 43, 87, 45) => $data = array(1, 2, 4, 3, 8, 7, 4, 5);
    2010-10-10
  • php查詢相似度最高的字符串的方法

    php查詢相似度最高的字符串的方法

    這篇文章主要介紹了php查詢相似度最高的字符串的方法,涉及php操作字符串及數(shù)組實(shí)現(xiàn)相似度算法的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論