wxappUnpacker的bingo.bat脚本逐行解读

简介: 反编译工具在windows系统下的调用脚本的说明

之前发过一篇文章小程序反编译工具在windows系统下的调用脚本提到了Windows平台下的脚本,但是对脚本没有做详细说明。本文就是针对脚本做的讲解。对批处理感兴趣的可以了解下。

不会基础也没关系。下面我们进入正题。

脚本解读

第1行:

# WXAPPUNPACKER_PATH 项目路径

这段其实在 shell 文件中是注释内容,只不过在翻译这份脚本的时候是边查边写,复制过来没有修改,所以严格说这里属于翻译错误,正确的内容应该是如下:

:: WXAPPUNPACKER_PATH 项目路径

:: 代表表示该行是注释内容

第2行:

set WXAPPUNPACKER_PATH=%~dp0

『%~dp0』是啥?

“d”为Drive的缩写,即为驱动器,磁盘

“p”为Path缩写,即为路径,目录 所以『%~dp0』就表示获取当前路径。

这段的作用就是定义了名为『WXAPPUNPACKER_PATH』的变量并且值为当前目录。

第4行:

set FILE_FORMAT=wxapkg

定义名为『FILE_FORMAT』的变量,值为 wxapkg

第6~12行:

:wxappUnpacker_pkg 

echo "node %WXAPPUNPACKER_PATH%/wuWxapkg.js %fname%"

node %WXAPPUNPACKER_PATH%/wuWxapkg.js %2 %1

goto:eof

这里定义了一个名为『wxappUnpacker_pkg』的函数,打印即将执行的脚本:"node [当前路径]/wuWxapkg.js [文件名]" 执行脚本:node [当前路径]/wuWxapkg.js 参数2 参数1

第14~32行:

:wxappUnpacker 

set de_dir=%1

  if "%de_dir%" == ""

      set de_dir=%WXAPPUNPACKER_PATH%

echo %de_dir%

echo "for wxapkg in `find %de_dir% "*.${FILE_FORMAT}"`"

for %%fname in `/f %de_dir% -name "*.%FILE_FORMAT%"`

  do

    (call :wxappUnpacker_pkg %fname% %2)

goto:eof

这里定义了一个函数,作用是循环调用解包命令。
遗憾的是这里的脚本存在翻译错误:
对比下 shell 脚本来看看,定义一个de_dir变量赋值为第一个传入参数。然后

if [ -z "$1" ]
  then
    de_dir=`pwd`
  fi

是要判断传入参数是否为空字符串,是空串就赋值为取当前目录的命令,所以这里就翻译错了,在MS-DOS下获取当前目录的命令为%cd%。再往下是循环查找wxapkg文件,同样也错了,正确的命令应该是
命令行环境:

for /f "delims=\" %i in ('dir /b /a-d /o-d "%cd%\*.%FILE_FORMAT%"') 
do 
    (call :wxappUnpacker_pkg %i $2)

批处理文件中:

@echo off
for /f "delims=\" %%i in ('dir /b /a-d /o-d "*.%FILE_FORMAT%"') do 
    (call :wxappUnpacker_pkg "%%i" $2)

需要注意的是在批处理文件中引用变量需要两个百分号 %%。

第34~44行:

:de_pkg

  if "-d" == "%1"

    (call :wxappUnpacker %1 %2)

  else

    (call :wxappUnpacker_pkg %1 %2)

goto:eof

这里定义了一个函数,作用是根据参数是否是目录来调用解包命令。

第46行:

# $1: pkg file or pkg dir; $2: order

这里也是翻译错误,应该在开头用::标记注释。

第48行:

call :de_pkg %1 %2

很简单,就是调用 de_pkg 函数,同时传入了两个参数。

基础知识

最后说几个基础知识

预定义的变量

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展名版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

%0 bat的完整路径名如"C:\Windows\system32\xxx.bat"

参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。

%1 bat参数1依次类推%2参数2...

%path% - 当前的环境变量。以分号隔开的路径列表,路径可包含空格,可以以''结尾, 可以以双引号包围之。

定义变量
SET =[]

如果 是空字符串,则取消变量的定义,变量的值用双引号或空格结束。引号如果没有结束,则默认范围到行尾。

如何使用 MS-DOS 脚本的调用参数

ECHO %

N 的范围为 0-9 , %0 为文件名, %1-%9 为参数,每次调用脚本最多支持 9 个参数

