JS逆向实战案例1——某房地产url动态生成

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除

作者:zhu6201976

一、 反爬分析

url:aHR0cHM6Ly9uZXdob3VzZS4wNTU3ZmRjLmNvbQ==

该站点项目url通过点击JS生成,project_id与生成后的结果完全不同,且通过生成后的结果进行访问、有时效性。例如:project_id=3362,生成结果:0984-18052-9217-2406976066313,最终通过 https://{hostname}/item/0984-18052-9217-2406976066313 进行访问。

如果请求过期url,则返回空结果。为何url需要动态生成呢?

有一种可能,就是防止爬虫程序轻易解析提取数据,对网站造成压力,同时保护网站珍贵的数据不被轻易窃取。当然,动态生成的url,因有时效性,也能防止数据库长期存储和分享。

我们知道,无论再复杂的程序和代码,底层都有严谨的实现逻辑。网站采用BS架构,客户端代码运行在浏览器中,这就意味着,代码是可见的,甚至还能被调试!这对网站开发人员而言,隐藏了巨大的风险。无论客户端代码多复杂、混淆多严重,最终都有被逆向分析的可能,只是时间问题。

既然没有绝对的安全,无法彻底防御风险,那么,只能将客户端程序尽可能复杂化,让爬虫程序难以模拟,或者模拟成本非常高,从而望而生畏,主动放弃。加密算法是复杂化的一个重要途径,按时间分有古代密码学、现代密码学;按实现方式分有自定义算法、通用算法等。

那么,它是如何实现的呢?采用了什么样的加密算法?

1. 首先,访问项目首页,返回document文档,项目通过a标签进行项目列表展示。

a标签属性id即project_id,它通过绑定对应的点击事件函数reurl(this),点击后a标签作为参数进行传递,最后JS生成加密结果,再给a标签设置href属性实现url的动态生成。

a标签点击前:

a标签点击后:

2. 其次,在项目的首页,添加了大量待执行JS外链。

如图所示:

点击事件函数reurl大概率在上述外链JS中。依次访问上述JS外链,并在返回的JS中全局搜索关键词reurl,成功定位到文件lanrenzhijia.js。

项目详情url动态生成逻辑就在此处。

3. 加密逻辑都是在虚拟机中执行的。

function reurl(a) {a.href = "/item/" + recode(a.id)
}
;

recode函数具体实现:

function recode(a) {var n = nscaler(a);var c = SetObjNum(a.length);var d = SetObjNum(a.length);n = parseInt(n) + parseInt(d);var b = $("#iptstamp").val();b = nscaler(b.toString());return c + "-" + n + "-" + d + "-" + b
}

nscaler函数具体实现:

function nscaler(a) {var b = "";$.each(a, function(i, e) {switch (e) {case "0":b += "0";break;case "1":b += "2";break;case "2":b += "5";break;case "3":b += "8";break;case "4":b += "6";break;case "5":b += "1";break;case "6":b += "3";break;case "7":b += "4";break;case "8":b += "9";break;case "9":b += "7";break}});return b
}

这个函数通过古代密码学凯撒加密,对输入的数字依次进行偏移,从何达到简单加密的结果。

setObjNum函数具体实现:

function SetObjNum(n) {var a = "";for (var i = 0; i < n; i++)a += Math.floor(Math.random() * 10);return a
}

这个函数通过简单的随机数,对结果进行进一步的混淆。

iptstamp变量来源:

在document文档中定义,是一个时间戳。

通过上述凯撒加密、随机数、时间戳拼接后,得到最终结果:/item/0984-18052-9217-2406976066313

那么,服务端是如何识别加密结果并做到过期处理的呢?

nscaler函数是加密算法的核心也是服务端能够还原的关键,对于每个数字,偏移量是固定的。所以服务端可以根据偏移量,依次减法,即可还原原始project_id。而iptstamp时间戳是判断url失效的关键。

当然,最后我们扣取整理的JS代码,不一定能够正常运行,需要根据代码逻辑,适当修改调整,以下是整理后的最终可执行JS代码:

function SetObjNum(n) {var a = "";for (var i = 0; i < n; i++)a += Math.floor(Math.random() * 10);return a
}function nscaler(a) {var b = "";// $.each(a, function(i, e) {for (let i = 0; i < a.length; i++) {switch (a[i]) {case "0":b += "0";break;case "1":b += "2";break;case "2":b += "5";break;case "3":b += "8";break;case "4":b += "6";break;case "5":b += "1";break;case "6":b += "3";break;case "7":b += "4";break;case "8":b += "9";break;case "9":b += "7";break}}return b
}function recode(a, b) {var n = nscaler(a);var c = SetObjNum(a.length);var d = SetObjNum(a.length);n = parseInt(n) + parseInt(d);// var b = $("#iptstamp").val();b = nscaler(b.toString());return c + "-" + n + "-" + d + "-" + b
}function reurl(a, b) {let a_href = "/item/" + recode(a.id, b);return a_href;
}var ret = reurl({"id": '3362'}, 1704894044656);
console.log(ret);

二、 完整代码

项目已开源,请访问github获取,期待你的一键三连、star、交流。

github项目地址:GitHub - zhu6201976/newhouse20240111: JS逆向实战案例1——某房地产url动态生成

项目运行完整截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql清空并重置自动递增初始值

需求&#xff1a;当上新项目时&#xff0c;测试环境数据库导出来的表id字段一般都有很大的初始递增值了&#xff0c;需要重置一下 先上代码&#xff1a; -- 查看当前自动递增值 SHOW CREATE TABLE table_name; -- 重建自动递增索引&#xff08;可选&#xff09; ALTER TABLE t…

Spring - 如何控制多个 AOP 切面执行顺序?

众所周知&#xff0c;Spring 声明式事务是基于 AOP 实现的&#xff0c;那么&#xff0c;如果我们在同一个方法自定义多个 AOP&#xff0c;我们如何指定他们的执行顺序呢&#xff1f; 三种解决方案 1、通过实现 org.springframework.core.Ordered 接口 Component Aspect S…

Vue-13、Vue绑定css样式

1、绑定css样式字符串写法&#xff0c;适用于&#xff1a;样式的类名不确定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"tex…

上海市委网信办技术沙龙|美创科技分享数据流动下的安全应对

为有效提升上海市党政机关和重点单位的技术能力与水平&#xff0c;1月11日&#xff0c;上海市委网信办组织开展以“数据安全治理与合规流动经验分享”为主题的第三十二期网络安全技术沙龙。全市26家党政机关和重点单位相关网络安全技术人员参加此次活动。 美创科技作为上海市委…

关于git删除仓库中原本应该忽略的文件的研究

开门见山&#xff0c;先抛出一个结论&#xff1a; 任何被提交到远程仓库中的数据&#xff0c;都不能被彻底删除&#xff0c;只要提交上去了&#xff0c;就会永远留存。 任何被提交到远程仓库中的数据&#xff0c;都不能被彻底删除&#xff0c;只要提交上去了&#xff0c;就会…

三、04 nginx负载均衡

目录 简介1、准备三台主机且都安装了ngix2、先配置第一个服务主机配置文件nginx.conf制作页面写入页面内容检测语法&重启nginx查看第一个服务器再用同样样的方法 搭建第一个web 服务即可可以使用scp 直接复制 第一个web 服务器的文件配置文件第二个页面的 html 代码 配置代…

分别取出一个时间序列中的年份,月份和日期

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 只留下时间序列中 各行元素的年、月或日 结果的数据类型是序列 Series.dt.year Series.dt.month Series.dt.day [太阳]选择题 以下关于代码输出结果的说法中正确的是? import pandas as pd ts…

“超人练习法”系列09:耶克斯–多德森定律

01 你现有水平和学习风格 搞明白自己是个大事&#xff0c;搞不明白就糊涂一辈子。 首先&#xff0c;要弄清楚自己现在是个啥水平&#xff0c;有啥技能可以拿出来的&#xff0c;然后再定个目标&#xff0c;知道自己想往哪方面努力。 你擅长的学习方式是啥呢&#xff1f;是那种…

第十五届蓝桥杯单片机组备赛——独立键盘矩阵键盘

文章目录 一、按键原理二、独立键盘&矩阵键盘2.1 独立按键2.2 矩阵键盘 一、按键原理 原理很简单&#xff0c;当我们没有按下SW2时&#xff0c;由于上拉电阻得作用&#xff0c;使得输入引脚得信号为高电平&#xff0c;当按下按键后&#xff0c;引脚直接接地&#xff0c;输入…

虹科分享 | PCAN工具:强大的CAN通讯解决方案,你了解多少?

