js 返回不刷新_JS逆向Sekiro框架的简单使用

本文介绍了如何使用Sekiro框架进行JS逆向,通过分析请求逻辑,注册自定义接口并解决作用域问题,实现远程调用服务。在过程中,遇到的init方法调用问题通过特殊方式解决,并成功在Postman和Python脚本中获取到数据。
摘要由CSDN通过智能技术生成
JS逆向-Sekiro框架的简单使用 32c0a97eed2701ccd7814c32a8fe5f09.png

夏天到了,小伙伴们多喝水哦~

文章声明

    本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

目标网站

     aHR0cHM6Ly93d3cuaWVzZG91eWluLmNvbS9zaGFyZS91c2VyLzgxNDE0MTYyODc2P3NlY191aWQ9TVM0d0xqQUJBQUFBa01DSU11enlDVkxjOXBOZFRLN2tYa05SbDZhT281U0l0NndqeGI2Z2tLOA==

抓包分析

    开发者模式抓就行了,喜欢用charles的也可以使用charles

945a3f88d304dd4021fcf82634f3e429.png

一张图看下来大佬们应该就知道是什么数据了

f251a6e50eefda12c79e131d6e9ac5c9.png

目标:通过sekiro框架实现数据远程获取 fa85afe1ef26d01e175638b27266a75d.png

参数分析

通过抓包可知,该请求为xhr请求,现在sources面板进行xhr断点,看下请求调用栈

ec1e4a9f05b2e7b810fc9a6aea579f15.png

下好断点,F5刷新页面,发现已经成功断点并获取到详细调用栈

b74e4ba2165b4a94be9c6863e8fa652b.png

将该文件内的js代码全部copy下来,放到webstorm中供后续sekiro调用,这里我将复制出来的代码保存的文件命名为sekiro_test.js,首先将sekiro框架的js文件配置文件配好:github地址:https://github.com/virjar/sekiro看到readme中的这一部分:

74f7eba4018e07d73fb6008fd3759ef8.png

浏览器打开红框中的js文件,并将返回的js代码及蓝框中的js代码内容复制到刚才的sekiro_test.js文件中,如下所示:

99a9d54c8517832e354474143f6f122f.png

配置代码块完成之后,打开chrome的reres插件(reres插件可自行搜索下载),进行js文件替换:

8d354353b246f639fb3b0266eed887bd.png

8f84460719446fba46d706c075822d28.png

配置完成后,取消xhr断点并刷新页面,控制台输出如下:

54552fe4c623908d9b2044ec7f1c8806.png

打开该链接,其中group即为上输蓝框中wss链接里的group参数,cation即为registerAction中的action接口clientTime,发现可以正常输出当前时间,接下来则开始调试sekiro_test.js文件

140749709e045714720086783b84bcbd.png

根据刚才请求的调用栈,发现整个接口的发送逻辑是通过init(config)调用renderMain(config),然后再在renderMain中调用getWorkList(type),而后又通过getWorkList发送ajax请求实现的:

4b11399cbe90dd2cc7872092c0a61f85.png

93cecd3176d119e4a6d5fcce55c7b463.png

9de08263e07fc04091b69e1c13d01b50.png

其中init方法参数config在控制台显示为一个object对象:

ebd28ed5f880613756d8478835bf174f.png

在sekiro_test.js文件中直接使用registerAction注册一个getaData接口,传递resolve和reject参数调用init方法,做如下配置:

c2d21e0d493eefa20dc62bc62af817fa.png

提示代码错误,init方法未找到,因为该方法是在自执行函数中定义的,作用域不同,因此无法调用,此处可通过骚操作来调用,先在外部定义一个init_sekiro对象,然后在自执行函数内部定义init_sekiro = init即可在外部实现调用:

923f6b413fe19fdc53d8270df777812a.png

477e43d114d0411e359561e4cc9a4517.png

770231255d469c3a693b8b53b72db87d.png

记得将 resolve和reject也作为参数传递给renderMain和getWorkList
renderMain(config, resolve, reject){...}

0ee5b68b52db8f3a1459cf2e2c16e7e1.png

getWorkList(type, resolve, reject){...}
在getWorkList中返回数据的位置使用resolve接受数据:

cce277a4eaea52d60e986d74017006a1.png

配置完成后,启动reres插件替换js服务,关闭xhr断点,刷新页面:在console控制台查看输出

459bb600ae2fe2422860f225efc71769.png

在getWorkList中添加两行,看下传递的参数:

9630808ce6335a8bc6e1516ad690e1e1.png

输出结果:

1e9be65aeab31ea1a1b2c5e21e983733.png

因为我们还没有调用client服务,因此resolve为undefined,未避免这种情况,加一个判断即可:

12406417e1d066922a64e7ac8e49341b.png

再次刷新页面,发现没有再报错

8a4e3ef66a00316eaf1846fca1e8f6f5.png

使用postman远程调用试下:

b833b3e363a6879818050511a1e564a8.png

可以正常请求到数据,此时console控制台输出:

cf682de01d7e14117375ac7357287c67.png

到这里就已经实现xhr接口的远程调用了,但是现在看config参数好像不太美观,优化一下,将get请求的参数调整为sec_uid和uid:

2882ceb7d81913903f992d3669944c4d.png

也是可以返回数据的:

dfd35e9f9186ae322fdadc36a4bd1c33.png

python脚本也能正常返回数据:

05f3922e7780a6adeb841b0f609202a6.png

当然,操作过程可能返回的数据是这样的:

4d46107d3a448fed72636703bd7192b6.png

    有可能是接口后台没返回数据,多刷新几次就可以了,毕竟现在的web端手动查看有时候都不返回数据了。

    至此则已实现sekiro框架的远程调用服务,关键点在于找到数据接受和发送的位置,同时修改代码时尽量不影响原网页的运行,如有报错则查看报错位置的传参和返回值,缺啥补啥即可,然后在那个地方实现远程调用,获取数据。

其中文中的group、client、clientId等都可到github上查看具体含义,在我的理解中,sekiro框架在js中的应用在某方面有点类似frida在安卓hook中的应用,都可以在不影响原网页或app运行的过程中,将结果hook下来并实现远程调用,期待后续在安卓群控场景中的应用。最后,欢迎大佬们指正和补充,感谢~ github地址: https://github.com/virjar/sekiro 仅为测试学习,请勿批量采集,如有商业需求可到github上联系原作者virjar。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值