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'