导读&#xff1a;在当今的汽车和工业自动化领域&#xff0c;可靠的通讯系统至关重要&#xff0c;PCAN工具为这些应用提供了强大的支持。本文将介绍PCAN工具的功能、应用和优势&#xff0c;以帮助您根据实际需求选择合适的工具和配件。 PCAN 网络允许 PCAN 应用程序&#xff08…

redis原理(二)数据结构

redis可以存储键与5种不同数据结构类型之间的映射&#xff1a; String类型的底层实现只有一种数据结构&#xff0c;也就是动态字符串。而List、Hash、Set、ZSet都由两种底层数据结构实现。通常我们把这四种类型称为集合类型&#xff0c;它们的特点是一个键对应了一个集合的数据…

【MATLAB】【数字信号处理】产生系统的单位冲激响应h(t)与H(z)零极点分布

一、实验目的与要求 产生h(t) 与H(z) 零极点分布 二、实验仪器 微机&#xff0c;仿真软件MATLAB 2022a 三、实验内容与测试结果 1.已知描述连续系统的微分方程为y(t)5y(t)6y(t)2x(t)8x(t) &#xff0c;计算系统的单位冲激响应h(t) 程序如下&#xff1a; clear all; ts0;…

JavaScript采集各大电商平台关于预制菜酸菜鱼销售量

因为我喜欢吃酸菜鱼&#xff0c;但是自己弄又弄不来&#xff0c;想从网上找找看看&#xff0c;但是种类多&#xff0c;自己逐个选择又太浪费时间。索性利用自己专业爬虫知识&#xff0c;一边检验我最近代码水平&#xff0c;另一方面还能选择到满意的年货。过去写个各大平台预制…

centos7 arm服务器编译安装gcc 8.2

前言 当前电脑的gcc版本为4.8.5&#xff0c;但是在编译其他依赖包的时候&#xff0c;出现各种奇怪的问题&#xff0c;会莫名其妙的中断编译。本地文章讲解如何自编译安装gcc&#xff0c;替换系统自带的gcc。 环境准备 gcc 需要 8.2&#xff1a;下载地址 开始编译 1、解压gcc…

医疗器械网络安全风险评定CVSS打分

为了完成医疗器械软件的网络安全风险评定相关文档&#xff0c;需要进行CVSS评分&#xff0c;这个评分对于第一次做的人来说感觉还是有些迷惑的&#xff0c;查了一些资料&#xff0c;留作参考。 CVSS 指的是 Common Vulnerability Scoring System&#xff0c;即通用漏洞评分系统…

QLExpress和Groovy对比

原理 Groovy groovy基于JVM运行。 编译时&#xff1a;将源文件编译成class文件后&#xff0c;用java的classLoader加载&#xff1b;运行时&#xff1a;直接用groovy classLoader加载 QLExpress QLExpress将文本解析成AST&#xff0c;用java对象表达后执行。 特点 Groo…

C++命名空间的using声明

在前边的C讲解中&#xff0c;使用输入输出流cin和cout前要加std::&#xff0c;每次前边都要加就会很麻烦。解决这个问题&#xff0c;我们就要了解一下命名空间和using声明。  命名空间会限定作用域具体格式及使用参照C入门讲解命名空间&#xff0c;上边的cin和cout就是声明在s…

大屏项目:react中实现3d效果的环形图包括指引线

参考链接3d环形图 3d效果的环形图 项目需求实现方式指引线&#xff08;线的样式字体颜色&#xff09; 项目需求 需要在大屏上实现一个3d的环形图&#xff0c;并且自带指引线&#xff0c;指引线的颜色和每段数据的颜色一样&#xff0c;文本内容变成白色&#xff0c;数字内容变…

最值得推荐的10个免费PDF转Word的方法

PDF转Word是一项很常见的操作&#xff0c;将PDF文件转换为Word文档可以方便我们对文件进行编辑和修改&#xff0c;而且Word格式也更加好打印。 最值得推荐的10个免费PDF转Word的方法 PDF 文件格式在很多场合都被广泛使用&#xff0c;但有时候我们需要修改 PDF 文件内容并保存&…

抖店入驻+运营全方位指导,开店篇!无货源/有货源统统适用

我是王路飞。 关于抖店的入驻和运营教程&#xff0c;准备出一个比较详细、系统的全方位指导内容&#xff0c;感兴趣的可以持续关注下。 不管你做的是无货源还是有货源模式&#xff0c;核心思路都是一样的&#xff0c;统统适用。 这篇文章&#xff0c;先给你们分享下抖店的入…