免費線上PHP加密、解密、混淆原始碼工具-toolfk.com

王三金發表於2018-11-05

  本文要推薦的[ToolFk]是一款程式設計師經常使用的線上免費測試工具箱,ToolFk 特色是專注於程式設計師日常的開發工具,不用安裝任何軟體,只要把內容貼上按一個執行按鈕,就能獲取到想要的內容結果。ToolFk還支援 BarCode條形碼線上生成QueryList採集器PHP程式碼線上執行PHP混淆、加密、解密Python程式碼線上執行JavaScript線上執行YAML格式化工具HTTP模擬查詢工具HTML線上工具箱JavaScript線上工具箱CSS線上工具箱JSON線上工具箱Unixtime時間戳轉換Base64/URL/Native2Ascii轉換CSV轉換工具箱XML線上工具箱WebSocket線上工具Markdown 線上工具箱Htaccess2nginx 轉換進位制線上轉換線上加密工具箱線上偽原創工具線上APK反編譯線上網頁截圖工具線上隨機密碼生成線上生成二維碼Qrcode線上Crontab表示式生成線上短網址生成線上計算器工具。等20多個日常程式設計師開發工具,算是一個非常全面的程式設計師工具箱網站。


網站名稱:ToolFk
網站鏈結:www.toolfk.com/
工具連結:www.toolfk.com/tool-conver…

程式碼教學

本程式碼[線上PHP加密、解密、混淆原始碼工具]依賴於CSDN一位朋友的程式碼庫,由於很久之前借鑑過來的。所以沒記住他的部落格連結。在此抱歉。實現的PHP程式碼如下

STEP 1

confusion.png

STEP 2

是依賴這個PHP類。使用時直接NEW 一個物件,呼叫它的方法就行了。再次感謝作者的免費提供。

class PhpEncode
{
    function is_cli()
    {
        return php_sapi_name() == 'cli' ? 1 : 0;
    }

    function rstr() //Random String Function
    {
        $len = rand(3, 6);
        $chr = '';
        for ($i = 1; $i <= $len; $i++) {
            $chr .= rand(0, 1) ? chr(rand(65, 90)) : chr(rand(97, 122));
        }
        return $chr;
    }

    function enjumble($data) //Custom Encoding + Base64 + gzinflate()
    {
        for ($i = 0; $i < strlen($data); $i++) {
            $data[$i] = chr(ord($data[$i]) + 1);
        }
        return base64_encode(gzdeflate($data, 9));
    }

