教你如何解密 “ PHP 神盾解密工具 ”

其实对神盾解密并没有那么感兴趣,只是看到了作者把工具又加密了,感觉不爽。研究了一下,其实解密没那么复杂。

利用php_apd扩展很轻松地就这把这搞定了。只有四句代码。

<?php
rename_function('gzuncompress','new_gzuncompress');
override_function('gzuncompress', '$arg', 'print(new_gzuncompress($arg)); return new_gzuncompress($arg);');

require_once 'decryption.php';
decryption('decryption.php');

该工具的核心代码:decryption.php

<?php
function decryption($fileName) {
  /**
   * 解码函数
   * @param string $str 待解码字符串
   * @param string $flg 是否解析后解码
   * @return string   已解码字符串
   */
  function decode($str, $flg = '') {
    if($flg === '') {
      $ret = $str;
    } else {
      $ret = 'ۯ'; $i = 0; $l = strlen($str);
      while($i++ < $l) {
        $c = ord($str[$i-1]);
        $ret .= $c<245 ? ( $c>136 ? chr($c/2) : $str[$i-1] ) : "";
      }
    }
    return base64_decode($ret);
  }

  $err = '解码遇到错误,请联系教主处理该文件!';
  $str = file_get_contents($fileName);
  $path = pathinfo($fileName);
  $dirname = $path['dirname']; // 文件所在目录
  $baseName = $path['filename']; // 文件名

  if (preg_match('|IN_DECODE_(\w{32})|s', $str, $arr)) {
    // 防止解密自己,其实方法都已经告诉你了,自己动手解码才快乐
    $arr[1] === '761b5f52db6dff7ce91344e99dcedab7' && die("err: [-1] - 请勿试图用本工具解密本工具!");
  } else {
    die("err: [-1] - 没有发现神盾特征,你确定这是神盾加密?");
  }

  // 匹配代码主题部分
  // '';@\$[\x00-\xff]+\(\\'([\x00-\xff]+?)\\'\.\(
  preg_match('|\'\';@\$[\x00-\xff]+\(\\\\\'([\x00-\xff]+?)\\\\\'\.\(|s', $str, $arr) || die("err: [0] - ".$err);
  $code = $arr[1];

  // 匹配中间加密部分
  preg_match('|\(\'([\x00-\xff]+)\',\'|s', $code, $arr) || die("err: [1] - ".$err);
  $key = base64_decode(decode($arr[1], "decode"));

  $code = preg_replace('|\'\.[\x00-\xff]+\'\)\)\.\'|s', $key, $code);

  // 匹配尾部被加密代码
  preg_match('|=\'(x[\x00-\xff]+)\'\)\);|s', $str, $arr) || die("err: [2] - ".$err);
  $core = $arr[1];

  // 匹配验证key
  preg_match('|[\w+/=]{59}=|s', $arr[1], $arr) || die("err: [3] - ".$err);
  $key = $arr[0];

  $core = str_replace($key, '', $core); // 去除key
  $suffix = gzuncompress($core); // 得到 base64 的末尾部分

  // 解码
  $code = gzuncompress(base64_decode($code . $suffix));

  // 匹配干净的代码
  if (preg_match('|<!--<\?php endif;\?>(<\?php[\r\n]{1,2}[\x00-\xff]+\?>)<\?php \$GLOBALS\[|s', $code, $arr)) {
    $code = $arr[1];
  }

  // 写到文件
  $source = $dirname . DIRECTORY_SEPARATOR . $baseName . "_source.php";
  file_put_contents($source, $code);
  die("解密成功,已经保存为: " . $source);
}
(0)

