微盾PHP脚本加密专家解密算法

今天工作中某合作商拿过来代码让检查安全,一看代码加密了,比较汗,类似下面代码:

  1. <?php // This file is protected by copyright law & provided under license. Copyright(C) 2005-2009 www.vidun.com, All rights reserved. 
  2. $OOO0O0O00=__FILE__;$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$OO00O0000=28;$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$O0O0000O0='OOO0000O0';eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjU5KTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDM4MCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?> 
  3. kr9NHenNHenNHe1zfukgFMaXdoyjcUImb19oUAxyb18mRtwmwJ4LT09NHr8XTzEXRJwmwJXPkr9NTzEXHenNHtILT08XT08XHr8XhtONTznNTzEXHr8Pkr8XHenNHr8XHtXLT08XHr8XHeEXhUXmOB50cbk5d3a3D2iUUylRTlfNaaOnCAkJW2YrcrcMO2fkDApQToxYdanXAbyTF1c2BuiDGjExHjH0YTC3KeLqRz0mRtfnWLYrOAcuUrlhU0xYTL9WAakTayaBa1icBMyJC2OlcMfPDBpqdo1Vd3nxFmY0fbc3Gul6HerZHzW1YjF4KUSvkZLphUL7cMYSd3YlhtONHeEXTznNHeEpK2a2CBXPkr9NHenNHenNHtL7eWplC2ivwunPFolVcM8PhTSYtI== 

很明显,是使用了某种PHP代码混淆工具混淆了下,Google一把,原来是使用的微盾PHP脚本加密专家加密的,网上搜了下,没找到免费的解密工具,于是乎,自己就研究了下,写了个解密算法,share下,给遇到同样问题的朋友一个方便。

       另外需要说明的是,我测试,本地解密出来的代码可以阅读的,由于代码混淆过,可能还原出来的有些地方和原代码有出入,有需要可自行修改之。

更新:

2009-09-16

添加了自动获取要截取的字符串长度,更通用了。

  1. <?php 
  2. /*********************************** 
  3. *威盾PHP加密专家解密算法 By:Neeao 
  4. *http://Neeao.com 
  5. *2009-09-10 
  6. ***********************************/ 
  7.  
  8. $filename="play-js.php";//要解密的文件 
  9. $lines = file($filename);//0,1,2行 
  10.  
  11. //第一次base64解密 
  12. $content=""
  13. if(preg_match("/O0O0000O0\('.*'\)/",$lines[1],$y)) 
  14.     $content=str_replace("O0O0000O0('","",$y[0]); 
  15.     $content=str_replace("')","",$content); 
  16.     $content=base64_decode($content); 
  17. //第一次base64解密后的内容中查找密钥 
  18. $decode_key=""
  19. if(preg_match("/\),'.*',/",$content,$k)) 
  20.     $decode_key=str_replace("),'","",$k[0]); 
  21.     $decode_key=str_replace("',","",$decode_key); 
  22. //查找要截取字符串长度 
  23. $str_length=""
  24. if(preg_match("/,\d*\),/",$content,$k)) 
  25.     $str_length=str_replace("),","",$k[0]); 
  26.     $str_length=str_replace(",","",$str_length); 
  27. //截取文件加密后的密文 
  28. $Secret=substr($lines[2],$str_length); 
  29. //echo $Secret; 
  30.  
  31. //直接还原密文输出 
  32. echo "<?php\n".base64_decode(strtr($Secret,$decode_key,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))."?>"
  33.  
  34. ?> 

 

