调试网站: aHR0cDovL3d3dy5mYW5nZGkuY29tLmNuL25ld19ob3VzZS9uZXdfaG91c2VfZGV0YWlsLmh0bWw/cHJvamVjdF9pZD1iODdjYjNkMDRmODc4Y2E2
瑞数的整体代码(4代为例)
1、直接请求得到的js 有index.html界面上的 script
2、meta content(计算eval的js)
3、scripts[0] 中的 **.dfe1675.js 是 iso-8859-1
编码的
4、scripts[1] 是通过自执行得到js 字符串,通过eval进行执行得到cookie的过程
5.1 整体的代码结构是 初始的大数组
5.2 定义一些函数,这些函数将会被eval内部的js进行调用
5.3 控制流代码,进行判断环境检测,并得到eval的字符串
偷偷告诉eval js代码在 ret=**.call(**, **)得到
5、scripts[3] 在eval的js有调用
硬钢搭建环境:请求202界面,复制下来,在script前加debugger,用fiddler autoresponse替换这个文件进行调试。
如下图,进行单步调试
图片.1
分析代码,扣代码
由扣出的代码可见,主要执行步骤在最下边的while 控制流,以及最后一个函数内部的多个控制流:
图片.png
1、代码已经抠出来,优先运行补环境,查缺补漏。(从头开始一点一点的补)
1、缺window,补个 window=global;
2、缺document,补个
document={}
图片.png
3、需要document.scripts,定位到浏览器代码,查看长度需要是3,补个
document.scripts = [1, 2, 3]
(暂时)图片.png
4、再运行代码,就大功告成了?不! 并没有,我们在界面上断住这行代码,发现直到最后都断不住到这里,所以感觉还是缺点是什么。
我是通过在控制流断点和webstorm断点单步调试找到的区别,是因为少了一个文件
图片.png
把这里 代码拿出来 补进去,成功运行 打印 window.$_ts,202界面加载的 主要函数就出来了
图片.png
ret=.call(*, **)
**打印出来,就是瑞数的调试逻辑代码(具体操作js基本知识)
网友评论