文章目录
一、编码混淆
1.1 Base64 编码
-
编码后的内容组成
- 大写字母:A-Z
- 小写字母:a-z
- 数字:0-9
- 特殊字符:
+
和/
- 结尾可能有
=
-
关键词
btoa
和atob
js
提供的 base64 编码、解码的方法 -
编码 和 解码 示例代码
1.2 Unicode 编码
字符用 \u
开头的两位十六进制数形式表示。
- 解码示例
1.3 十六进制转义
将每个字符的 Unicode 编码值以 \x
开头的两位十六进制数形式表示。
- 解码示例
1.4 URL 编码
对一些特殊字符转换为以 %
开头的编码格式,这种编码方式将非 ASCII 字符和某些特定字符(如 &
, =
, /
等)转换为 URL 安全的字符形式,避免这些字符在 URL 中引起问题,结合其他编码方式,也可以使字符串的某些部分变得不易理解。
- 编码 和 解码 示例
二、ob 混淆
2.1 ob 混淆特征
如图所示通过 obfuscator 生生成了一段标准的 ob 混淆代码,可以观察到 ob 混淆有如下几个明显的特征:
- 函数名和变量名通常以
_0x
或者0x
开头,后接 1~6 位数字或字母组合 - 字符串加密,将字符串转换为16进制、
Base64
或Unicode
编码等形式 - 大多情况有大数组,且有对数组进行移位的操作,伴有关键字:
push
,shift
- 控制流平坦化:一般都是核心的业务代码
2.2 解决方案
-
推荐 v_jstools 和 猿人学 ob 解混淆 工具进行解析。图为 v_jstools 解混淆示例
-
AST 还原代码
-
直接扣取所有代码,利用 hook 定位到关键加密位置,补环境处理
三、js_fuck
3.1 特征
内容仅由 ! [] + () {}
这些符号组成,无法直观的区分代码结构和逻辑,难以调试。
JSFuck 转码符号含义可查阅官网地址:https://jsfuck.com/
3.2 解决方案
-
推荐 v_jstools 工具,进行解密得到结果供参考分析。图为 v_jstools 解析 JSFuck 混淆代码示例:
-
控制台直接运行代码
- 如有报错,点进去即可查看到源码
- 若不报错,则截取部分代码直接运行,主动令其出错
- 如有报错,点进去即可查看到源码
-
单步调试,观察代码做了什么
-
复杂的代码需要根据实际情况,结合上述多种方式~
四、aa 混淆 & jj 混淆
二者都是通过 Js
内置的构造函数 Function
创建自执行匿名函数,将源代码作为函数体执行,或者是通过 eval
执行编码后的代码。
4.1 特征
- aa 混淆
如图,著名的表情包代码
- jj 混淆
4.2 解决方案
- 将混淆代码直接在控制台运行,同
js_fuck
一样处理 - 单步调试,进入虚拟机后可查看到源码
hook Function
或者eval
,源码从arguments
中可以查看到
5、交流群
不会经常刷博客,有需要者可以加本人,搜索 LOVE_SELF_AD_LIFE,进逆向群聊,一起探讨技术