微盾PHP脚本加密专家解密算法》上有43条评论

  1. hysia

    哈哈。
    Neeao 大哥还是先一步啊。
    但是我认为 $Secret=substr($lines[2],380);
    这里 380 可能是个变量啊。我碰到的有的有点不一样,虽然也是这个加密的~

    回复
  2. hysia

    对于解密出来的代码 格式混乱的问题。
    有个小技巧就是 查看网页源代码,然后复制
    你会发现解密出来的格式就正常多了。
    其实将解密出来的代码导出为一个txt 也行 ,格式就不混乱了

    回复
  3. Neeao

    [quote=hysia]哈哈。
    Neeao 大哥还是先一步啊。
    但是我认为 $Secret=substr($lines[2],380);
    这里 380 可能是个变量啊。我碰到的有的有点不一样,虽然也是这个加密的~[/quote]他那个380意思是在加密后的源码前面弄了380个没用的垃圾字符串,截取删除就行了,第一次解密后就能看到这个数字了。

    回复
  4. Neeao

    [quote=hysia]哈哈。
    Neeao 大哥还是先一步啊。
    但是我认为 $Secret=substr($lines[2],380);
    这里 380 可能是个变量啊。我碰到的有的有点不一样,虽然也是这个加密的~[/quote]
    在加密后的源码中第一行中有一个参数是:$OO00O0000=28;这个28就是base64通过密钥加密后的长度,你读取第三行的最后28个字符,就是加密后的密文了,再使用第一次解密后的那个srttr中密钥,就可以解密了。可以不用管那个380。

    回复
  5. 小唐

    我怎么开不了未来教育考试网?
    前面注册的时候不知道弄错什么,就开不了!
    上面说联系你,到底是怎么回事情啊???

    回复
  6. 小唐

    我怎么开不了未来教育考试网?
    前面注册的时候不知道弄错什么,就开不了!
    说我的IP被什么锁定了。。。。。。
    上面说联系你,到底是怎么回事情啊???

    回复
  7. 阿明仔

    运行之后是如 帤[?榌 裳U绍??譐NCB歒?[濲 萄?皭Q瞮77U鱒朆s蕭?愋?嗭V諻4vR倃F眦祁v栚r聉F疠±鯀岇?憒? 般的乱码-_-

    回复
  8. Neeao

    [quote=阿明仔]运行之后是……的乱码-_-[/quote]你把你的文件发给我看下,^_^。neeaocn[艾特]gmail.com,请将[艾特]替换为@。

    回复
  9. 邓皖皖

    为什么我的IP被锁了?我现在急着要进未来教育网啊!

    回复
  10. 邓皖皖

    现在把我们转到这边来,又不告诉哪里出了问题,也不说解决方案,什么意思啊?

    回复
  11. Neeao

    [quote=邓皖皖]为什么我的IP被锁了?我现在急着要进未来教育网啊![/quote]你找未来教育网的管理员吧,网站使用的是我之前维护的sql通用防护注入系统,我这里没法帮你忙,不好意思。

    回复
  12. streetmao

    太好了neeao大哥.这个问题困扰了我很久.
    可我照你的办法做了 提示English”,”>Log in”,”class=”,”nD_inputShort”,”id=”,”textfield”,”onmouseover=”,”this.select()”,”readonly=”,”>”,”Feedback”,”

    实在是搞不了了
    可以帮我解下吗?
    文件位置是:
    http://www.rolemu.com/mi/1.txt
    http://www.rolemu.com/mi/index.txt
    这两个文件.希望你可以帮到我,我已经搞了很长时间了 不是没努力去做了
    可以的话 搞好了发到我的mail
    95565719@qq.com

    回复
  13. streetmao

    已经发了封到你的邮箱里了 苦死我了`花钱买的代码`说一直帮我更新的` 现在鸟都不鸟我了`那人` 是个无耻的人

    回复
  14. agao

    if (!function_exists(“T7FC56270E7A70FA81A5935B72EACBE29”)) { function T7FC56270E7A70FA81A5935B72EACBE29($TF186217753C37B9B9F958D906208506E) { $TF186217753C37B9B9F958D906208506E = base64_decode($TF186217753C37B9B9F958D906208506E); $T7FC56270E7A70FA81A5935B72EACBE29 = 0; $T9D5ED678FE57BCCA610140957AFAB571 = 0; $T0D61F8370CAD1D412F80B84D143E1257 = 0; $TF623E75AF30E62BBD73D6DF5B50BB7B5 = (ord($TF186217753C37B9B9F958D906208506E[1]) < < 8) + ord($TF186217753C37B9B9F958D906208506E[2]); $T3A3EA00CFC35332CEDF6E5E9A32E94DA = 3; $T800618943025315F869E4E1F09471012 = 0; $TDFCF28D0734569A6A693BC8194DE62BF = 16; $TC1D9F50F86825A1A2302EC2449C17196 = ""; $TDD7536794B63BF90ECCFD37F9B147D7F = strlen($TF186217753C37B9B9F958D906208506E); $TFF44570ACA8241914870AFBC310CDB85 = __FILE__; $TFF44570ACA8241914870AFBC310CDB85 = file_get_contents($TFF44570ACA8241914870AFBC310CDB85); $TA5F3C6A11B03839D46AF9FB43C97C188 = 0; preg_match(base64_decode("LyhwcmludHxzcHJpbnR8ZWNobykv"), $TFF44570ACA8241914870AFBC310CDB85, $TA5F3C6A11B03839D46AF9FB43C97C188); for (;$T3A3EA00CFC35332CEDF6E5E9A32E94DA<$TDD7536794B63BF90ECCFD37F9B147D7F;) { if (count($TA5F3C6A11B03839D46AF9FB43C97C188)) exit; if ($TDFCF28D0734569A6A693BC8194DE62BF == 0) { $TF623E75AF30E62BBD73D6DF5B50BB7B5 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 8); $TF623E75AF30E62BBD73D6DF5B50BB7B5 += ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]); $TDFCF28D0734569A6A693BC8194DE62BF = 16; } if ($TF623E75AF30E62BBD73D6DF5B50BB7B5 & 0x8000) { $T7FC56270E7A70FA81A5935B72EACBE29 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 4); $T7FC56270E7A70FA81A5935B72EACBE29 += (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA]) >> 4); if ($T7FC56270E7A70FA81A5935B72EACBE29) { $T9D5ED678FE57BCCA610140957AFAB571 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) & 0x0F) + 3; for ($T0D61F8370CAD1D412F80B84D143E1257 = 0; $T0D61F8370CAD1D412F80B84D143E1257 < $T9D5ED678FE57BCCA610140957AFAB571; $T0D61F8370CAD1D412F80B84D143E1257++) $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012+$T0D61F8370CAD1D412F80B84D143E1257] = $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012-$T7FC56270E7A70FA81A5935B72EACBE29+$T0D61F8370CAD1D412F80B84D143E1257]; $T800618943025315F869E4E1F09471012 += $T9D5ED678FE57BCCA610140957AFAB571; } else { $T9D5ED678FE57BCCA610140957AFAB571 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 8); $T9D5ED678FE57BCCA610140957AFAB571 += ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) + 16; for ($T0D61F8370CAD1D412F80B84D143E1257 = 0; $T0D61F8370CAD1D412F80B84D143E1257 < $T9D5ED678FE57BCCA610140957AFAB571; $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012+$T0D61F8370CAD1D412F80B84D143E1257++] = $TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA]); $T3A3EA00CFC35332CEDF6E5E9A32E94DA++; $T800618943025315F869E4E1F09471012 += $T9D5ED678FE57BCCA610140957AFAB571; } } else $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012++] = $TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]; $TF623E75AF30E62BBD73D6DF5B50BB7B5 <<= 1; $TDFCF28D0734569A6A693BC8194DE62BF--; if ($T3A3EA00CFC35332CEDF6E5E9A32E94DA == $TDD7536794B63BF90ECCFD37F9B147D7F) { $TFF44570ACA8241914870AFBC310CDB85 = implode("", $TC1D9F50F86825A1A2302EC2449C17196); $TFF44570ACA8241914870AFBC310CDB85 = "?".">“.$TFF44570ACA8241914870AFBC310CDB85.”<"."?"; return $TFF44570ACA8241914870AFBC310CDB85; } } } } 谁知道这是怎么加密的

    回复
  15. Neeao

    [quote=agao]if (!function_exists(“T7FC56270E7A70FA81A5935B72EACBE29”)) { function ……
    谁知道这是怎么加密的[/quote]
    你这个代码没有加密,也就是变量混淆成了不容易读懂的而已,把变量搜索,替换成短点的看看就知道了。

    回复
  16. agao

    变量搜索,替换成短点!这个请Neeao详细指点下!
    如果可以,请发邮件告知结果!谢谢啦!

    [quote=Neeao]引用 agao 说过的话:
    if (!function_exists(“T7FC56270E7A70FA81A5935B72EACBE29”)) { function ……
    谁知道这是怎么加密的
    你这个代码没有加密,也就是变量混淆成了不容易读懂的而已,把变量搜索,替换成短点的看看就知道了。[/quote]

    回复
  17. azzxs

    版主:威盾解密这段代码怎么用?是不是另存为php,放在php环境,把要解码的文件放在同样的目录,改名为play-js.php,然后运行解码文件?
    为什么我总是得不出来?输出的结果在那里?
    出现下面错误
    “; ?>

    回复
  18. Neeao

    [quote=azzxs]版主:威盾解密这段代码怎么用?是不是另存为php,放在php环境,把要解码的文件放在同样的目录,改名为play-js.php,然后运行解码文件?
    为什么我总是得不出来?输出的结果在那里?
    出现下面错误
    “; ?>[/quote]
    是的,放到php环境下就可以了,文件名随便弄就行了,然后修改下这个代码中的文件名就可以用了。

    回复
  19. azzxs

    为什么我运行了,得不出结果呀?结果在那里输出?
    运行那段代码页面出现
    “; ?>
    我是菜鸟版主能不能帮我改成输出到一个新的文件里。可能的话发到我的邮箱。

    回复
  20. 谢谢你

    牛哥谢谢
    !买个程序被人骗了 程序加密的 找他 他不理人 现在好了,终于全部被你征服了,真心感谢

    回复
  21. XIEXIE

    老大,你实在太牛了,不过我用你的代码放到我网站上出错,Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 0 in D:wwwrootzhangjianwwwrootechocode.php on line 22 不知道什么原因,不管了,我已经收藏 BLOG了,下次想解密到老大这个上面来解下就好罗

    回复
  22. 宇飞

    你好, 版主, 我有个PHP文件被加密了, 有时间能帮我解密开吗? QQ: 6000083

    回复
  23. 到分撒旦法

    [quote=宇飞]你好, 版主, 我有个PHP文件被加密了, 有时间能帮我解密开吗? QQ: 6000083[/quote][quote=millken]另一种解密方法[/quote][quote=millken]另一种解密方法[/quote]

    回复
  24. 管巨侠

    博主你好啊。我原来一直是手工解密威盾的,感觉也挺方便,只是一直想开发个本地运行的软件来解密,那样可以方便更多人。
    前几天开始动手写程序,参考了你写的PHP解密脚本,结果遇到点问题,就是用Delphi无法实现strtr函数的功能,试过很多办法,但都不奏效。呵呵。如果方便的话,希望能用Delphi实现一下。感谢!

    回复
  25. 管巨侠

    【 黑刀微盾解密专家1.0 】

    使用说明:

    操作方法:

    1、运行软件,点击“打开目录”按钮,指定需要解密的PHP文件目录。

    2、点击“列出文件”按钮列出所有该目录下的PHP文件。

    3、点击“批量解密”按钮,程序自动解密所有微盾加密的文件。

    Enjoy ~~~~~~~~~~

    后记:本程序参考了Neeao同学的PHP版解密脚本,根据他的解密思路成功用Delphi开发完成了本地运行的批量解密版。因为我一直是习惯用IDE手工解密,感觉也都很方便,压根没想过要做解密程序,不过貌似有解密需求的人蛮多,而且用PHP的解密脚本一个个解密也很不方便,在经过很多努力和数十个小时后,终于把本地批量解密程序写出来了。在此特别感谢强大的牛人“乡巴佬”同学,是他用JavaScript脚本写出了替代PHP的strtr()函数的脚本给我参考,再由我改写成了Delphi版的函数。欢呼ing~~~又学习到不少的知识。感谢朋友们一直的支持。嘿嘿。

    管巨侠
    QQ:44167884
    2010年4月27日
    下载地址:
    http://tmd.me/2008/read.php/48.htm

    回复
  26. Neeao

    [quote=管巨侠]【 黑刀微盾解密专家1.0 】
    使用说明:
    操作方法:……[/quote]
    不错,^_^。

    回复
  27. 00000000

    求解密 使用neeao.com/tools/decode/ 在线解密,没解出来,麻烦加下我q52965238 帮忙下 谢谢了

    回复
  28. bjlzc

    $ll11l1111lllll1l=__FILE__;$ll11lll1lll1l1lll1l=base64_decode(“Zmc2c2JlaHByYTRjb190bmQ=s”);$ll1ll11111l111lll1=$ll11lll1lll1l1lll1l{4}.$ll11lll1lll1l1lll1l{9}.$ll11lll1lll1l1lll1l{3}.$ll11lll1lll1l1lll1l{5};

    这种形式的怎么破解

    回复
  29. denghbwk

    特地上来感谢的!下了个开源的软件,遇到几个加密的文件。汗!用了这个在线的解密,搞定!太强大了

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注