js逆向|某网站超级混淆代码的逆向分析笔记

编程知识 更新时间:2023-05-03 01:30:34

昨天2群里的大佬丢过来一个网站,发现其核心代码被混淆的面目全非,顿感头痛,经过一番捣鼓,终于有点头绪,逆向过程分析如下,全凭运行,仅供参考。

一.网站地址

http://39.101.191.131:8000/

二.抓包分析

打开谷歌浏览器,并按下F12,地址栏输入如下上面的 url,抓包如下:

一个html 和 一个返回数据的接口,看起来非常的简单。

要分析的参数也非常的简单,就一个 cilame 。但当你点击上面的接口,切换到 Initiator 面板时,傻眼了,全部是 eval:

全部是eval,我们在看看第一个html返回的信息:

就一个 script 标签。发现无法格式化代码,将标签内的代码全部复制下来保存到文本里,手动分析,将代码稍微整理后如下:

三.代码分析

在代码中,发现有很多的 s 函数调用,其 实参 为 字面量,对AST熟悉的我,首先想到的是看能不到 得到 s 函数调用后的结果,控制台输入试试:

这样一输入发现了惊喜,那我们将其全部打印出来看看:

for(var i=0; i<400; i++)
{
    s(i) && console.log(i,s(i));
}

控制台运行上面的代码后,发现了蛛丝马迹:

s(245) 和 s(246) 都是 '&cilame=',这很像请求的接口,查找文件中的代码,定位到了这里:

发现后面的那些 

s(246)+s(s(27))(s(s(223))(s(s(95)))),s(58)

字符替换后并没有得到什么可用的信息,是我姿势不对?

那可不可能是 s 函数有问题,我们先hook住代码,在运行时的环境跑下上面的循环试试:

点击上面的 VM,进去后打上断点,再次刷新,程序停在这里:

再次运行上面的循环代码,把s调用打印出来:

依然还是 s(246),在看后面对应的字符串:

多次尝试,看到了熟悉的字符串,这不就是加密结果吗?化简后,其实就是调用了 s('M') 函数,实参是page页数:

四.结果验证

那怎么把 s('M') 函数弄出来呢?代码被混淆的乱七八糟了,这我就不会了,但是为了证明加密的入口就是这个,我决定采用 rpc 的方式来获取结果。

初次尝试,拿不到结果,返回报错:

怎么费劲都拿不到,啥情况,不是这里吗?问过站长本人后,确认是鼠标或者touch事件检测。既然检测鼠标,那我在手机模式下试试:

发现还是拿不到,按道理来说,手机没有鼠标,也就无从检测,那只能是touch事件了,可惜我不会用代码模拟。

那就手动在页面的空白处touch(鼠标点击)下试试,竟然成了:

这就证明了 加密函数确实是 s('M') ,代码分析告一段落。

求助: 如果哪位大神知道 touch事件怎么模拟,欢迎留言

如果你有更好的分析办法,欢迎交流。

后续看能不能把混淆代码给还原了,估计又得掉不少头发,因为这个 s 函数是变化的,字符串回填可能会有一些错误信息。

AD:

欢迎加入我的个人星球,编写了很多有用的插件,只需要稍微有一点js基础即可,对爬虫工程师和前端工程师均有一定的帮助。

更多推荐

js逆向|某网站超级混淆代码的逆向分析笔记

本文发布于:2023-04-29 21:14:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/2adef8ad5d43fae7826405b26698fb20.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:代码   笔记   网站   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 112277文章数
  • 28563阅读数
  • 0评论数