1. 程式人生 > >php簡單混淆類加密文件如何解密?

php簡單混淆類加密文件如何解密?

怎麽 發現 出發 而不是 code whl pan 一個 die()

最近在整理單位購買的源碼時,發現源碼裏好多文件都混淆加密了。雖然不解密也不影響使用,但是心裏總覺得有些別扭,便試著將加密的文件解密。

首先,百度了一下,看網上是否有現成的混淆類解密工具,搜到了一個http://www.zhaoyuanma.com/。嘗試了一下,這個還真是好用,免費的,解密速度挺快。但是當解到一個比較大的文件時,發現文件上傳不上去了,網站提示:文件無法上傳。開始以為是不是解密次數多了,網站限制了。隔了一天試了一下,還是不行,後來打開了文件一下打算仔細的看看,覺得文件打開的比較遲鈍,硬盤也吱吱的響,這才註意到這個文件的體積還挺大的,都4M多,我說怎麽上傳不上去。

無法通過工具解密了,就只有自己想辦法,試著自己解密試試,結果踩到了一個坑。

先發一個混淆類加密的樣式:

$O00OO0=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");
$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};
$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};
$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0
{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; eval($O00O0O("JE8wTzAwMD0iZENvVnp1dGtJSnllUVd4VXJxQVNOb*************));

首先 在第一行後插入 echo $O00OO0; die(); 便可輸出 urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6****"); 到底是什麽字符串了,通過輸出發現這一串字符是:

n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j

接著再繼續輸出 $O00O0O、$OO0O00、 $OO0000 三個變量所表示的字符串了,還是在每一行後面添加 echo $O00OO0; die(); 繼續用輸出。便可以知道這三個變量表示的是什麽含義了。這兒要小心,一不小心,就容易掉到坑裏了。

那就是 將第一行要將 $O00OO0=urldecode("%6E1%7A%62%2F%6D%"),這一句變成 $O00OO0=‘ n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j’; 而不是

$O00OO0=" n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j"; ,要不然就整體都錯了一位,調試出的變量所代表的函數就都似乎成了未知函數。

錯位後的變量所代表的字符變成了

$O00O0O=‘bawh‘;
$O0OO00=‘w0k0k‘;
$OO0O00=‘wqbw0k‘;
$OO0000=‘58‘;
$O00O0O.=‘bawhl+eghs4gh‘

通過正確的輸出,便發現加密的函數為:

$O00O0O=‘base‘;
$O0OO00=‘strstr‘;
$OO0O00=‘substr‘;
$OO0000=‘52‘;
$O00O0O.=‘base64_decode‘

php簡單混淆類加密文件如何解密?