From 958ad500de867f3f588c7ea3b0d180b4391c5dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BA=91=E9=BE=99?= <1664771141@qq.com> Date: Tue, 28 Feb 2023 17:32:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ISSUE_TEMPLATE.md | 25 +++++++++++++++++ README.md | 67 ++++++++++++++++++---------------------------- geek_road.jpg | Bin 0 -> 27359 bytes jlq.png | Bin 0 -> 6561 bytes wuLib.js | 10 ++++++- wuWxss.js | 47 +++++++++++++++++++++++++++++--- 6 files changed, 104 insertions(+), 45 deletions(-) create mode 100644 geek_road.jpg create mode 100644 jlq.png diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index e69de29..cebaa5c 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,25 @@ +发表 Issue 前请仔细阅读以下内容: + +1. 如果你是要反馈 bug, 请按以下`模板`书写 Issue; +2. 如果你遇到的是 Node.js 使用问题, 请尽可能依赖搜索引擎解决问题; +3. 遇到包依赖问题,请联系对应项目; +4. 任何对某类小程序包的适配问题都应提供 wxapkg 程序包,否则直接 Close 处理; +5. 提交前请确认 wxapkg 程序包版本不小于 v0.6vv_20180111_fbi (直接用文本编辑器打开 wxapkg包搜索 v0.6vv 或 v0.5vv 即可查到,注意版本大小主要比较的是日期), 旧版本不提供支持, 相关 Issue 直接 Close 处理; +6. 直接分包和直接处理含插件的包两个功能暂不支持, 请勿重复发表 Issue, 新样例可在已存在的 Issue 下提出; +7. 请不要在其他 Issue 下发表与该 Issue 无关的回复, 否则将有可能被删除。 + +模板内容如下: + +程序执行命令(可选): + +程序执行错误信息(如果反馈是抛出异常的错误,必填): + +``` +复制到这里 +``` + +程序结果错误信息(如果反馈不是抛出异常的错误, 必填, 请尽可能详细描述): + +程序包(你所要解压的程序包地址, 可为网盘链接, 也可直接上传[上传前请先打包]. 必填): + +其他附加内容: diff --git a/README.md b/README.md index 0a68d4d..8cec1d0 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,46 @@ -# wxappUnpacker - -![版本 0.3](https://img.shields.io/badge/版本-0.3-red.svg) ![支持的微信版本 >20180111](https://img.shields.io/badge/%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC-%3E=20180111-brightgreen.svg) ![高级特性支持度 0](https://img.shields.io/badge/%E6%94%AF%E6%8C%81-0%25-yellow.svg) - -> Forked from https://github.com/system-cpu/wxappUnpacker - -> Wechat App(微信小程序, .wxapkg)解包及相关文件(.wxss, .json, .wxs, .wxml)还原工具 - -### wxapkg 包的获取 - - Android 手机最近使用过的微信小程序所对应的 wxapkg 包文件都存储在特定文件夹下,可通过以下命令查看: - - adb pull /data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg - - 其中`{User}` 为当前用户的用户名,类似于 `2bc**************b65`。 - # 安装 ``` npm install ``` -## 依赖 +# 安装依赖 +``` +npm install esprima +     +npm install css-tree +     +npm install cssbeautify +     +npm install vm2 +     +npm install uglify-es +     +npm install js-beautify -这些 node.js 程序除了自带的 API 外还依赖于以下包: -[cssbeautify](https://github.com/senchalabs/cssbeautify)、[CSSTree](https://github.com/csstree/csstree)、[VM2](https://github.com/patriksimek/vm2)、[Esprima](https://github.com/jquery/esprima)、[UglifyES](https://github.com/mishoo/UglifyJS2/tree/harmony)、[js-beautify](https://github.com/beautify-web/js-beautify) -您需要安装这些包才能正确执行这些程序,为了做到这一点,您可以执行`npm install`;另外如需全局安装这些包可执行以下命令: +``` +# 使用 - npm install esprima -g - npm install css-tree -g - npm install cssbeautify -g - npm install vm2 -g - npm install uglify-es -g - npm install js-beautify -g - npm install escodegen -g +Android 手机最近使用过的微信小程序所对应的 wxapkg 包文件都存储在特定文件夹下,可通过以下命令查看: -此外,这些 node.js 程序之间也有一定的依赖关系,比如他们都依赖于 wuLib.js 。 +adb pull /data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg -### 使用 +其中`{User}` 为当前用户的用户名,类似于 `2bc**************b65`。 - node wuWxapkg.js .wxapkg 的文件路径 // 例子 D:/node/wxappUnpacker-master._1123949441_321.wxapkg # 分包功能 当检测到 wxapkg 为子包时, 添加-s 参数指定主包源码路径即可自动将子包的 wxss,wxml,js 解析到主包的对应位置下. 完整流程大致如下: 1. 获取主包和若干子包 -2. 解包主包 `./bingo.sh testpkg/master-xxx.wxapkg` -3. 解包子包 `./bingo.sh testpkg/sub-1-xxx.wxapkg -s=../master-xxx` +2. 解包主包 + - windows系统使用: `./bingo.bat testpkg/master-xxx.wxapkg` + - Linux系统使用: `./bingo.sh testpkg/master-xxx.wxapkg` +3. 解包子包 + - windows系统使用: `./bingo.bat testpkg/sub-1-xxx.wxapkg -s=../master-xxx` + - Linux系统使用: `./bingo.sh testpkg/sub-1-xxx.wxapkg -s=../master-xxx` + +觉得麻烦?可以使用[自助解包客户端](#自助解包客户端) TIP > -s 参数可为相对路径或绝对路径, 推荐使用绝对路径, 因为相对路径的起点不是当前目录 而是子包解包后的目录 @@ -60,12 +54,3 @@ TIP │   └── master-xxx # ../master-xxx 就是这个目录 │   ├── app.json ``` -# 本人代搭建流量主小程序 - ``` - 技术微信 : li1664771111 - ``` - -# 支持 - ``` - Star 一个吧 -``` diff --git a/geek_road.jpg b/geek_road.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b421755e26e8ef6e4524b53ef2511d1548971d65 GIT binary patch literal 27359 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 literal 0 HcmV?d00001 diff --git a/wuLib.js b/wuLib.js index cbefad7..380c6de 100644 --- a/wuLib.js +++ b/wuLib.js @@ -1,5 +1,7 @@ const fs = require("fs"); const path = require("path"); +const os = require('os'); +let platform = os.platform(); class CntEvent { constructor() { @@ -83,7 +85,13 @@ function mkdirs(dir, cb) { function save(name, content) { ioEvent.encount(); mkdirs(path.dirname(name), () => ioLimit.runWithCb(fs.writeFile.bind(fs), name, content, err => { - if (err) throw Error("Save file error: " + err); + if (err) { + if (platform.indexOf('win') != -1) { + console.log('Save file error: ' + err); + } else { + throw Error('Save file error: ' + err); + } + } ioEvent.decount(); })); } diff --git a/wuWxss.js b/wuWxss.js index 2586a5a..fe7e2cf 100644 --- a/wuWxss.js +++ b/wuWxss.js @@ -23,6 +23,7 @@ function doWxss(dir, cb, mainDir, nowDir) { for (let i = 0; i < 300; i++) GwxCfg.prototype["$gwx" + i] = GwxCfg.prototype.$gwx; let runList = {}, pureData = {}, result = {}, actualPure = {}, importCnt = {}, frameName = "", onlyTest = true, blockCss = [];//custom block css file which won't be imported by others.(no extension name) + let commonStyle = {};//some global css function cssRebuild(data) {//need to bind this as {cssFile:__name__} before call let cssFile; @@ -32,8 +33,10 @@ function doWxss(dir, cb, mainDir, nowDir) { else ++importCnt[id]; } - if (typeof data === "number") return addStat(data); - for (let content of data) if (typeof content === "object" && content[0] == 2) addStat(content[1]); + if (typeof data === "number") return addStat(data); + if (data != undefined) { + for (let content of data) if (typeof content === "object" && content[0] == 2) addStat(content[1]); + } } function makeup(data) { @@ -59,6 +62,24 @@ function doWxss(dir, cb, mainDir, nowDir) { } } let exactData = isPure ? pureData[data] : data; + if (typeof data === 'string') { + let styleData = commonStyle[data] + let fileStyle = '' + if (styleData != undefined) { + for (let content of styleData) { + if (typeof content === 'string') { + if (content != '1') { + fileStyle += content + } + } else { + if (content.length != 1) { + fileStyle += content[1] + 'rpx' + } + } + } + } + exactData = fileStyle + } for (let content of exactData) if (typeof content === "object") { switch (content[0]) { @@ -232,11 +253,31 @@ function doWxss(dir, cb, mainDir, nowDir) { ';\nvar __mainPageFrameReady__ = window.__mainPageFrameReady__ || function(){};var __WXML_GLOBAL__={entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0};var __vd_version_info__=__vd_version_info__||{}' + ";\n" + scriptCode; + if (code.indexOf('__COMMON_STYLESHEETS__') != -1) { + let commonStyles = code.slice( + code.indexOf('__COMMON_STYLESHEETS__||{}') + 26, + code.indexOf( + 'var setCssToHead = function(file, _xcInvalid, info)' + ) + ) + commonStyles = + ';var __COMMON_STYLESHEETS__ = __COMMON_STYLESHEETS__||{};' + + commonStyles + + ';__COMMON_STYLESHEETS__;' + commonStyle = new VM().run(commonStyles) + } + //remove setCssToHead function mainCode = mainCode.replace('var setCssToHead = function', 'var setCssToHead2 = function'); code = code.slice(code.lastIndexOf('var setCssToHead = function(file, _xcInvalid')); - code = code.slice(code.lastIndexOf('\nvar _C= ') + 1); + code = code.replace('__COMMON_STYLESHEETS__', '[]'); + + if (code.indexOf('_C =') == -1) { + code = code.slice(code.lastIndexOf('\nvar _C= ') + 1); + } else { + code = code.slice(code.lastIndexOf('\nvar _C = ') + 1); + } code = code.slice(0, code.indexOf('\n')); let vm = new VM({sandbox: {}});