相关推荐

  • 神盾加密解密教程(二)PHP 神盾解密

    其实网上早就有人分析过这个了,而且写成了工具.但是我测试了很多个,没一个能用,所以决定自己从头分析一遍. 打开神盾加密过后的源码,可以看到这样的代码 上面写着广告注释,而且不能删除,因为文件末尾有个md5效验码,以验证代码是否被修改过,如图. 再仔细看代码部分,发现里面都是乱码,其实这都是障眼法,它利用了php变量扩充到 latin1 字符范围,其变量匹配正则是 \$[a-zA-Z_\x7f-\xff][\w\x7f-\xff]* 这样的格式.这个前几天天已经分析过了,最终也在官网找到了答案,请

  • 神盾加密解密教程(一)PHP变量可用字符

    先来说说php变量的命名规则,百度下一抓一大把:(1) PHP的变量名区分大小写;(2) 变量名必须以美元符号$开始;(3) 变量名开头可以以下划线开始;(4) 变量名不能以数字字符开头. 其实所有编程都类似的命名规范就是:1. 变量第一个字符最好是 字母或_,不能以数字开头2. 第二个字符开始允许 数字,字母,_ 好了,差不多就是这样了,但是这不是我们要说的重点.今天我们说说 PHP 变量的可用字符,不仅仅是 数字,字母,_ 哦. 前几天QQ上一朋友发我一个shell,是加密过的,通篇乱码,不

  • 神盾加密解密教程(三)PHP 神盾解密工具

    先下载 php神盾解密工具decryption然后解压放到一个文件夹里,把你要解密的文件也放进去.然后新建一个 decode.php 代码写: 复制代码 代码如下: <?phprequire('decryption.php');decryption('Code.php');?> 执行后就会生成 Code_source.php 的源码文件了. 效果 就目前来说没发现任何问题,如果有什么问题可以留言,我会及时处理的. 要注意的几点,decryption.php 文件不要做任何修改,否则执行不了.d

  • 教你如何解密 “ PHP 神盾解密工具 ”

    其实对神盾解密并没有那么感兴趣,只是看到了作者把工具又加密了,感觉不爽.研究了一下,其实解密没那么复杂. 利用php_apd扩展很轻松地就这把这搞定了.只有四句代码. <?php rename_function('gzuncompress','new_gzuncompress'); override_function('gzuncompress', '$arg', 'print(new_gzuncompress($arg)); return new_gzuncompress($arg);');

  • Java实现的3des加密解密工具类示例

    本文实例讲述了Java实现的3des加密解密工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.poifs.property.Child; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax

  • C#加密解密文件小工具实现代码

    DebugLZQ在网上搜索相关文件加密的程序,发现给出的基本都是针对"字符创"."文本"的加密与解密.对视频文件.图片等一般文件的加密解密程序少之又少,故写下此文,实现一个对一般文件进行加密的小工具. 程序的主要功能是:用户通过文件选择框选择要加密的文件->输入密码进行加密:选择加密后的文件,输入密码进行解密. 程序的主界面如下: 三个按钮的Click事件处理程序如下: 复制代码 代码如下: private void btnSelectFile_Click(o

  • 2个比较经典的PHP加密解密函数分享

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些API数据交换的场景. 笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家.加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果. 1.非常给力的authcode加密函数,Discuz!经典代码(带详解): 复制代码 代码如下: function authcode

  • javascript实现的文字加密解密

    文字加密解密 set8="";set4=2;function set5(m,n,c,d,e3){set4=1;Lxyer1.style.top=document.body.scrollTop+event.clientY+20;Lxyer1.style.left=event.clientX-150;var t,a,b,f=' ※ '+f+'width=53 onclick=\''+m+'.value=""\'>清除 C '+f+'width=53>关闭 ×

  • PHP实现的加密解密处理类

    本文实例讲述了PHP实现的加密解密处理类.分享给大家供大家参考,具体如下: <?php /*=========================================================== = 版权协议: = GPL (The GNU GENERAL PUBLIC LICENSE Version 2, June 1991) =------------------------------------------------------------ = 文件名称:cls.sys

  • VBS加密与VBE解密实现方法

    用Script Encoder加密VBS脚本 Script Encoder 是一个简单的命令行工具,脚本设计者可使用此工具对他们的最终脚本进行编码,从而使 Web 主机和 Web 客户端无法查看或更改其源代码.注意,这种编码只能防止对您代码的一般性浏览,而无法防止专业黑客查看您的代码和实现方式. 这其实并不是加密(encrypt)而仅仅是编码(encode),只不过乍一看是乱码,好像被加密过一样.使用方法很简单,安装目录有帮助手册,上面写得很清楚,在这里举一个最简单的用法,使用下面的命令加密ex

  • 微信小程序后台解密用户数据实例详解

     微信小程序后台解密用户数据实例详解 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html openId : 用户在当前小程序的唯一标识 因为最近根据API调用https://api.weixin.qq.com/sns/jscode2session所以需要配置以下服务,但是官方是不赞成这种做法的, 而且最近把在服务器配置的方法给关闭了.也就是说要获取用户openid,地区等信息只能在后台获取. 一下是官方的

随机推荐