关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
这篇文章 爬虫神器|这是我过Debugger检测最简单的方法,没有之一 简单的介绍了 Reqable 工具的使用,本文再次介绍下 它的 脚本功能。
需要分析的网站:
https://www.flyscoot.com/en
通过多次抓包分析,发现它的核心js是动态的,至少变量名是经常在变化的,如第一次抓包的js:
而清空缓存后,再次抓包,又变成这样了:
我们知道,混淆的js,调试起来非常的痛苦,能不能给它简单的还原一下,将还原后的代码替换再调试?
1.先从星球下载还原的AST文件:
https://t.zsxq.com/12dsy8slw
2.打开 Reqable 工具,确保可以正常抓包,然后打开 它的脚本功能:
1.右键点击上面的按钮,选择 新建脚本 :
2.编辑脚本,改写响应 :
3.具体的改写如下:
- def onResponse(context, response):
- # Update status code
- # response.code = 404
-
-
- # APIs are same as `onRequest`
- if "https://www.flyscoot.com/g-Then-And-meeting-beding-O-Scena-Quarre-allowt-" == context.url:
- print ("Inject Success!")
-
-
- # Done
- return response
先判断,后打印,看看是否能成功:
成功打印了 "Inject Success!",说明注入成功了。
4.再次编辑脚本,将动态的混淆代码进行还原,然后再替换:
- # API Docs: https://reqable.com/docs/capture/addons
-
-
- from reqable import *
- import os
-
-
- def onRequest(context, request):
- # Print url to console
- # print('request url ' + context.url)
-
-
- # Update or add a query parameter
- # request.queries['foo'] = 'bar'
-
-
- # Update or add a http header
- # request.headers['foo'] = 'bar'
-
-
- # Replace http body with a text
- # request.body = 'Hello World'
-
-
- # Map with a local file
- # request.body.file('~/Desktop/body.json')
-
-
- # Convert to dict if the body is a JSON
- # request.body.jsonify()
- # Update the JSON content
- # request.body['foo'] = 'bar'
-
-
- # Done
- return request
-
-
- def onResponse(context, response):
-
- # Update status code
- # response.code = 404
-
-
- # APIs are same as `onRequest`
- if "https://www.flyscoot.com/g-Then-And-meeting-beding-O-Scena-Quarre-allowt-" == context.url:
- print ("Inject Success!")
- with open("C:\\Users\\admin\\Desktop\\0925\\ob.js","w",encoding = "utf-8") as fp:
- fp.write(str(response.body))
- os.system("node C:\\Users\\admin\\Desktop\\0925\\main.js C:\\Users\\admin\\Desktop\\0925\\ob.js C:\\Users\\admin\\Desktop\\0925\\ok.js")
- response.body.file('C:\\Users\\admin\\Desktop\\0925\\ok.js')
- return response
代码说明:
- with open("C:\\Users\\admin\\Desktop\\0925\\ob.js","w",encoding = "utf-8") as fp:
- fp.write(str(response.body))
这是将响应的混淆js写入到 ob.js 文件中,因为 response.body 是 字节类型,因此需要先转成字符串才可以。
os.system("node C:\\Users\\admin\\Desktop\\0925\\main.js C:\\Users\\admin\\Desktop\\0925\\ob.js C:\\Users\\admin\\Desktop\\0925\\ok.js")
调用 os.system 命令,将其还原,当然,先确保该目录已安装 babel库。
response.body.file('C:\\Users\\admin\\Desktop\\0925\\ok.js')
将响应的结果替换成还原后的文件。我们来看看效果:
从日志窗口可以看到,确实进行了处理,看看网页上的代码:
可以确认,是替换后的js,nice!
基本上后续替换动态的混淆js,也就是这套路。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
下面的课程是我和 风佬一起开的,大家有需要的可以咨询我,相比基础课,新增了魔改nodejs,AST反混淆进阶,小程序逆向及部分补环境的内容。现在优惠价 2599元,还送一年AST 入门与实战 知识星球,先到先得。