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安全, 二进制发布, 云安全监控, 云资产清单, 代码反混淆, 代码美化, 去混淆, 开源工具, 数据可视化, 游戏安全, 源码分析, 编程工具, 自定义脚本, 自定义脚本, 蓝队分析, 解密工具, 远程代码执行, 逆向工程, 静态分析