Kitaes-software/bonk-deobfuscator
GitHub: Kitaes-software/bonk-deobfuscator
一个针对 bonk.io 网页游戏的 JavaScript 反混淆工具,将加密混淆的游戏代码还原为可读形式。
Stars: 7 | Forks: 0
# Bonk 反混淆工具
该项目对 alpha2s.js 中包含的完整 [bonk.io](https://bonk.io) 代码进行反混淆。它基于[这个](https://github.com/kookywarrior/bonk-deobfuscator)反混淆工具,但包含了更多功能!
## 此反混淆工具可以:
- 破解用于混淆 [bonk.io](https://bonk.io) 代码的加密(你的浏览器每次发生某些操作时都必须执行此操作)
- 移除未使用的变量(数量非常多!)
- 根据 variableNames.ini 中指定的内容,将变量名替换为人类可读的名称
- 它甚至会用可读的代码替换一些糟糕的代码!
## 反混淆代码对比
混淆后的代码:
```
requirejs(
[B3jF8.U3q(4353), B3jF8.U3q(393), B3jF8.w65(124)],
function (E3G, p5h, Q2K) {
"use strict";
var k7V = B3jF8;
var t$e = [arguments];
t$e[2] = 349182763;
k7V.t8H();
t$e[7] = 1310130950;
t$e[4] = -742434495;
t$e[8] = -1689431276;
t$e[3] = 1856419556;
t$e[9] = 1764162380;
if (
!(
k7V.t$4(0, false, 105006) !== t$e[2] &&
k7V.t$4(0, false, 314987) !== t$e[7] &&
k7V.g7y(0, false, 151982) !== t$e[4] &&
k7V.g7y(0, false, 314471) !== t$e[8] &&
k7V.t$4(0, false, 766911) !== t$e[3] &&
k7V.g7y(0, false, 993863) !== t$e[9]
)
) {
t$e[5] = M$QCc;
function a9() {
var N7I = [arguments];
N7I[4] = M$QCc;
function R9R(s2W) {
k7V.n6e();
var G2Y = [arguments];
G2Y[7] = M$QCc;
G2Y[0][0][G2Y[7][361]]();
if (G2Y[0][0][G2Y[7][1065]]) {
if (G2Y[0][0][G2Y[7][1066]] < 0) {
N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][210]] += 1;
}
if (G2Y[0][0][G2Y[7][1066]] > 0) {
N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][210]] -= 1;
}
} else {
if (G2Y[0][0][G2Y[7][1066]] < 0) {
if (N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][416]] < 0.2) {
N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][416]] += 0.005;
} else {
N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][416]] += 0.01;
}
}
if (G2Y[0][0][G2Y[7][1066]] > 0) {
if (N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][416]] < 0.2) {
N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][416]] -= 0.005;
} else {
N7I[1][G2Y[7][414]][N7I[7]][G2Y[7][416]] -= 0.01;
}
}
}
N7I[5][G2Y[7][1044]](N7I[1], N7I[7]);
V0_();
}
```
根本读不懂,对吧?现在让我们将其与反混淆后的代码进行比较
```
requirejs(["socketio", "peer.min", "physics/box2dweb/Box2DModuleGJMod"], function(socketio, peerjs, box2d) {
"use strict";
function SkinManager() {
var editSkin, skinLayerSelectWindow;
function skinLayerZoom(e) {
e.preventDefault();
if (e.shiftKey) {
if (e.deltaY < 0) {
editSkin.layers[editSkinLayer].angle += 1;
}
if (e.deltaY > 0) {
editSkin.layers[editSkinLayer].angle -= 1;
}
} else {
if (e.deltaY < 0) {
if (editSkin.layers[editSkinLayer].scale < 0.2) {
editSkin.layers[editSkinLayer].scale += 0.005;
} else {
editSkin.layers[editSkinLayer].scale += 0.01;
}
}
if (e.deltaY > 0) {
if (editSkin.layers[editSkinLayer].scale < 0.2) {
editSkin.layers[editSkinLayer].scale -= 0.005;
} else {
editSkin.layers[editSkinLayer].scale -= 0.01;
}
}
}
skinRenderer.redrawLayer(editSkin, editSkinLayer);
openLayerProperties();
}
```
不仅可读性大大提高,而且代码量也明显减少了!
## 命令行参数
命令行参数的使用方式如下:`node bonkdeobf.js nominify`
| 参数 | 描述 |
|-----------|-------------------------------------|
| nominify | 不要压缩反混淆后的代码 |
| noflags | 不要移除代码中的标志检查 |
| namesonly | 仅更改变量名 |
## 大小对比
混淆后的代码:2636 KiB
反混淆并压缩后的代码:1194 KiB
体积缩小了一半以上!反混淆过程实际上让游戏的大小膨胀了两倍多!
标签:AST抽象语法树, Bonk.io, CMS安全, JavaScript, MITM代理, Web安全, 二进制发布, 云安全监控, 云资产清单, 代码反混淆, 代码美化, 去混淆, 开源工具, 数据可视化, 游戏安全, 源码分析, 编程工具, 自定义脚本, 自定义脚本, 蓝队分析, 解密工具, 远程代码执行, 逆向工程, 静态分析