吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8927|回复: 31
收起左侧

[分享] py解密加密的bat脚本

  [复制链接]
杨辣子 发表于 2021-7-2 15:29
最近在搞手机刷机包, 用到一款工具写的不错,想看看脚本,notepad++打开后竟然是这个样子的
1.png
这东西阻碍了我学习的脚步,丢进 010 Editor 看看
2.png

看到了加密工具 BatchEncryption Build 201610
再次百度发现了这个 还原BatchEncryption(201610版本)混淆的批处理文件
尊重下作者转载注明下出处
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Hunter98234/article/details/108672926
————————————————
文章中的py代码能解密脚本里的英文, 但是带中文就解不出来了,所以为了日后学习方便,自己简单的改造了一番, 再次向原作者致敬!!!

#!/usr/bin/python
# -*- coding:utf-8 -*-
#
# Batch Decryption 202009 (BatchEncryption Build 201610)
#

import os
import sys

encrypt_file = ''
encodeErrByteArray = [b'\xfe', b'\xff']

def decryption(data):
    # 去除头部后的源代码下标开始位置
    i = data.index(b'163.com\r\n') + 9
    vars = {}
    length = len(data)
    source = ''
    while i < length:
        Data = run(vars, data, i)
        i = Data.get('index')
        source += Data.get('buf')
    return source

def run(vars, data, i):
    buf = ''
    f = 0
    t = 0
    x = False
    l = len(data)
    while(True):
        if data[i] == 0x0d and data[i+1] == 0x0a:
            i += 2
            break
        # get %var:~x,y% %0
        if data[i] == 0x25:
            if not x:
                x = True
                f = i
            else:
                x = False
                t = i
                rst = var_percent(data[f:t+1], vars)
                buf += rst
            i += 1
        else:
            if not x:
                try:
                    buf += str(data[i:i+1], encoding="utf-8")
                    i += 1
                except Exception as err:
                    # 过滤掉无法解析的字节
                    if data[i:i+1] in encodeErrByteArray:
                        buf = ''
                        i += 1
                    else:
                        # 以ansi码解析中文
                        chinese = b''
                        temp = i
                        while (str(data[temp:temp+1]).find('x') >= 0):
                            chinese += data[temp:temp+1]
                            temp += 1
                        buf += chinese.decode('ansi', 'ignore')
                        i = temp
            else:
                if (f + 1 == i) and ((data[i] >= 0x30 and data[i] <= 0x39) or data[i] == 0x2a):
                    x = False
                    t = i
                    rst = str(data[f:t+1], encoding="utf-8")
                    buf += rst
                i += 1
        if i >= l:
            break
    #print(buf)
    bufs = buf.split('&@')
    for var in bufs:
        if var[0:4] == 'set ':
            var = var[4:]
            b = var.find('=')
            vars[var[0:b]] = var[b+1:].replace('^^^', '^')
    buf += '\r\n'
    return {'index':i, 'buf':buf}

"""
%':~-53,1%
':~-53,1
["'", '-53,1']
"""
def var_percent(data, vars):
    full = str(data, encoding="utf-8")
    buf = full[1:len(full)-1]
    buf = buf.split(':~')
    var = buf[0]
    if not var in vars:
        vars[var] = os.getenv(var)
    ent = vars[var]
    if (len(buf) > 1):
        l = len(ent)
        buf = buf[1].split(',')
        f = int(buf[0])
        t = int(buf[1])
        if f < 0:
            f, t = l + f, t
        rst = ent[f: f+t]
    else:
        rst = full
    return rst

def makeFile(path,content):
    try:
        encryptionFilePath = os.path.dirname(sys.argv[1])
        encryptionFileName = os.path.basename(sys.argv[1])
        encryptionFile = encryptionFileName.split('.')
        decryptionFileName = encryptionFile[0] + '_denctyption.' + encryptionFile[1]
        decryptionFile = encryptionFilePath + '/' + decryptionFileName
        print(decryptionFile)
        file = open(decryptionFile, 'w+')
        file.write(content)
        file.close()
    except Exception as err:
        print(err)
        exit        

if __name__ == '__main__':

    try:
        if len(sys.argv) < 2:
            print('param len error\nuse: python dencrypt.py encrypt.bat')
            exit
        encrypt_file = sys.argv[1]
        file = open(encrypt_file, "rb")
        data = file.read()
        file.close()
        source = decryption(data)
        makeFile(encrypt_file, source)
    except Exception as err:
        print(err)
        exit


自己装的是python39,代码右键保存即可
使用起来也很简单 cmd 打开黑窗 python 保存的文件.py 然后把文件拖进窗口, 按下回车即可
由于样理有限,自己测试解过是没问题的,如果遇到问题欢迎大家在评论区讨论

最后说一点, 本人py小白,但是爱折腾,所以脚本写的一般,换应大佬斧正[抱拳了]

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
bbsokok + 1 + 1 谢谢@Thanks!
resu + 1 + 1 用心讨论,共获提升!
JACK线 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 杨辣子 发表于 2021-7-2 16:28
Darkline 发表于 2021-7-2 16:22
测试了一下  在pycharm里正常运行  但是打包后会提示Failed to execute script   不知道是哪里出问题了

你的是3.9版本么
多幸运i 发表于 2022-4-11 14:42
guoyuh78 发表于 2022-4-8 09:12
大神 你好 我遇到同样的加密了 可以帮忙看看吗?

你不知道这是我得付费工具?跑来吾爱找破解,泄露+破解:工具停止一切更新!
penzoe 发表于 2021-7-2 16:28
gh2923 发表于 2021-7-2 17:07
顶楼主!

太厉害了,本人纯小白,真的不懂,只是想多一句……
其实,原贴4楼作者发的就能直接还原了……
云烟成雨 发表于 2021-7-2 17:08
bat原来还能加密啊
 楼主| 杨辣子 发表于 2021-7-2 17:25
云烟成雨 发表于 2021-7-2 17:08
bat原来还能加密啊

是的, 有的作者会把脚本用工具混淆
kvttt_2021 发表于 2021-7-2 17:51
请问楼主加密后的BAT 正常运行吗?能否变解密为加密?
Juno_Jr 发表于 2021-7-2 17:57
不错的刷机工具=航母工具箱
加密的工具出处
http://www.bathome.net/thread-42106-1-1.html
 楼主| 杨辣子 发表于 2021-7-2 20:45
kvttt_2021 发表于 2021-7-2 17:51
请问楼主加密后的BAT 正常运行吗?能否变解密为加密?

运行正常, 加密的话你要用加密工具 BatchEncryption.exe
 楼主| 杨辣子 发表于 2021-7-2 20:46
Darkline 发表于 2021-7-2 17:44
3.9.5最新版本   pycharm也是官网下载的最新版本

那我就不太清楚了, 没有打包运行过
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 07:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表