JS逆向系列18-格式化检测与绕过

admin 2025年3月18日22:45:40评论7 views字数 1584阅读5分16秒阅读模式

0x00 前言

我已经快两个月没更JS逆向系列相关的文章了,有点怀念去年通宵写逆向文的日子了。写这篇文章是因为我早就想研究一下某些代码是如何进行检测代码是否被格式化过,例如rs,所以我向我真的不是蜘蛛公众号号主Dexter要了一份某网站rs检测格式化的代码,并且我也写出了绕过该rs检测格式化的hook脚本,具体看下文。

在此也感谢Dexter师傅提供的测试样本,欢迎大家关注我真的不是蜘蛛公众号。

注:本文提到的绕过脚本为初版脚本,绕过方案只针对本文提出的格式化检测方式,不代表本脚本能绕过所有的格式化检测的代码。

0x01 正文

其实我在正式研究格式化检测之前也能猜到它们大概是怎么进行检测的,我现在给大家展示一段未格式化的代码:

function_$dZ(){return'x74x6fx53x74x72x69x6ex67';}
JS逆向系列18-格式化检测与绕过

我用toString给大家打印一下这个函数:

JS逆向系列18-格式化检测与绕过

现在我格式化一下代码给大家看一下效果:

JS逆向系列18-格式化检测与绕过

我拿上面这两个输出的内容给大家对比一下:

JS逆向系列18-格式化检测与绕过

我觉得还是很直观的,首先我们能看到格式化后toString的内容有换行,也就是n,第二个就是有多余的空格,也可能有t,最明显的就是n和空格,所以代码就可以通过函数toString后的内容去检测代码是否被格式化过,这是我认为最简单的检测方式,所以我写了以下脚本来绕过这种检测方式:

JS逆向系列18-格式化检测与绕过

通过这段代码可以有效绕过这种检测方式,核心部分就是下面这段代码:

if (typeof toString_result == "string") {                toString_result = toString_result.replace(/s/g'');if (toString_result.slice(08) === 'function') {                    toString_result = toString_result.slice(08) + ' ' + toString_result.slice(8);                }            }

我使用replace(/s/g, '')直接替换掉所有的空白字符(包括 n、r、t、空格等),当时写到这儿时我就已经认为可以成功的绕过检测了,但是我发现代码还是会报错,于是我调试对比了一下未格式化时hook和未hook的效果:

JS逆向系列18-格式化检测与绕过

唯一的不同就是hook后function后面没有空格,因为我在代码中删除了所有的空格,所以我需要再给这里加上,于是就有了下面这段代码:

if (toString_result.slice(08) === 'function') {    toString_result = toString_result.slice(08) + ' ' + toString_result.slice(8);}

此时我再重新运行脚本,打印出了cookie,成功绕过格式化检测。

JS逆向系列18-格式化检测与绕过

脚本我依然上传到了Hook_JS库里,脚本地址:https://github.com/0xsdeo/Hook_JS/blob/main/%E5%AE%9E%E7%94%A8%E5%B0%8F%E8%84%9A%E6%9C%AC/%E8%BF%87%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%A3%80%E6%B5%8B.js

使用的话直接将脚本放到目标脚本的最上面即可,不过我还需要再重申一遍:本文提到的绕过脚本为初版脚本,绕过方案只针对本文提出的检测格式化方式,不代表本脚本能绕过所有的格式化检测的代码。

我后来有问过deepseek有没有其他的检测格式化方式,它也给了我一些比较恶心的检测方式,例如:

JS逆向系列18-格式化检测与绕过
JS逆向系列18-格式化检测与绕过

但是我没有细究这些内容,等以后遇到了再去做专门的绕过,所以读者朋友们如果有遇到过不去检测的代码可以直接联系我,我这边再研究一下该如何过。

原文始发于微信公众号(Spade sec):JS逆向系列18-格式化检测与绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月18日22:45:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JS逆向系列18-格式化检测与绕过https://cn-sec.com/archives/3814691.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息