ECHO %*

%* 代表所有传入的参数,即 %1-%9 ,并且包括其中的空白符

%*

%

Echo 命令

打开回显或关闭请求回显功能,或显示消息。如果没有任何参数, echo 命令将显示当前回显设置。

语法 :

echo [{on │ off}] [message]

Sample :@echo off / echo hello world

@ 命令

表示不显示 @字符放在命令前将关闭该命令回显,无论此时回显是否处于打开状态。

Sample :@echo off

CALL命令

可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理 CALL drive:filename [batch-parameters] 调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。CALL :label arguments 调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头 以命令goto :eof结尾

其它还有很多命令,这里就不再赘述了,有兴趣的同学可以自行查阅。

相关文章
|
7月前
|
JavaScript
Vue中Axios网络请求封装-企业最常用封装模式
本教程介绍如何安装并配置 Axios 实例,包含请求与响应拦截器,实现自动携带 Token、错误提示及登录状态管理,适用于 Vue 项目。
308 1
|
数据库 数据安全/隐私保护
国产化DM达梦数据库 - 用户状态查询、锁定与解锁,“登录失败次数超过限制”问题解决
国产化DM达梦数据库 - 用户状态查询、锁定与解锁,“登录失败次数超过限制”问题解决
3261 0
国产化DM达梦数据库 - 用户状态查询、锁定与解锁,“登录失败次数超过限制”问题解决
|
3月前
|
存储 缓存 JSON
安居客 item_get - 获取详情数据接口对接全攻略:从入门到精通
安居客anjuke.item.get接口通过house_id获取全维度房源详情,支持新房、二手房、租房等多品类,涵盖基础属性、价格、户型、配套、交易状态及经纪人信息。采用HTTPS+API签名认证,返回JSON/XML格式数据,适用于详情页构建、中介获客、数据中台等场景。本攻略提供从权限申请、接口调用、Python实操到性能优化的全流程指导,助力高效稳定对接。
|
9月前
|
运维 前端开发 JavaScript
前端埋点校验工具:数据驱动的最后一道防线
数据埋点是企业决策的关键基础,但常面临覆盖率低、数据不准和故障难排查三大难题。本文深入剖析了这些问题的成因与影响,并提出“三维校验矩阵”解决方案:提升覆盖率至99.8%、降低错误率至0.3%、提速故障定位5倍。同时对比Split.io、Tealium、Sentry、板栗看板等工具优劣,为企业选型提供参考。迈向高质量数据治理,从精准埋点开始。
|
7月前
|
弹性计算
阿里云域名备案流程(图文教程)2025年最新
2025年最新阿里云ICP备案流程图文教程,共5个步骤,最快2天完成备案。首先提交备案材料,阿里云初审(1个工作日内),通过后提交管局,接着进行工信部短信核验,最后等待管局审核(1-20天)。前4步最快1天完成,整体约2-21天。个人或企业均可操作,材料齐全更高效。需搭配阿里云中国大陆地域服务器备案。
5661 18
|
8月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。
|
8月前
|
人工智能 JSON JavaScript
【干货满满】API接口请求封装
在 Vue 项目中,常使用 Axios 与后台交互,它基于 Promise,支持浏览器和 Node.js,具备拦截请求、取消请求、JSON 转换等功能。本文介绍了 Axios 的安装、封装及使用方法,包括创建实例、请求拦截、响应处理、API 管理等内容,并提供了完整代码示例,便于统一管理和调用接口,适用于前后端分离开发模式。
|
iOS开发 索引
flutter中好用的Widget-CupertinoPicker
flutter中好用的Widget-CupertinoPicker
969 0
|
传感器 安全 物联网
阿里云先知安全沙龙(北京站) ——车联网安全渗透测试思路分享
本文介绍了智能汽车的整车架构、协议栈结构、攻击点分析、渗透思路及案例分享。整车架构涵盖应用层、协议层和物理层,详细解析各层次功能模块和通信机制。攻击点包括Wi-Fi、USB、NFC等,展示车辆通信接口和系统组件的安全风险。渗透思路从信息收集到系统内部探索,利用固件漏洞控制车辆功能。案例展示了网段隔离不足导致的SSH访问和OTA日志审计漏洞,揭示了潜在的安全威胁。
|
JSON JavaScript 前端开发
如何检查 JavaScript 对象是否为空
【8月更文挑战第18天】
1675 5
如何检查 JavaScript 对象是否为空