「逆向分析」简单的一次BAT脚本(批处理文件)解密插图

0x01 前言

最近博主想给小米12S手机刷入root,也是为了方便所以就来到某Q群里寻求傻瓜式一键root工具。询问了下价格,19大洋。觉着也不亏就算赞助了一下,毕竟也有着售后功能。

0x02 文件分析

拿到管理发的文件后,我们先来看看到底是怎么一回事。

└─A-12s-14.0.9                               
│ ├─一键安装安卓驱动.exe                             19.70 MB
│ ├─双击我刷入面具ROOT.Bat                          762.00 B
│ ├─magisk                                   
│ │ └─magisk.img                             192.00 MB
│ └─QingnAi                                  
│ │ ├─adb.exe                                3.08 MB
│ │ ├─AdbWinApi.dll                          95.50 KB
│ │ ├─AdbWinUsbApi.dll                       61.50 KB
│ │ ├─fastboot.exe                           1.28 MB
│ │ └─vbmeta.img                             8.00 KB

0x03 问题

这个「QingnAi」目录下的东西到底是不是管理自己编写的呢?

Ok,那么很显然所有的都不是它写的,除了这个批处理文件。那么本期分析到此结束(当然不是)

那么作者到底实现了些什么呢?我们来对Bat文件解密看看。

「逆向分析」简单的一次BAT脚本(批处理文件)解密插图1

编辑文件看看,乱码了。不过对于bat文件来讲又有什么加密可行呢?大概率是让系统误解了该文件的编码格式,HEX手动编辑一下就能恢复。这里我让AI写了个py脚本来实现解密,技术含量约等于0。

0x04 解密代码

def decrypt_bat_file(file_path):
    decrypted_content = ''

    with open(file_path, 'rb') as file:
        file_content = file.read()

        if file_content[0:2] == b'\xFF\xFE' or file_content[0:2] == b'\xFE\xFF':
            # 修改前两个字节为 0D 0A
            decrypted_content = b'\x0D\x0A' + file_content[2:]
        else:
            decrypted_content = file_content

    with open('decrypted.bat', 'wb') as decrypted_file:
        decrypted_file.write(decrypted_content)

    print("解密成功!")


def encrypt_bat_file(file_path):
    encrypted_content = b''

    with open(file_path, 'rb') as file:
        file_content = file.read()

        # 修改前两个字节为 FF FE 或 FE FF
        encrypted_content = b'\xFF\xFE' + file_content[2:]

    with open('encrypted.bat', 'wb') as encrypted_file:
        encrypted_file.write(encrypted_content)

    print("加密成功!")


if __name__ == '__main__':
    # 示例使用
    # file_path = 'original.bat'
    # encrypt_bat_file(file_path)

    # 示例使用
    file_path = 'encrypted.bat'
    decrypt_bat_file(file_path)

运行后,我们在目录找到decrypted.bat文件,看看它到底写了什么。

0x05 加密文件解析

也没什么影响的,直接解密后的文件贴出来吧:

Cls
@echo off &setlocal enabledelayedexpansion
color a
title 作者QingnAi qq:2911509598 远程ROOT救砖群:657162260
set "check=1"
set fastboot="QingnAi\fastboot.exe"
for /f %%i in ('!fastboot! devices') do ( set "check=%%i")
echo !check!
if !check!==1 (echo.
echo 链接存在问题 ! !&echo.
echo 请确认文件已解压 且 手机进入fastboot&echo.
echo 数据线使用的原装 并且 已安装驱动&echo.
echo 或者更换电脑接口再次尝试!&echo.&goto :end
)
QingnAi\fastboot.exe devices
QingnAi\fastboot.exe flash boot magisk\magisk.img
QingnAi\fastboot.exe reboot
echo.
echo.
echo 刷入面具成功!请到群文件下载面具25.2版本
echo.
echo 未经作者授权禁止转载 未授权将会触发危险代码!
echo.
echo 作者 QingnAi B站:少说话好吧斑鸠i 远程ROOT救砖群:657162260
echo.
:end
cmd /k

怎么说呢,这个批处理文件写得有小学生(bushi)那味儿了,以下是AI对此的看法:

  1. 缺乏注释和说明:代码中没有提供足够的注释和说明,难以理解每一行代码的作用和意图。这给其他开发人员阅读和维护代码带来了困难。
  2. 变量命名不规范:代码中存在一些变量命名不清晰的情况,例如checkfastboot等变量名并不能直观地反映其含义和用途。良好的命名习惯可以提高代码的可读性和可维护性。
  3. 重复的代码片段:代码中出现了多次执行QingnAi\fastboot.exe命令的重复代码片段,这种冗余代码可以通过定义函数或使用循环来避免,提高代码的简洁性和可维护性。
  4. 错误处理不完善:代码中对连接存在问题的情况只是简单地输出提示信息,并没有提供更具体的错误处理机制。在实际应用中,应该考虑到更多的异常情况,并提供相应的错误处理和反馈机制。
  5. 没有使用函数模块化:代码中所有的操作都集中在一个大的代码块中,没有进行模块化的拆分。将代码分割成多个函数可以提高代码的可读性、可测试性和重用性。

只能说,非常到位!

0x06 后续

只能说什么呢,智商税永远都是No.1,不过博主最近也是狠狠地赚了一笔,这点小钱值算的是大概0.1%吧(可能他卖的是教程和售后服务)。

后续刷完机,有时间给大伙儿写一个工具,交智商税什么的,都去shi吧!问题不大,收工!