实验 qmc2-crypto 包 #207

Merged
jixunmoe merged 11 commits from feature/qmcv2-wasm into master 2021-12-15 22:35:07 +00:00
jixunmoe commented 2021-12-15 14:01:02 +00:00 (Migrated from github.com)

使用 @jixun/qmc2-crypto 包进行 QMCv2 的解密。

加了个 threads 包的补丁,不知道是不是我环境的问题,构建 production build 会出问题,要打上这个补丁。

TODO:

  • 更改打包脚本来启用 wasm 版本 => 现在使用的是内嵌 WASM 二进制的版本。
  • 兼容 QMCv1 格式的解密
  • 清理 qmcMask.ts 未使用用到的导出函数
  • QMCv2 检测失败后自动回退到 QMCv1 实现并尝试解密。
  • 修正 Chrome 扩展的执行(待验证 已验证)

题外话:package.json:fix-compatibility 也可以用 patch-package 来自动处理。

使用 [`@jixun/qmc2-crypto`](https://www.npmjs.com/package/@jixun/qmc2-crypto) 包进行 QMCv2 的解密。 加了个 threads 包的补丁,不知道是不是我环境的问题,构建 production build 会出问题,要打上这个补丁。 TODO: - [x] 更改打包脚本来启用 wasm 版本 => 现在使用的是内嵌 WASM 二进制的版本。 - [x] 兼容 QMCv1 格式的解密 - [x] 清理 `qmcMask.ts` 未使用用到的导出函数 - [x] QMCv2 检测失败后自动回退到 QMCv1 实现并尝试解密。 - [x] 修正 Chrome 扩展的执行(~~待验证~~ 已验证) --- 题外话:[`package.json:fix-compatibility`](https://github.com/unlock-music/unlock-music/blob/1986c1e/package.json#L16) 也可以用 `patch-package` 来自动处理。
jixunmoe commented 2021-12-15 14:14:49 +00:00 (Migrated from github.com)

该 PR 完成后,预计能解决: #198 #193 #185 #51

该 PR 完成后,预计能解决: #198 #193 #185 #51
ix64 commented 2021-12-15 14:58:55 +00:00 (Migrated from github.com)

题外话:package.json:fix-compatibility 也可以用 patch-package 来自动处理。

这个是处理 旧版Edge 兼容性的,貌似现在也没啥人在用了 😂

> 题外话:package.json:fix-compatibility 也可以用 patch-package 来自动处理。 这个是处理 旧版Edge 兼容性的,貌似现在也没啥人在用了 😂
ix64 commented 2021-12-15 21:26:16 +00:00 (Migrated from github.com)

👍 简单测试了一下,在 https://, http://, file:// 都没问题
但是构建为扩展程序时 wasm 无法使用
image

👍 简单测试了一下,在 `https://`, `http://`, `file://` 都没问题 但是构建为扩展程序时 wasm 无法使用 ![image](https://user-images.githubusercontent.com/13902388/146267141-2a3c384c-239e-4b0e-8f6c-6178fd0fc459.png)
ix64 commented 2021-12-15 21:36:57 +00:00 (Migrated from github.com)

另外:靠Version(扩展名)去区分会有一点问题:Android有的版本会把 动态密钥(v2)的flac,以 qmcflac 的扩展名保存
我在 unlock-music/cli 里面 单纯依靠 Magic Footer 去区分

另外:靠Version(扩展名)去区分会有一点问题:Android有的版本会把 动态密钥(v2)的flac,以 qmcflac 的扩展名保存 我在 unlock-music/cli 里面 [单纯依靠 Magic Footer 去区分](https://github.com/unlock-music/cli/blob/master/algo/qmc/qmc.go#L46-L92)
jixunmoe commented 2021-12-15 21:45:18 +00:00 (Migrated from github.com)
  function createNamedFunction(name, body) {
      name = makeLegalFunctionName(name);
      /*jshint evil:true*/
      return new Function(
          "body",
          "return function " + name + "() {\n" +
          "    \"use strict\";" +
          "    return body.apply(this, arguments);\n" +
          "};\n"
      )(body);
    }

看来是这个动态建立带名称函数出问题了,一会发个新版本的包,看起来可以用 NO_DYNAMIC_EXECUTION=1 关掉这玩意。

``` function createNamedFunction(name, body) { name = makeLegalFunctionName(name); /*jshint evil:true*/ return new Function( "body", "return function " + name + "() {\n" + " \"use strict\";" + " return body.apply(this, arguments);\n" + "};\n" )(body); } ``` 看来是这个动态建立带名称函数出问题了,一会发个新版本的包,看起来可以用 `NO_DYNAMIC_EXECUTION=1` 关掉这玩意。
jixunmoe commented 2021-12-15 21:46:05 +00:00 (Migrated from github.com)

以 qmcflac 的扩展名保存

我去做一下检测,可以尝试用 v2 解密,失败就回退到 v1

> 以 qmcflac 的扩展名保存 我去做一下检测,可以尝试用 v2 解密,失败就回退到 v1
jixunmoe commented 2021-12-15 22:14:23 +00:00 (Migrated from github.com)

实现了 v2 检测失败(magic 看起来不像 QMCv2 的情况下)回退到尝试 v1 的解密。

如果这个也失败了就报错(在后续的媒体文件 Parser 中解析错误而报错)

实现了 v2 检测失败(magic 看起来不像 QMCv2 的情况下)回退到尝试 v1 的解密。 如果这个也失败了就报错(在后续的媒体文件 Parser 中解析错误而报错)
jixunmoe commented 2021-12-15 22:16:49 +00:00 (Migrated from github.com)

3b88d168b6 产生的 diff 有点不正常,等我回退一下。

3b88d168b660f780824016e4d23241d1fc766e39 产生的 diff 有点不正常,等我回退一下。
jixunmoe commented 2021-12-15 22:23:24 +00:00 (Migrated from github.com)

3b88d16 产生的 diff 不正常是因为在 node 14 的环境下执行了包的升级指令,v14 不支持 lockfileVersion: 2

切换到 v16 后能产生正常的 diff 了。

3b88d16 产生的 diff 不正常是因为在 node 14 的环境下执行了包的升级指令,v14 不支持 `lockfileVersion: 2`。 切换到 v16 后能产生正常的 diff 了。
ix64 commented 2021-12-15 22:31:09 +00:00 (Migrated from github.com)

Great! All Works!

Great! All Works!
This repo is archived. You cannot comment on pull requests.
No description provided.