最近项目遇到很多使用jsjiami.com.v7的程序,所以就有了下文:
decode-js
基于 Babel 的 AST 分析器和处理器,可以处理以下情况:

stringArray(包括添加了旋转操作,以及嵌套调用的情况)
死代码
控制流扁平化(switch)
局部代码变换(Object表达式、字符串分割等)
自定义代码(自保护,禁止控制台调试,禁止控制台输出)
使用方法
准备一个nodejs环境
通过npm i安装依赖
按如下方式运行插件:

# pre-defined command
npm run xxx
# or full command
npm run decode -- -t type [-i input.js] [-o output.js]

xxx为预定义的指令,见package.json中的scripts字段。

type:

common (高频局部混淆)
jjencode (sojson.com 版本)
sojson
sojsonv7
obfuscator
默认输入文件为input.js,文件中不能包含除混淆代码以外的内容(例如非混淆代码)。

默认输出文件为output.js。

https://github.com/echo094/decode-js
https://github.com/pxx917144686/js?tab=readme-ov-file
首先需要了解的问题: 这段代码属于 解混淆? 解密?
解混淆
目的:将混淆后的代码或程序转换回更易读、易理解的形式 ——> 便分析代码逻辑

解混淆 方法
静态分析:分析代码结构、控制流、数据流;

代码模式识别:识别混淆模式,如无意义的变量名、冗余代码;

变量和函数重命名:为混淆的变量和函数赋予有意义的名称;

控制流还原:简化和重构复杂的控制流结构;

解密
目的:将加密的数据还原为其原始的、可读的形式 ——> 用于保护数据安全,确保只有授权人员能够访问

解密 方法
使用密钥:对于对称加密,使用相同的密钥进行解密;对于非对称加密,使用对应的私钥进行解密;

算法逆过程:应用加密算法的逆过程,如AES、RSA

解密 举例
Base64编码的数据 ——> var _0x152e = "akx0VmY=", "YnJlYWs=", ...

字符串编码 ——> 代码中有大量看似随机的字符串,如"akx0VmY="、"YnJlYWs="等。这些字符串可能是经过Base64等编码方式加密的数据

动态代码执行 ——> Function、eval 使得代码的真实意图更难被直接看懂

变量函数命名 ——> _0x152e、_0x27328c

使用
安装 Node.js 环境 ——> 官方版本 Node.js

推荐版本——>v22.12.0 (LTS)
Node.js 是一个开源的、跨平台的 JavaScript 运行时环境
下载链接 js-main.zip
解压 js-main.zip
终端执行:
cd js文件夹

cd js.main

安装依赖 ——>

npm i

解码 ——>

node src/main.js -t sojsonv7 -i input.js -o output.js

使用 例子

node src/main.js -t sojsonv7 -i /Users/pxx917144686/Downloads/result.js -o output.js

node src/main.js -t sojsonv7 -i #使用node(Node.js 环境)执行——>src/main.js -t sojsonv7

/Users/pxx917144686/Downloads/result.js #需要解密的那个文件 可以直接拖入终端

-o output.js #解密成功生成文件output.js 默认在脚本文件夹内

关于 ——> sojsonv7 可以替换
👇

common (高频局部的混淆)
jjencode (sojson.com 版本)
sojson (jsjiami.v6 版本)
sojsonv7 (jsjiami.v7 版本)
obfuscator (市面上通用加密)

点击 ——> 提醒注意
注意:
文件中不能包含除混淆代码以外的内容(非混淆代码)

默认输出 ——> 文件为output.js

love love love

最后修改:2025 年 05 月 04 日
如果觉得我的文章对你有用,请随意赞赏