首頁 >後端開發 >php教程 >遇到個加密的PHP文件,把decode過程寫下來

遇到個加密的PHP文件,把decode過程寫下來

WBOY
WBOY原創
2016-08-08 09:25:34879瀏覽


早上有朋友請我幫忙看一個PHP文件,裡面都是亂碼,改動任何一個字元就會中止運作。

檔案只有一行,以下是部分內容:

中間省略一堆字元編碼,最後的內容是

2Kx9yHSQyO/D+5+fnPf+v/BSrlfeg=')));return;?>5e813...32位MD5....3f6

一開始使用ZendStudio+Xdebug追蹤了一遍,發現對於這種壓縮在一行的程式碼,調試根本無力啊!斷點都無從下起。

搞了半天還是沒效果,乾脆手工解決吧。

簡單的看了一下,只是把變數名稱用一些比較特殊的字元替代,用編輯器打開,把幾個重複出現的關鍵字替換一下,就能看出大概了。

其中還用到了一個自訂函數,這段函數已經在檔案開頭提供了,就是「蜖棁ㄔ┄蕷」。

function 蜖棁ㄔ┄蕷($A,$B="")
{
	$A=base64_decode($A);
	if(empty($A)) return "";
	if($B==""){return ~$A;}
	else
	{
		$D=strlen($A);$B=str_pad($B,$D,$B);$str=$A^$B;return $str;
	}
}

經過幾次簡單的替換可以知道每個字段內保存的是什麼內容了


首先從eval函數入手,後面跟著的應該是2個解密函數,函數名保存在數組裡。類似

<?php
$arr[&#39;B&#39;]=&#39;base64_decode&#39;;
$arr[&#39;G&#39;]=&#39;gzuncompress&#39;;
//调用的时候可以这样用
eval($arr[&#39;G&#39;]($arr[&#39;B&#39;](&#39;一大堆乱码&#39;)))

解出來就能看到修改後就不能運行的關鍵程式碼:

	$A=file_get_contents(&#39;origin.php&#39;);
	@substr($A,-32)==md5(substr(substr($A,0,-32).&#39;另外一个<span style="font-family: Arial, Helvetica, sans-serif;">32位MD5</span>',6))||die();

註解掉後繼續執行後面的程式碼:


又是一個eval,在解密…

出來的文件有亂碼,不能直接用Copy&Paste,必須以二進位寫入一個文件,再經過一些替換、解密,再寫入一個文件……總共經過5輪解密,最後得到來源文件。

最後整理了一下寫了個正規搞定這個文件,直接解除這個文件。

<?php
	$B='base64_decode';
	$G='gzuncompress';
	function A($A,$B="")
	{
		$A=base64_decode($A);
		if(empty($A)) return "";
		if($B==""){return ~$A;}
		else
		{
			$D=strlen($A);$B=str_pad($B,$D,$B);$str=$A^$B;return $str;
		}
	}
	$s=file_get_contents('origin.php');
	//第1次匹配
	preg_match('/\]\(\'(.+?)\'\)/',$s,$r1);
	$s=$G($B($r1[1]));
	
	//第2次匹配
	preg_match('/\]\(\'(.+?)\'\)/',$s,$r2);
	$s=A($B($r2[1]));
	
	//第3次匹配
	preg_match('/\]\(\'(.+?)\'\)/',$s,$r3);
	$s=($B($r3[1]));
	
	//第4次匹配
	preg_match('/\]\(\'(e.+?)\'\)/',$s,$r4);
	$s=$G($B($r4[1]));
	
	//第5次匹配
	preg_match('/\]\(\'(e.+?)\'\)/',$s,$r5);
	$s=(A($B($r5[1])));
	file_put_contents('code.php',$s);

	echo 'Done!';

相關程式碼:http://download.csdn.net/detail/sbdx/8616319

以上就介紹了遇到個加密的PHP文件,把decode過程寫下來,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

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