最近在整理單位購買的源碼時,發現源碼里好多文件都混淆加密了。雖然不解密也不影響使用,但是心里總覺得有些別扭,便試着將加密的文件解密。
首先,百度了一下,看網上是否有現成的混淆類解密工具,搜到了一個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"; ,要不然就整體都錯了一位,調試出的變量所代表的函數就都似乎成了未知函數。(后來想想,$O00OO0=urldecode("%6E1%7A%62%2F%6D%")這行代碼可以保持原樣不動,就不會踩坑了)
錯位后的變量所代表的字符變成了
$O00O0O='bawh'; $O0OO00='w0k0k'; $OO0O00='wqbw0k'; $OO0000='58'; $O00O0O.='bawhl+eghs4gh'
通過正確的輸出,便發現加密的函數為:
$O00O0O='base'; $O0OO00='strstr'; $OO0O00='substr'; $OO0000='52'; $O00O0O.='base64_decode'
接下來首先對 eval($O00O0O("JE8wTzAwMD0iZENvVnp1dGtJSnllUVd4VXJxQVNOb*************")); 解密,將 換成 echo ( base64_decode("JE8wTzAwMD0iZENvVnp1dGtJSnllUVd4VXJxQVNOb*************"));便會得到
$O0O000="dCoVzutkIJyeQWxUrqASNlMvwpFPhLRsXTcnbBZaKgHfEODGijYmWHhSVxLTIveKzZCPFpEgQOoUmqunkltfyDNJBjwbXRadAirGscMYnr9mbaEXlehpHsEpIuQLMyv0KgjmBaSJbZ4XIHhXIHhRzajkM2Lkw2PRP21kNJt5HsEpIAjVWZvmMZQFMZWOIujfWZWqBJQGWZ5cWGOUBRhRXs8XHs8pXRhRXsjDBZueWaTRK2k0BZCdWGusBGS9IGw1BYQ0bZ9xIajfWZWqBRhRXRhRXsjPKyjOisERIHERwJSxM3tqB248MJI+HsEpIA5kBZP6IHERIHjhWG1fy3tkMYCOnGvenRhRXsjAMytOisERIHERtYSsIrA3lHEeorEVnGvenRhRXsjzWyvmB3QOisERBZuFwgjkBsjhWG1fIatkMYCOIGweB20RMZ4RMyveMyTRB2MRwGu0MDCsNc4XIHhRPGueMZ1ViRhRXsE8NavOnRhRXsELIGCUB3ERIHERIHERlgjkNJvkKgj0BejfB29mIathNY91w2RXIHhRlgjcB2CVIHERIHERIH0RBJSLMYSeIG9YIGQUBaSLBJofIGQUBZ1kIaQONGueMytOwHjfbyQ0IG9YIGQUBaSLBsjxMZ1ONmhRXsERIHERIHERIHERIHERIHjUNsjkNJvkKgjUwsjcB2C1BZ4RBYuLwyoXIHhRlgjeB3WVIHERIHERIH0RBJSLMYSeIG9YIavUW3oXIHhRlgj0MZvfwS9kWateIH0RWGusBGPRMyt0NYOsWytONmhRXsELIathy2u0WaIRIHERlgj0MZvfwgjhwZuTbZ5JIGu0WavqMJS0wyoRXGueNYu5NejkNYPRM3OcBGSTXzhRXsELIatey2u0WaIRIHERlgj0MZvfwgjeB3NRMyt0NYOsWytONeEhMyveMyOVIGuewgjcKZQfwZzqHsEpIH0RWGtdMyt0NsERIHELIatkMYCOIGQOBGmRMyt0N*******RisEJvVfXdzhXnV4=";eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000))));
繼續將變量替換成 base64_decode(strtr(substr($O0O000,52*2),substr($O0O000,52,52),substr($O0O000,0,52)));便可以得到源碼了。
轉載:https://www.cnblogs.com/imustun/p/10158718.html
--------------------------------------------------------------------------------------------------------
這個網站真是厲害 https://www.zhaoyuanma.com/phpjm.html
---------------------------------------------------------------------------
這個博客也有破解方法 : http://www.php20.cn/article/235