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

php簡單混淆類加密檔案如何解密?

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

      首先,百度了一下,看網上是否有現成的混淆類解密工具,搜到了一個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'