[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
目标网址:
[color=]aHR0cHM6Ly96Yy1wYWltYWkudGFvYmFvLmNvbS93b3cvcG0vZGVmYXVsdC9wYy80YjgwZmE/JnNjbT0yMDE0MDY0Ny5qdWxhbmcucG0uc2VtJmFfa2V5d29yZGlkPTUyNjExNjA1OTc0NCZiZF92aWQ9MTA4MzkwMzg4MTY4NzEzMDIwODcmcGFnZT0y
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
操作步骤:
1. 定位参数
2. 分析参数
3. 分析包
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]
跟栈
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
前言
此次,逆向中,所需参数有三个
[color=],cookie , 时间戳 ,sign
第一步:
1.1 打开目标网址,分页发包,查看所需的数据包,根据图片里的步骤,我们就可以找到 我们所要逆向的
[color=] sign
图片 1.png (278.85 KB, 下载次数: 2)
下载附件
2025-1-10 11:35 上传
1.2 点击启动器,进入最上面,第二个栈,我们开始跟栈找寻
[color=]sign
[color=] (第一个栈断不下来,不过也没必要非要在第一个栈下断,目的是要找到所需参数)
图片 2.png (32.63 KB, 下载次数: 1)
下载附件
2025-1-10 11:37 上传
1.3 进入之后,下断点,根据
[color=]1.1
进行一个分页发包,
在根据图片里的步骤,找寻到目标,虽然找到了,目标参数但是,
周围给予的信息太不明显,所以我们向上跟栈
图片 3.png (62.76 KB, 下载次数: 2)
下载附件
2025-1-10 11:39 上传
第二步:
2.1 根据图中步骤依次进行操作,到达指定位置,在这个过程中,可能会有一些干扰信息但,
经过多次调试,发现,
[color=]sign
到图中所在的栈就消失了,所以猜测
[color=]sign
值可能就是在此处某一步跳转之后完成加密,按照图中步骤,只保留这个断点其余断点释放掉
图片 4.png (82.27 KB, 下载次数: 2)
下载附件
2025-1-10 11:41 上传
2.1.1 分析第上图第四步到第五步的理由,
从图中我们看到,
[color=]4.1
,
[color=]n = this,(this是指当前作用域下,而他里面的值,猜测是某个函数,或变量,或原型,之类赋值给他),
但四处找寻却找不到在哪里,但我们将鼠标放在
[color=]this
上面,看到
[color=] 步骤1
此时
[color=]this
里面指向了
[color=]c,
然后再根据
[color=]步骤2-4
可以看到
[color=]sign
存放在了
[color=]c
里面,
所以就猜测
[color=]sign
就是
[color=] c
里面生成的 但是此时我们所处的位置是在
[color=] c.prototype.__processRequest
也就是
[color=]c
的原型里,但是在这这文件里有没有生成
[color=]sign
,
我们不知道,尽管
[color=]this
里面有
[color=]sign
,但他会不会是在另一个文件里导入进来的,所以就保持怀疑的心继续向上跟栈,到了第五步
图片 5.png (76.55 KB, 下载次数: 1)
下载附件
2025-1-10 11:44 上传
图片 6.png (25.56 KB, 下载次数: 2)
下载附件
2025-1-10 11:44 上传
图片 7.png (29.85 KB, 下载次数: 2)
下载附件
2025-1-10 11:44 上传
2.2 言归正传(第五步处) 保留断点之后进行一次分页发包将断点,
断在此处,加以分析
[color=]2.2.1
我们这次单步调试一步一步走,
参数就在这走的过程中自己就会一一展示出来
图片 8.png (80.64 KB, 下载次数: 2)
下载附件
2025-1-10 11:47 上传
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]
[color=]单步调试
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
第三步:
根据
[color=]2.2
在此处一直单步调试,不要怕麻烦,因为很快就会看到第一个参数的生成
3.1
单步执行到这里,就是其中一个参数
[color=]token
,他的流程我们可以大概知道,
先将
[color=]this.options
赋值给
[color=]e
,在
[color=]return
中进行一个三元表达式,将最终的值给予
[color=]e.token
在返回
图片 9.png (10.22 KB, 下载次数: 2)
下载附件
2025-1-10 11:51 上传
3.2 我们继续单步调试到
[color=]return
看他做了那些操作,
可以看到第一次判断给了一个
[color=]undefiend
,也就是
[color=]false
,然后就走的
[color=]步骤2
,
[color=]a
方法处,
传入了
[color=]S
,是一个字符串,然后我们继续单步调试,就走进了
[color=]a
里面
图片 10.png (14.58 KB, 下载次数: 2)
下载附件
2025-1-10 11:55 上传
图片 11.png (14.09 KB, 下载次数: 2)
下载附件
2025-1-10 11:55 上传
图片 12.png (9.09 KB, 下载次数: 1)
下载附件
2025-1-10 11:56 上传
3.3 分析
[color=]a
可以知道,
[color=]a
里面是个正则表达式,他将浏览器
[color=]cookie
传入进行了某个操作,
选中之后可以看到,是取出了指定的值,在往下就可以看到
[color=]return
处又一个三元表达,
那肯定就是返回了
[color=]t[1]
图片 13.png (28.88 KB, 下载次数: 1)
下载附件
2025-1-10 12:16 上传
图片 14.png (13.01 KB, 下载次数: 2)
下载附件
2025-1-10 12:16 上传
3.4 然后我们继续单步执行,就到了
[color=]3.2
处看到了他将返回的数据进行切分又赋值给了
[color=]e.token
,
最后就是我们要的参数之一
图片 15.png (13.98 KB, 下载次数: 2)
下载附件
2025-1-10 12:16 上传
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
第四步:
4.1我们还是继续单步调试,虽然速度有点慢,但可以清晰的看到每一步
4.2 单步调试一直到这里
[color=]c.prototype.__processRequestUrl
[color=],
在这里面一直执行就会到
[color=]sign
的加密处,
所以我们可以试试向下看,因为这是多次调试出来的,并且,它们都在同一个地方所以直接看到这个地方的结尾
图片 16.png (42.57 KB, 下载次数: 2)
下载附件
2025-1-10 12:20 上传
4.3 上图有些我给它折叠起来了,看着不杂乱,所以我们现在,直接在
[color=]sign
处下段,
然后移动到此断点,查看内容,然后我们将这个包执行完,将此处的
[color=]sign
与发送完毕的包的
[color=]sign
对比,
可以看到内容一致,那么我们就可以确定
[color=] p
就是我们需要的密文,那么接下来我们就开始,扣取代码,
打印出
[color=]sign
图片 17.png (64.59 KB, 下载次数: 1)
下载附件
2025-1-10 12:23 上传
图片 18.png (11.89 KB, 下载次数: 2)
下载附件
2025-1-10 12:23 上传
图片 19.png (24.71 KB, 下载次数: 2)
下载附件
2025-1-10 12:23 上传
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]
代码的扣取和调用
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
[color=]---------------------------------------------------------------------
第五步:
5.1 这里我们还会继续分析代码参数组成以及代码扣取、调用
5.2 我们找到了
[color=]sign
,它是由
[color=]p
生成的,那么就可以知道,
[color=]p
是在某处定义了,所以我们向上找,
因为肯定是先定义后使用,
[color=]步骤2
就是我们要找的
[color=]p
,这得多亏作用域,因为
[color=]p
在
[color=]步骤3
里只有一个,
超出
[color=]步骤3
,就无法使用了,那么可以知道
[color=]sign
使用的就是这个
[color=]p
图片 20.png (37.54 KB, 下载次数: 2)
下载附件
2025-1-10 12:27 上传
5.3 我们扣取出
[color=]p
放到
[color=]Code
里进行对
[color=]p
的分析,扣取完毕后我们返回浏览器,对这个函数
[color=]p
尾部下断点,查看值的生成
图片 21.png (39.26 KB, 下载次数: 2)
下载附件
2025-1-10 12:27 上传
图片 22.png (31.47 KB, 下载次数: 2)
下载附件
2025-1-10 12:27 上传
5.4 下完断点后我们重新分页发包,让断点到此处,我们从内往外看,先看函数的返回值,
然后与
[color=] sign:p
的值进行对比,之后再看传入
[color=]p
的参数,可以看到函数的返回值,与
[color=]sign:p
的值是一致的,
而返回值,所加密的参数已经用红色箭头标记出来
图片 23.png (27.05 KB, 下载次数: 2)
下载附件
2025-1-10 12:31 上传
5.5 我们在来看传入的参数,
[color=]token
我们在单步调试第三步已经说明了它的生成,
这里的
[color=]token
和 第三步的
[color=]token
是一样的,大家有兴趣的可以自己对比对比,
[color=] a
是时间戳,
[color=]s
多次调试时一个固定的字符串,
[color=]n.data
就是我们的表单数据里面的
[color=]page
就是我们当前所在的页数,
他们用
[color=]“&”
连接之后传入到
[color=]5.3
的头部
图片 24.png (45.77 KB, 下载次数: 2)
下载附件
2025-1-10 12:31 上传
5.6 扣取的代码会报错是因为参数的缺少,
而我们在
[color=]5.5
已经分析完毕,所以我们可以自己创建,
也可以回到浏览器扣取,这里我扣取的是浏览器器的小小改动一下就可以用
图片 25.png (86.59 KB, 下载次数: 2)
下载附件
2025-1-10 12:35 上传
图片 26.png (17.82 KB, 下载次数: 2)
下载附件
2025-1-10 12:35 上传
5.7 我们来看一下最终的效果,显然结果是对的,那么到此
[color=]sign
的加密就结束了
图片 27.png (111.38 KB, 下载次数: 1)
下载附件
2025-1-10 12:36 上传
[color=]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[color=]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[color=]
[color=]数据包Cookie分析
[color=]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第六步:
6.1 对于这个站虽然扣取出了代码和加密参数,但如果不是多次调试,和猜想实践,就会造成少扣取,打击信心,命名代码扣了很多,但最后组合,结果不是很理想
6.2 在单步调试第三步我们看到
[color=]token
是由
[color=]Cookie
里面取的,那么我们就知道,在最终代码
[color=]Cookie
是必不可少的
6.3 那么多次调试发现问题出在数据包,我们回到开发者工具,网络界面,在左上角我们清楚当前站的
[color=]Cookie
来看看是不是少东西了,有没有不一样的数据包
图片 28.png (182.12 KB, 下载次数: 2)
下载附件
2025-1-10 12:43 上传
图片 29.png (131.11 KB, 下载次数: 2)
下载附件
2025-1-10 12:44 上传
图片 30.png (71.68 KB, 下载次数: 2)
下载附件
2025-1-10 12:44 上传
6.4 发现又出现了很多不一样的包,我们直接点击第二个来看他的
[color=]载荷、响应、Cookie
,
前两个基本不是很重要,重点就是
[color=]Cookie
发现他返回了
[color=]Cookie
,
我们直接再看第五个数据包也就是我们的目标数据包
图片 31.png (66.19 KB, 下载次数: 2)
下载附件
2025-1-10 12:46 上传
图片 32.png (40.29 KB, 下载次数: 2)
下载附件
2025-1-10 12:46 上传
图片 33.png (70.63 KB, 下载次数: 1)
下载附件
2025-1-10 12:46 上传
[color=]6.4.1 发现在第五个目标数据包中Cookie携带了6.4响应的Cookie并且响应成功,所以就可以知道,在组合代码时,
[color=]6.3响应的Cookie必不可少,既是请求的组成也是加密sign必不可少的参数
图片 34.png (66.6 KB, 下载次数: 2)
下载附件
2025-1-10 12:48 上传
图片 35.png (52.09 KB, 下载次数: 2)
下载附件
2025-1-10 12:48 上传
图片 36.png (85.9 KB, 下载次数: 2)
下载附件
2025-1-10 12:49 上传
6.4.2 而可以看到6.3因为没有携带响应的的cookie,获取的数据是令牌为空
[color=]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[color=]
[color=]总结
[color=]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[color=] 所有的参数都已经分析完毕关键就在于
Cookie
[color=]的获取,
sign
[color=]加密需要,且,请求时也需要携带不然会获取不到数据,从而让我们抓耳挠腮
[color=]
[color=] 同时,在sign加密时要看清载荷的表单数据的格式,不然加密的密文也是不正确
[color=]
另外,还有荷载里面的时间戳也需要放到请求里,不然也会获取数据失败
[color=]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[color=]最后,感谢大家的观看,内容如果有哪里说的不对。
[color=]请各位大佬给我纠正,给我建议,谢谢大家。