AST还原技术专题:一键处理obfuscator混淆代码后的扫尾工作
使用obfuscator工具生成混淆代码
1.打开混淆工具的在线地址:
https://obfuscator.io/
2.代码混淆前如下,如图所示:
3.点击 Obfuscate 按钮,将示例代码进行混淆。
4.混淆后的代码保存,使用星球里的一键解混淆脚本进行还原。
5.还原后的代码大致如下,大家还原后的代码只是变量名不一样罢了:
function hi() {var _0x307455 = function () {{var _0x1e101d = true;return function (_0x1cd74e, _0x16dad5) {{var _0x1250e0 = _0x1e101d ? function () {{if (_0x16dad5) {{var _0x44e987 = _0x16dad5["apply"](_0x1cd74e, arguments);_0x16dad5 = null;return _0x44e987;}}}} : function () {};_0x1e101d = false;return _0x1250e0;}};}}(),_0x304d95 = _0x307455(this, function () {{var _0x4a9a61 = function () {{var _0x527fd6 = _0x4a9a61["constructor"]("return /\" + this + \"/")()["constructor"]("^([^ ]+( +[^ ]+)+)+[^ ]}");return !_0x527fd6["test"](_0x304d95);}};return _0x4a9a61();}});_0x304d95();var _0x10ac23 = function () {{var _0x653565 = true;return function (_0x1bdd5d, _0x5040c3) {{var _0x100ba7 = _0x653565 ? function () {{if (_0x5040c3) {{var _0x549fd3 = _0x5040c3["apply"](_0x1bdd5d, arguments);_0x5040c3 = null;return _0x549fd3;}}}} : function () {};_0x653565 = false;return _0x100ba7;}};}}();(function () {_0x10ac23(this, function () {{var _0x26fc8f = new RegExp("function *\\( *\\)"),_0xf7d7bc = new RegExp("\\+\\+ *(?:[a-zA-Z_$][0-9a-zA-Z_$]*)", 'i'),_0x450156 = _0x4cd1ad("init");if (!_0x26fc8f["test"](_0x450156 + "chain") || !_0xf7d7bc["test"](_0x450156 + "input")) {_0x450156('0');} else {_0x4cd1ad();}}})();})();var _0x217c41 = function () {{var _0x40159b = true;return function (_0x5f416c, _0x233990) {{var _0x45c84c = _0x40159b ? function () {{if (_0x233990) {{var _0x1c4feb = _0x233990["apply"](_0x5f416c, arguments);_0x233990 = null;return _0x1c4feb;}}}} : function () {};_0x40159b = false;return _0x45c84c;}};}}(),_0x2f6a3f = _0x217c41(this, function () {{var _0x394d50 = function () {{var _0x4146cf;try {_0x4146cf = Function("return (function() " + "{}.constructor(\"return this\")( )" + ');')();} catch (_0x1d99d4) {_0x4146cf = window;}return _0x4146cf;}},_0x4e041d = _0x394d50(),_0x1590e0 = _0x4e041d["console"] = _0x4e041d["console"] || {},_0x304c65 = ["log", "warn", "info", "error", "exception", "table", "trace"];for (var _0x4bae25 = 0; _0x4bae25 < _0x304c65["length"]; _0x4bae25++) {{var _0x2196a9 = _0x217c41["constructor"]["prototype"]["bind"](_0x217c41);var _0xed7fc7 = _0x304c65[_0x4bae25];var _0x10e1d7 = _0x1590e0[_0xed7fc7] || _0x2196a9;_0x2196a9["__proto__"] = _0x217c41["bind"](_0x217c41);_0x2196a9["toString"] = _0x10e1d7["toString"]["bind"](_0x10e1d7);_0x1590e0[_0xed7fc7] = _0x2196a9;}}}});_0x2f6a3f();console["log"]("Hello World!");
}hi();function _0x4cd1ad(_0x497b07) {function _0x17e787(_0x487201) {if (typeof _0x487201 === "string") {return function (_0xc22f0d) {}["constructor"]("while (true) {}")["apply"]("counter");} else {if (('' + _0x487201 / _0x487201)["length"] !== 1 || _0x487201 % 20 === 0) {(function () {return true;})["constructor"]("debu" + "gger")["call"]("action");} else {(function () {return false;})["constructor"]("debu" + "gger")["apply"]("stateObject");}}_0x17e787(++_0x487201);}try {if (_0x497b07) return _0x17e787;else _0x17e787(0);} catch (_0x1c05f1) {}
}setInterval(function () {_0x4cd1ad();
}, 4000);
代码分析
代码很长,但是不要慌,稍微有点耐心即可。下面来逐步分析:
定义了一个 hi 函数,无实参,无返回值。
调用了上面定义的 hi 函数。
定义了一个 _0x4cd1ad 函数,有实参,有返回值
使用 setInterval 函数定时执行 上面定义的 _0x4cd1ad 函数
从前往后开始分析,第一步,先来看看这个 hi 函数:
无形式参数,无返回值
函数里面又定义了一堆函数,如 _0x307455、_0x304d95...等
有些是自执行函数,有些则是定义后马上就调用了,只调用了一次
console["log"]("Hello World!"); 这是函数的最后一行代码
在星球里曾多次强调,一个函数,主要关注它
有没有改变实参
有没有改变全局变量
有没有返回值
经过仔细分析后可以发现, _0x307455、_0x304d95...这样的函数啥也没改变,纯粹是增加代码复杂度和阻碍调试或者禁用console的一些功能,那和功能代码没半毛钱关系,因此,可以统统删除。hi 函数化简后就只剩这样了:
function hi() {console["log"]("Hello World!");
}hi();
这样看着就清爽多了哇。
同理,_0x4cd1ad 函数是一个 debugger相关的函数,也是阻碍调试的,与加密无关,也可以进行删,后面的定时执行 一并删除。
到此,整个混淆代码处理后,真正有效的代码就只有这样了:
function hi() {console["log"]("Hello World!");
}hi();
与混淆前的代码一模一样,做到了 100 % 的还原。
AST还原技术专题:一键处理obfuscator混淆代码后的扫尾工作相关推荐
- AST还原技术专题:浅谈去控制流平坦化的思路及方法
一. while-switch结构的控制流 这类平坦化代码很简单,常见于经过obfuscator在线工具混淆后的控制流平坦化.一般代码段不会很长,常见的 switch-case 基本都在10个分支以内 ...
- android 代码签名apk,[Android]混淆代码后生成带签名的apk
Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来. 我们可以从android sdk的tools目录下看到有一个proguard目录.说明具有了代码混淆的功能. 至于如何 ...
- android 控制流混淆 反向,AST混淆实战:仿obfuscator混淆控制流平坦化
混淆效果 混淆前:window = {}; window.atob = function(r) { e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn ...
- 计算机操作系统的备份和快速恢复,计算机操作系统维护中的还原技术分析
计算机操作系统维护中的还原技术分析 人们在日常的生活和工作中,对于计算机应用已经非常普遍,下面是小编搜集整理的一篇探究计算机操作系统维护还原技术的论文范文,供大家阅读参考. 摘 要:在科学技术不断发展 ...
- AST实战|免安装一键还原ob混淆详细使用教程
关注它,不迷路. 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除! 一.环境安装 在nodejs官网下载最新稳定版并安装: 下载地址: htt ...
- JS解混淆-AST还原案例
目录 一.js混淆了解 1.为什么要混淆? 2.常见的混淆模样(ob/sojson/jsfuck/AAencode/jjEncode/eval) 二.AST初步认识 三.解混淆常用的方法 一.js混淆 ...
- 【原创】极验滑块验证:AST还原混淆JS
本文仅供学习交流使用,如侵立删! 极验滑块验证:AST还原混淆JS 操作环境 win10 . mac node14.17 v_jstools reres 分析 极验验证测试:aHR0cHM6Ly93d ...
- 极验第四代滑块验证码破解(一):AST还原混淆JS
极验第四代滑块验证码破解(一):AST还原混淆JS 声明 一.环境安装 二.AST还原混淆JS 1. 需要还原的js代码链接 2. AST还原源码 3. 极验不同js或不同版本还原方式 三.结语 *本 ...
- AST混淆实战|仿obfuscator混淆控制流平坦化(超详细版)
之前写过一篇这样的文章 : JavaScript 代码混淆实战(六):仿obfuscator混淆控制流平坦化,但并没有写过程,在这篇文章里面说明下! 依然以文章里的代码来说明怎么进行控制流平坦化. 混 ...
最新文章
- java获取pdf的页数、内容和缩略图
- hql可以使用distinct吗_香薰精油可以当香水使用吗
- RSA选用小公钥指数(e=3)真的不安全吗?
- csu 1536 Bit String Reordering(模拟 bfs+状态压缩)
- android中sp的意义_两分钟理解Android中SP与DP的区别
- 你对程序员的误会有多深?
- PageBean代码,分页
- mysql 锁行语句_mysql 锁表锁行语句分享(MySQL事务处理)
- Ubuntu 16.04 x64 常用软件
- A2 雷达多点触控
- java中cbrt_JavaScript中带有示例的Math.cbrt()方法
- 微信小程序map组件callout与label简单用法
- [UE4]射击产生弹孔:Spawn Decal At Location、Spawn Decal Attached
- 伤害世界稳定服务器,伤害世界哪个服务器好_伤害世界怎么选服务器_牛游戏网...
- 全地形爆破赛小车的制作分享
- 自动化手工操作工具PyAutoGUI :鼠标操作
- UDDI:weblogic下的UDDI及对UDDI的理解
- DES加解密(详细的加密流程)
- 看这里,你要的快速、批量PDF加水印工具!
- java 网校 代码_JAVA代码审计 | 因酷网校在线教育系统