微信dat文件批量解密

废话不多说,上代码

前端页面,为了省事,js都是引用的cdn

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="keywords" content="bat, 解密, bat解密, wechat, 微信,dat,dat解密"/>
    <span style="font-family: Arial, Helvetica, sans-serif;"> </span>
    <meta name="description" content="bat,解密,wechat,微信,dat"/>
    <title>微信dat解密</title>
    <script src="https://s3.pstatp.com/cdn/expire-1-M/jquery/3.3.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui/css/layui.css" />
    <script src="https://www.layuicdn.com/layui/layui.js"></script>
    <style>
        #img {
            margin-top: 20px;
        }

        #img img {
            width: 200px;
            margin-right: 20px;
            margin-top: 10px;
            padding: 5px;
            border: 5px double #ffc7c7;
        }
    </style>
</head>

<body>
    <div class="layui-bg-gray" style="padding: 30px;">
        <div class="layui-row layui-col-space15">
            <div class="layui-col-md6">
                <div class="layui-card">
                    <div class="layui-card-header">提示</div>
                    <div class="layui-card-body">
                        1、单个dat文件不能大于1M<br>
                        2、单次最多上传20个文件解析<br>
                        3、解析之后点击图片下载<br>
                        4、单次上传的dat文件需是同一微信的dat文件
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">文件上传</label>
        <button type="button" class="layui-btn layui-btn-normal" id="uploadDat">
            <i class="layui-icon">&#xe67c;</i>
            选择dat文件
        </button>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn" id="submitimg">开始上传</button>
            <button  class="layui-btn layui-btn-primary reset">重置</button>
        </div>
    </div>
    <hr class="layui-border-blue">
    <div id="img"></div>
    <script>
        layui.use('upload', function(){
          var upload = layui.upload;
          //执行实例
          var uploadListIns = upload.render({
            elem: '#uploadDat'
            ,accept: 'file'
            ,size: '1024'
            ,multiple: true
            ,number: 20
            ,exts: 'dat'
            ,field: 'files'
            ,auto: false
            ,bindAction: '#submitimg'
            ,url: '自己的上传接口.php'
            ,before: function(res){
                $('#img').html('');
            }
            ,done: function(res){
              //上传完毕回调
              _html = '<a href="'+res.data.scr+'" download="'+res.data.alt+'.jpg"><img src="' + res.data.scr + '" alt=""></a>';
              $("#img").append(_html);
            }
            ,error: function(){
              //请求异常回调
            }
          });
        });
    </script>
</body>

</html>

php代码:

<?php
header("Access-Control-Allow-Origin: *");
$files = $_FILES['files'];
if($files){
    $verify = uploadVerify($files);
    if($verify['code'] > 0){
        echo json_encode($verify,320);
        exit;
    }
    $filename = './images/';
    $filehost = $_SERVER['HTTP_ORIGIN'] . dirname($_SERVER['PHP_SELF']) . '/';
    $res = datdecode($files['tmp_name']);
    $imgList = ['scr'=>$filehost . $res,'alt'=>$res];
    echo json_encode(['code'=>0,'data'=>$imgList,'msg'=>'解密成功'],320);
}else{
    echo '{"code":1,"msg":"请上传文件"}';
}

function uploadVerify($files)
{
    if(!$files) return ['code'=>1,'msg'=>'请上传文件'];
    if(is_array($files['name']))  return ['code'=>1,'msg'=>'上传错误'];// 限制只能单文件上传
    if($files['error'] > 0) return ['code'=>1,'msg'=>$files['error']];
    if($files['size'] > 1024*1024) return ['code'=>1,'msg'=>'文件大小超出限制'];
    if(strtolower(substr(strrchr($files['name'], '.'), 1)) != 'dat') return ['code'=>1,'msg'=>'请上传dat文件'];
    if($files['type'] != 'application/octet-stream') return ['code'=>1,'msg'=>'请上传dat文件'];
    return ['code'=>0,'msg'=>'验证完毕'];

}   
function xor_enc($filename)
{
    static $key='';
    $content = '';          // 处理后的字符串
    $fp = fopen($filename, 'rb');
    while(!feof($fp)){
        $tmp = fread($fp, 1);
        if(!$key) $key = hexdec('0x'.bin2hex($tmp)) ^ 0xff;
        $a = dechex(hexdec('0x'.bin2hex($tmp))  ^ 0x5e);
        // ╭(╯ε╰)╮不知道为啥, 1 使用pack函数之后是10
        if(strlen($a) == 1) $a = '0'.$a;
        $content .= pack('H*', $a); ;
    }
    fclose($fp);
    return $content;
}

function datdecode($filenameold)
{
    $key = 0x5e;
    $date = date('YmdHis');
    $datedir = substr($date,0,6);
    $filename = './images/';
    $filename .= $datedir;
    if(!is_dir($filename))
    {
        mkdir($filename, 0775, true);
    }
    $filename = $filename . '/'.uniqid().$date.rand(100000,999999).'.jpg';
    touch($filename);
    $a=file_put_contents($filename, xor_enc($filenameold) , true);
    return $filename;
}
?>

只是初版,没有来得及优化,有不足之处欢迎指正

演示地址:https://tool.kongning.top/datdecode/
php版本下载:https://download.csdn.net/download/qq_34792050/81459999

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凝雪醉红颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值