「JS 逆向百例」无限debugger绕过,某网站互动数据逆向
yuyutoo 2024-12-23 14:28 3 浏览 0 评论
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
逆向目标
- 目标:某服务网 —> XX互动 —> 我要咨询
- 主页:aHR0cDovL3p3Zncuc2FuLWhlLmdvdi5jbi9pY2l0eS9pY2l0eS9ndWVzdGJvb2svaW50ZXJhY3Q=
- 接口:aHR0cDovL3p3Zncuc2FuLWhlLmdvdi5jbi9pY2l0eS9hcGktdjIvYXBwLmljaXR5Lmd1ZXN0Ym9vay5Xcml0ZUNtZC9nZXRMaXN0
- 逆向参数:
Request Headers:Cookie: ICITYSession=fe7c34e21abd46f58555124c64713513
Query String Parameters:s=eb84531626075111111&t=4071_e18666_1626075203000
Request Payload:{"start":0,"limit":7,"TYPE@=":"2","OPEN@=":"1"}
逆向过程
绕过无限 debugger
我们尝试抓包,打开开发者工具,刷新一下页面,会发现此时页面被断到 debugger 的位置,点击下一步,又会被断到另一个 debugger 的位置,这种情况就是无限 debugger,无限 debugger 存在的意义就是防止一部分人进行调试,但事实上绕过无限 debugger 的方法非常简单,方法也非常多,以下介绍常用的几种绕过方法。
1.Never pause here
在 debugger 位置,点击行号,右键 Never pause here,永远不在此处断下即可:
2. Add conditional breakpoint
同样右键选择 Add conditional breakpoint,输入 false 即可跳过无限 debugger,其原理是添加条件断点,不管前面代码的逻辑是什么,运行到 debugger 的时候必定是 true 才能执行,只需要将其改为 false,那么它就不执行了:
3.中间人拦截替换无限 debug 函数
所谓中间人拦截替换,就是狸猫换太子,将原来的含有无限 debugger 的函数给替换掉,这种方法适用于知道无限 debugger 函数所在的具体 JS 文件,重写 JS 文件,使其不含有无限 debugger 的函数,利用第三方工具将原来的 JS 文件替换成重写过后的文件,这类工具有很多,例如浏览器插件 ReRes,它通过指定规则,可以把请求映射到其他的 URL,也可以映射到本机的文件或者目录,抓包软件 Fidder 的 Auto responder 功能,也可以实现替换。
4.方法置空
直接在 Console 中将无限 debugger 的函数重写置空也可以破解无限 debugger,缺点是刷新后失效,基本上不太常用。
抓包分析
绕过无限 debugger 后,点击下一页进行抓包分析,数据接口类似于:http://zwfw.xxxxxx.xxx.cn/icity/api-v2/app.icity.guestbook.WriteCmd/getList?s=d455731630315957615&t=2491_d51515_1630315979000,Cookie、Query String Parameters 和 Request Payload 的参数需要我们解决。
参数逆向
首先是 Cookie,直接搜索,可以发现在首页的请求中,Set-Cookie 里设置了 cookie 值,那么使用 get 方法请求主页,在 response 里面直接取 Cookie 即可:
Request Payload 的参数经过观察可以发现 start 每一页 +7,其他参数不变
Query String Parameters 的两个参数 s 和 t,是经过 JS 加密后得到的。
全局搜索 s 这个参数,由于 s 太多,可以尝试搜索 var s,可以找到一个 var sig 的地方,这段函数后面有两个比较明显的语句:curUrl += "?s=" + sig; curUrl += "&t=" + t;,不难看出是 URL 拼接语句,s 参数就是 sig,埋下断点,可以看到正是我们要找的参数:
将这段函数 copy 下来进行本地调试,会发现提示 LEx 未定义,直接跟进 LEx.isNotNull 这个函数,将原函数 copy 下来即可:
再次调试,会提示 __signature 参数未定义,全局搜索发现这个值在主页的 HTML 里面可以找到,直接正则表达式提取出来即可。
完整代码
GitHub 关注 K 哥爬虫,持续分享爬虫相关代码!欢迎 star !https://github.com/kgepachong/
以下只演示部分关键代码,不能直接运行!完整代码仓库地址:https://github.com/kgepachong/crawler/
JS 加密代码
isNotNull = function (obj) {
if (obj === undefined || obj === null || obj == "null" || obj === "" || obj == "undefined")
return false;
return true;
};
function getDecryptedParameters(__signature) {
var sig = "";
var chars = "0123456789abcdef";
if (!isNotNull(__signature)) {
var curTime = parseInt(Math.random() * (9999 - 1000 + 1) + 1000) + "" + Date.parse(new Date());
sig = chars.charAt(parseInt(Math.random() * (15 - 15 + 1) + 10)) + chars.charAt(curTime.length) + "" + curTime;
} else {
sig = __signature;
}
var key = "";
var keyIndex = -1;
for (var i = 0; i < 6; i++) {
var c = sig.charAt(keyIndex + 1);
key += c;
keyIndex = chars.indexOf(c);
if (keyIndex < 0 || keyIndex >= sig.length) {
keyIndex = i;
}
}
var timestamp = parseInt(Math.random() * (9999 - 1000 + 1) + 1000) + "_" + key + "_" + Date.parse(new Date());
var t = timestamp;
//LEx.azdg.encrypt(timestamp,key);
t = t.replace(/\+/g, "_");
return {"s": sig, "t": t};
}
// 测试样例
// console.log(getDecryptedParameters("c988121626057020055"))
Python 代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
import execjs
import requests
index_url = '脱敏处理,完整代码关注 GitHub:https://github.com/kgepachong/crawler'
data_url = '脱敏处理,完整代码关注 GitHub:https://github.com/kgepachong/crawler'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
session = requests.session()
def get_encrypted_parameters(signature):
with open('encrypt.js', 'r', encoding='utf-8') as f:
js = f.read()
encrypted_parameters = execjs.compile(js).call('getDecryptedParameters', signature)
return encrypted_parameters
def get_signature_and_cookies():
response = session.get(url=index_url, headers=headers)
cookies = response.cookies.get_dict()
cookie = cookies['ICITYSession']
signature = re.findall(r'signature = "(.*)"', response.text)[0]
return cookie, signature
def get_data(cookie, parameters, page):
payload_data = {'start': page*7, 'limit': 7, 'TYPE@=': '2', 'OPEN@=': '1'}
params = {'s': parameters['s'], 't': parameters['t']}
cookies = {'ICITYSession': cookie}
response = session.post(url=data_url, headers=headers, json=payload_data, params=params, cookies=cookies).json()
print(payload_data, response)
def main():
ck, sig = get_signature_and_cookies()
for page in range(10):
# 采集10页数据
param = get_encrypted_parameters(sig)
get_data(ck, param, page)
if __name__ == '__main__':
main()
相关推荐
- 史上最全的浏览器兼容性问题和解决方案
-
微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...
-
- 平面设计基础知识_平面设计基础知识实验收获与总结
-
CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...
-
2025-02-21 16:01 yuyutoo
- 写作排版简单三步就行-工具篇_作文排版模板
-
和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...
- 写一个2048的游戏_2048小游戏功能实现
-
1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...
- 今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……
-
最近的天气暖和得让很多小伙伴们喊“热”!!! 昨天的气温到底升得有多高呢?你家有没有榜上有名?...
- CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
-
之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...
- 你的自我界限够强大吗?_你的自我界限够强大吗英文
-
我的结果:A、该设立新的界限...
- 行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?
-
行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...
-
- 让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
-
去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...
-
2025-02-21 16:00 yuyutoo
- 今年国家综合性消防救援队伍计划招录消防员15000名
-
记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...
- 一起盘点最新 Chrome v133 的5大主流特性 ?
-
1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...
- 竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使
-
style="text-align:center;"data-mce-style="text-align:...
- 学物理能做什么?_学物理能做什么 卢昌海
-
作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...
-
- 你不知道的关于这只眯眼兔的6个小秘密
-
在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...
-
2025-02-21 16:00 yuyutoo
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)