文章总结: 本文介绍了阿里云盾JS加密231版本的反混淆技术,重点分析了其两种反调试机制:代码格式化检测和控制台检测。作者提供了绕过方法:对反混淆后的代码进行压缩以绕过格式化检测,以及在反混淆JS第一行添加debugger代码并在滑动滑块前关闭控制台来绕过控制台检测。文章还详细介绍了作者开发的一系列反混淆插件,包括void去除、三目表达式处理、if-else转switch等,并展示了反混淆前后的代码对比效果。
综合评分: 90
文章分类: 逆向分析,代码审计,WEB安全,漏洞分析,安全工具
阿里231反混淆
原创
逆向狗都不学
逆向狗都不学
2025年8月27日 11:26
广东
声明
本文仅供学习交流使用, 如侵立删!
目标JS
aHR0cHM6Ly9nLmFsaWNkbi5jb20vQVdTQy9maXJleWVqcy8xLjIzMS4yMy9maXJleWVqcy5qcw==
代码格式化检测
将加密JS复制到本地
对其进行格式化
编写替换规则
将服务器下发的加密JS替换成本地JS
滑动滑块后
显示
将本地代码压缩
滑动滑块后
成功通过
说明有代码格式化检测
导致滑块验证失败
控制台检测
打开控制台
滑动滑块后
验证失败
如果在滑块显示后,滑动滑块前
关闭控制台,可成功通过
其他情况下
都会验证失败
说明有控制台检测
导致滑块验证失败
反混淆验证
对加密JS进行反混淆后
需要验证反混淆插件是否反混淆成功
如果反混淆后的代码不能正常运行
导致加密失败
需要对其反混淆插件进行适当的修改
所以反混淆验证至关重要
由于有代码格式化检测与控制台检测
导致反混淆验证异常困难
一般情况下
就需要分析加密JS代码
进行检测绕过
但是ali加密JS代码如果未能进行反混淆
是非常难分析和调试的
所以需要在不分析加密JS代码的情况下
绕过控制台检测与代码格式化检测
实现对反混淆代码的验证
代码格式化检测绕过
对代码进行反混淆后
将反混淆的代码压缩
这样就可以绕过代码格式化检测
控制台检测绕过
经过多次测试
发现控制台检测是在滑动滑块时进行检测收集的
所以可以在反混淆JS的第一行添加debugger代码
在访问触发滑块网址之前
先打开控制台
然后访问触发滑块网址
如果反混淆后的JS替换成功
那么就会触发debugger
然后在滑动滑块前
关闭控制台,滑动滑块
最后在在抓包工具中
查看滑块验证
通过这些方式
就可以在不逆向分析代码的情况下
绕过控制台检测与代码格式化检测
验证反混淆插件是否反混淆成功
反混淆插件
针对231加密JS
我编写的反混淆插件有
void去除
三目表达式提取优化
三目表达式转if else
if else转switch
逗号表达式还原
自执行函数变量重命名
删除自执行函数
多重switch压缩成一重
虚假分支去除
赋值跳转case节点合并
赋值跳转与if判断跳转case节点合并
switch代码提取
字符变量+=拼接字符值生成
split_reverse_join字符串生成
while循环字符解密
经过这些反混淆插件的处理
231的加密JS代码就和正常未混淆代码差不多了
当然还有可优化的地方
比如 重复赋值变量处理 这些
每个人的反混淆思路不一样
以上反混淆插件是个人理解编写
仅供参考
if else转switch
可以看我之前在B站出的视频
BV1kp421276S
讲下与227不同之处
在231中
在不是switch转换相关的if语句中
使用了==判断
如果不进行准确的匹配
按照227思路编写的反混淆插件会对其else进行修改
从而导致反混淆失败
因此,需要添加一个条件
规避这种情况的发生
通过观察发现在不是switch转换相关的if语句中判断的数字都大于50
而switch转换相关的if语句中判断的数字都小于50
因此,将判断表达式中的数字大小
圈定在50以内
即可规避
反混淆结果展示
反混淆前
反混淆后
星球
反混淆代码和一部分反混淆插件已放置星球
欢迎加入知识星球
学习更多的逆向技巧与思路
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:逆向狗都不学 逆向狗都不学《阿里231反混淆》