最近项目遇到很多使用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