    function striptag($in) //Remove '= 5; $i++) {
                $in[$i] = ' ';
            }
            return $in;
        } else {
            return $in;
        }
    }

    function makeoutfile($str)
    {
        $funcname = $this->rstr();
        $varname = '$' . $this->rstr();
        $template = "enjumble($str);
        $template = $template . $str . "\"));?>";
        return $template;
    }

    function confound($input)
    {
        return $this->makeoutfile($this->striptag($input));
    }


    //=====encode 2
    private $c='';//儲存密文
    private $s='',$q1,$q2,$q3,$q4,$q5,$q6;//儲存生成的加密後的檔案內容
    //如果不設定一個值,isset會表示不存在;
    private $file='';//讀取檔案的路徑
    private $source='',$target='';
    //建構函式,例項化時呼叫初始化全域性變數;
    public function __construct(){
        //初始化全域性變數
        $this->initialVar();
        //echo "hello \n";
    }
    /*
    *@input  $property_name,$value
    *@output
    *   魔法方法,對變數進行設定值;可根據需求進行處理。若直接去除if判斷表示可用設定任何屬性的值,包括不存在的屬性;
    */
    public function __set($property_name,$value){
        //定義過的變數;
        if(isset($this->$property_name)){
            $this->$property_name = $value;
        }else{
            //異常處理,處理未宣告的變數賦值;可根據需求進行處理。
            throw new Exception("property does not exist");
        }
    }
    //魔法方法 取出變數的值;
    public function __get($property_name){
        if(isset($this->$property_name)){
            return $this->$property_name;
        }else{
            //throw new Exception("property does not exist");
            return NULL;
        }
    }
    //取隨機排序
    private function RandAbc($length=""){//隨機排序取回
        $str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        return str_shuffle($str);
    }
    //對明文內容進行加密處理
    private function ciphertext($input){
        //$filename='index.php';
        $T_k1=$this->RandAbc();
        $T_k2=$this->RandAbc();
        $v1=base64_encode($input);
        $c=strtr($v1,$T_k1,$T_k2);
        $this->c=$T_k1.$T_k2.$c;
        return $this;
    }
    //初始化變數
    private function initialVar(){
        $this->q1="O00O0O";//base64_decode
        $this->q2="O0O000";//$c(原文經過strtr置換後的密文,由 目標字元+替換字元+base64_encode(‘原文內容’)構成)
        $this->q3="O0OO00";//strtr
        $this->q4="OO0O00";//substr
        $this->q5="OO0000";//52
        $this->q6="O00OO0";//urldecode解析過的字串(n1zb/ma5\vt0i28-pxuqy*6%6Crkdg9_ehcswo4+f37j)

    }
    //生成加密後的模板(複雜版本);
    private function model(){
        //$c = $this->c;
        //$this->initialVar();
        $this->s='q6.'=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$'.
            $this->q1.'=$'.$this->q6.'{3}.$'.$this->q6.'{6}.$'.$this->q6.'{33}.$'.$this->q6.'{30};$'.$this->q3.'=$'.$this->q6.'{33}.$'.$this->q6.'{10}.$'
            .$this->q6.'{24}.$'.$this->q6.'{10}.$'.$this->q6.'{24};$'.$this->q4.'=$'.$this->q3.'{0}.$'.$this->q6.'{18}.$'.$this->q6.'{3}.$'.$this->q3.'{0}    
        .$'.$this->q3.'{1}.$'.$this->q6.'{24};$'.$this->q5.'=$'.$this->q6.'{7}.$'.$this->q6.'{13};$'.$this->q1.'.=$'.$this->q6.'{22}.$'.$this->q6.'{36}    
        .$'.$this->q6.'{29}.$'.$this->q6.'{26}.$'.$this->q6.'{30}.$'.$this->q6.'{32}.$'.$this->q6.'{35}.$'.$this->q6.'{26}.$'.$this->q6.'{30};    
        eval($'.$this->q1.'("'.base64_encode('$'.$this->q2.'="'.$this->c.'";  
        eval(\'?>\'.$'.$this->q1.'($'.$this->q3.'($'.$this->q4.'($'.$this->q2.',$'.$this->q5.'*2),$'.$this->q4.'($'.$this->q2.',$'.$this->q5.',$'.$this->q5.'),    
        $'.$this->q4.'($'.$this->q2.',0,$'.$this->q5.'))));').'"));?>';
        return $this;
    }
    //建立加密檔案
    private function build($target){
        //$this->encodes("./index.php");
        //$this->model();
        $fpp1 = fopen($target,'w');
        fwrite($fpp1,$this->s) or die('寫入是失敗!');
        fclose($fpp1);
        return $this;
    }
    //加密處理 連貫操作
    public function encode($input){
        //$file = "index.php";
        //連貫操作其實就是利用函式處理完後返回自身
        return $this->ciphertext($input)->model()->s;
    }
    //解密
    public function decode($out){
        //讀取要解密的檔案
        try{
            return @$this->decodeMode($out)->s;
        }catch (FatalThrowableError $e){
            return "decode error";
        }
    }
    //解密模板,得到解密後的文字
    private function decodeMode($fpp1){
        //以eval為標誌 擷取為陣列,前半部分為密文中的替換掉的函式名,後半部分為密文
        $m = explode('eval',$fpp1);
        //對系統函式的替換部分進行執行,得到系統變數
        $varStr = substr($m[0],strpos($m[0],'$'));
        //執行後,後續就可以使用替換後的系統函式名
        eval($varStr);
        //判斷是否有密文
        if(!isset($m[1])){
            return $this;
        }

        //對密文進行擷取 {$this->q4}  substr
        $star =  strripos($m[1],'(');
        $end = strpos($m[1],')');
        $str = ${$this->q4}($m[1],$star,$end);
        //對密文解密 {$this->q1}  base64_decode
        $str = ${$this->q1}($str);
        //擷取出解密後的  核心密文
        $evallen = strpos($str,'eval');
        $str = substr($str,0,$evallen);
        //執行核心密文 使系統變數被賦予值 $O0O000
        eval($str);
        //並不能將如下段封裝,因為 ${$this->qn} 並不能在全文中起作用
        $this->s = ${$this->q1}(
            ${$this->q3}(
                ${$this->q4}(
                    ${$this->q2},${$this->q5}*2
                ),
                ${$this->q4}(
                    ${$this->q2},${$this->q5},${$this->q5}
                ),
                ${$this->q4}(
                    ${$this->q2},0,${$this->q5}
                )
            )
        );
        return $this;
    }
    //遞迴讀取並建立目標目錄結構
    private function targetDir($target){
        if(!empty($target) )  {
            if(!file_exists($target)){
                mkdir($target,0777,true);
            }else{
                chmod($target,0777);
            }

        }
    }

    //遞迴解密 對指定資料夾下的php檔案解密
    public function decodeDir($source,$target=""){
        if(is_dir($source)){
            $this->targetDir($target);
            $dir = opendir($source);
            while(false!=$file=readdir($dir))
            {
                //列出所有檔案並去掉'.''..' 此處用的例項為thinkphp框架,所以預設排除裡Thinkphp目錄,使用者可以按照自己的需求設定
                if($file!='.' && $file!='..' && $file !='ThinkPHP')
                {
                    $path = $target.DIRECTORY_SEPARATOR.$file;
                    $sourcePath =  $source.DIRECTORY_SEPARATOR.$file;
                    $this->decodeDir($sourcePath,$path);
                }
            }

        }else if(is_file($source)){
            $extension=substr($source,strrpos($source,'.')+1);
            if(strtolower($extension)=='php'){
                $this->decode($source,$target);
            }else{
                //不是php的檔案不處理
                copy($source, $target);
            }
            //return;
        }
    }
    //遞迴加密 對指定資料夾下的php檔案加密
    public function encodeDir($source,$target){
        if(is_dir($source)){
            $this->targetDir($target);
            $dir = opendir($source);
            while(false!=$file=readdir($dir))
            {
                //列出所有檔案並去掉'.''..'
                if($file!='.' && $file!='..' && $file !='ThinkPHP')
                {
                    $path = $target.DIRECTORY_SEPARATOR.$file;
                    $sourcePath =  $source.DIRECTORY_SEPARATOR.$file;
                    $this->encodeDir($sourcePath,$path);
                }
            }

        }else if(is_file($source)){
            $extension=substr($source,strrpos($source,'.')+1);
            if(strtolower($extension)=='php'){
                $this->encode($source,$target);
            }else{
                copy($source, $target);
            }
        }
    }
}複製程式碼

值得一試的三個理由:

  1. 整合各種程式設計師開發中經常使用的開發測試工具。

  2. 簡潔美觀大氣的網站頁面

  3. 支援 線上格式化執行程式碼、APK線上反編譯、線上高強度密碼生成、線上網頁截圖 等二十多種工具服務

  4. 同時還推薦一下它的姐妹網 www.videofk.com 視訊下載工具箱



相關文章