本帖最后由 Aircraftcomman5 于 2024-12-9 15:29 编辑
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关.本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责。
感谢各位大佬的支持和观看
今天讲一个网站是处于响应头部的 sign 参数 逆向
目标网址
aHR0cHM6Ly9zb3VrZS54ZGYuY24vc2VhcmNoP2NpdHlDb2RlPTQzMDMwMCZjYXRlZ29yeUNvZGU9MTIz
第一步:
1.1 打开开发者工具
1.2 分页发包找到指定数据包
第二步:
2.1 点击目标数据包的启动器
2.1 跟栈,此次简单,第一个栈就可以看到sign
第三步:
3.1 分页断点 在目标 sign 处
3.2 可以看到 2 处的值 就是我们要的sign值
3.2 点击 3 到断点指定地点 对比两处sign是否相同
3.3 可以看到两处相同 请求时的也是这里的sign 但值会变化,大家可以自己对比一下,这里节省掉,继续下一步,向上找
第四步:
4.1 分析sign值,在那赋值,谁赋值给谁的
4.2 在第三步时我们看到 sign:d 是我们要的 那d 也就在他上面是d=s.sign
4.3 所以 从 4.2 我们知道了 d 里面存放了 s 的sign值 params 是请求载荷(不需要)
4.4 根据 图里的 1 , 2 , 3 进行 放走断点 再次发包断点 到s处
第五步:
5.1 从第四步 我们知道参数是由 s 传过来的 然后我们 再次分页发包断点 也是直接到了s 定义处
5.2 将s 扣取出 放到 我们js文件中 进行一个分析
5.3 从内向外分析
5.3.1 ------> 0 : “430300” 是个固定值
5.3.2 ------> l 是一个Object
5.3.3 ------> ot 和 Ge 都是方法
5.3.4 传值过程:
先将两个对象------>传入Ge方法返回值------>传入ot 然后将最终结果赋值给s变量
第六步:
6.1 我们找到了位置
6.2 分析了 d 的由来
6.3 分析了s 的组成
6.4 我们就可以开始扣取加密函数,来获取我们的的sign值
第七步:
7.1 在Code中新开一页js文件(临时的只是为了方便查看所需内容)
7.2 复制这一页代码 粘贴到其中(可以折叠代码快速查看)
7.3 搜索我们断点位置的关键字方便在js文件的代码中快速定位
7.3.1: 比如: “cityCode: o” , d = s.sign(位置要与浏览器一致)
7.4 我们查看 第五步 分析的代码结构 得知:
7.4.1 ot函数 和 Ge函数 (寻找方式一样)
7.4.2 代码整合运行调试,查看下一步报错(报错很关键),到这里我们运行,会有报错提示,有些函数未定义,所以我们就缺什么补什么
7.4.3 定位到为止之后发现是u.a 从u里面点出来的,那我们在浏览器中找到这个位置,查看u里面是什么,
在浏览器中 1的位置 搜索定位,可以发现有多个,在2的位置切换到我们需要的目标位置上,分页断点到目标位置上,进行分析
7.5 我们将鼠标放在u身上可以查看内容发现里面有a 他的内容是一个n函数,我们可以从2 进入到这个a 的地方,进行查看
7.5.1 我们可以在此处分析 1 位置是 a我们不做细致分析主要看2,可以看到是个模块,
那么初步我们就知道:(1)有加载器、(2)多文件或单文件webpack,
可在 3的位置到最顶部查看也就4的位置它属于webpack类的其中一种(这里讲解的不清晰,
希望大佬们可以给我提提建议,让我多学习学习)
7.5.2 准备三个文件(为了程序可以快速运行不卡顿,页面整洁效果)
(1) 加载器的文件(加载器在这不讲解,可以去参考有关文章)
(2) 模块存放文件
(3) 环境文件(很少,在这也不讲解,可以去参考有关文章)
(4) 按照图片里面的顺序,进行一个创建文件,导入文件,为后续扣取代码做准备。
(5) 加载器和环境我已经填充好(剩余加载器未导出)所以我在本地操作。
第八步:
8.1 其中1导出加载器到window(全局), 2打印加载时的模块便于查看
8.2 返回到我们刚开始报错的u 的位置开始扣取,扣取u我们需要找到它的定义处
8.2.1 在第八步我们保存了一个临时文件用于我们查找,双击u 向上找(因为要先定义后使用)我们就要找到他在那定义的
8.2.2 扣取出来放在我们的调试的文件里,还需要再头部定义window,因为加载器导入了window里本地需要定义后使用,我们再次运行
8.3 可以看到这次报错是缺少了模块,而且在第九步导出加载器时同时定义了打印模块,现在排上了用场,
通过图片分析让我们知道了缺失那个模块而报错,复制被打印的模块全局搜错寻找。
8.3.1 在浏览器中根据1、2、3步骤我们找到了需要模块,但是猜测它有可能模块嵌套模块
导致浪费时间,所以将整个文件扣取下来放到之前创建的模块文件中,这样如果有嵌套就不需要担心少扣取
(弊端:需要补环境、运行速度慢、有些模块用不到),然后运行
8.3.2 然后很高兴的看到报错换了,Ye,那我们就定位到报错的位置查看那句代码报错,找到之后我们返回到浏览器,
注:我们的断点从未取消它还在u哪里也就是9.2.1步骤
8.3.3 搜索关键字,然后放掉u断点,让断点端在Ye处,在2处查看Ye内容,
跟之前的u查看方法一致但为了节省时间就跳过,直接找他定义处
8.3.4 扣取下来放入主代码里格式与u一致直接改后的图片,再次运行,看报错
8.3.5 可以看到报错换了这次是Je 内容查看然后去找位置跟前两个函数扣取一样,
所以省略掉,不做讲解只放流程。
8.4 将Je 扣取完成后,紧接着就报错,不过好在,打印了加载的模块,复制到浏览器里搜索
8.4.1 将整个代码文件复制下来放入模块文件里,返回调试代码运行测试
第九步
9.1: 代码最后放个debugger 来调试没有报错并且,输出了结果
总结:
1. 首先找了位置
2. 分析参数
3. 扣取加密函数
4. 解决了每个报错信息
5. 可以给自己放松一下,欣赏结果带给我们的成就感
最后,文章哪里有不足之处,还请各位大佬多多提出宝贵的意见,感谢各位的观看,感谢各位大佬的支持。
|