python爬虫 - js逆向解密之破解搜索字段加密

本文详细记录了如何分析一个使用JS加密的搜索接口,从URL变化到JS源码调试,最终找出关键词转义方法的过程。通过前端console和Python实现验证,展示了爬虫在面对复杂JS加密时的解决思路。强调了爬虫技术学习的广泛性和深度,包括前端、安卓、iOS等多方面技能的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某客园目前对全平台做内容审核,怕哪一天给和谐了,所以来csdn作备份

声明

以下内容涉及的平台是我朋友的平台,另外也不存在攻击破解拿商业数据等行为,为了安全着想,部分信息已打码

前言

我朋友给了我一个网站,说他们内部测试用的,要我看下有没有办法爬数据,也就是他们的搜索接口能搞不,这已经是我做反爬开始的第n个爬虫等级测试了

分析

 

习以为常的打开网站,然后就看到下面的界面:

 

 

 

 

 

 

 

 

 

看到了嘛,我填入关键词搜索的时候,url直接就变成了https://xxxxxx.com/index/ioc?q=333630(注意这个网址,如果老手的话,一开始就从这里下手了,此时的话,我就从一开始的逻辑开始一步一步往下吧)

 

也就是说此时此刻,【360】被转成了【333630】,有点意思哈,其实这种的我之前就遇到过,不过为了阐述清楚,我还是从头开始展示我的思路,怎么发现,然后怎么解决的。当然,对于js逆向大佬看这篇文章可就太简单了,那可不,我朋友这平台连js代码混淆都没做的,我都还没用上AST呢

 

继续哈,看他的网站源码,

 

 

 

 

 

 

浏览器自带的抓包工具里也只是直接调用了一个异步请求拿到返回结果而已:

 

 

 

 

并没有发现很奇特的请求,也没有做重定向跳转去中间站获取该值再请求,

 

 

 

找到关键点

那么,多次测试后我得出结论,一定是js生成的。那既然是js生成的话,那就一定有一个触发时间去转输入框里输入的值,根据我上面分析的网站源码,那就只有一种了,当我点击【检索】按钮搜索的时候,触发了一个js事件去转译或者说编译我输入的值

 

js调试

那么就进入js调试了,先全文检索这个异步请求接口:

 

 

 

只有一个文件,点进去再格式化:

 

 

 然后等了好半天才出来,发现js文件并未做混淆,那就好办了,打上断点,顿时发现,卧槽19万行代码,这文件有点大啊,难怪加载这么久:

 

 

 换个词点击搜索再看看js的堆栈跳转:

### Python 爬虫与 JavaScript 逆向工程教程 #### 学习目标 掌握 Python 爬虫中的 JavaScript 逆向工程技术,能够解析并模拟复杂的 Web 请求,处理动态加载的内容。 #### 关键概念和技术 - **JavaScript 执行环境**:为了使 Python 能够执行 JavaScript 代码,可以利用 PyExecJS 或者其他类似的库创建一个 JavaScript 运行环境[^2]。 - **DOM 对象映射**:理解 Python 和 JavaScript 中的数据结构差异对于成功进行 JS 逆向至关重要。例如,在 Python 中 `dict` 类型对应于 JSON 的 object;而 list/tuple 则分别对应 array[^3]。 - **网络请求分析**:使用浏览器开发者工具来捕获和审查 HTTP(S) 流量,特别是关注 POST/GET 请求及其携带的有效载荷(payload),这有助于识别出用于身份验证或其他重要操作的关键参数[^5]。 - **数据解密**:当遇到经过加密传输的信息时,需深入研究其背后的算法原理,并可能借助第三方库完成相应的编码转换工作。 - **模拟登录流程**:通过 requests 库发送带有适当头部信息以及表单字段的 HTTP 请求以实现自动化的账户认证过程。同时要注意管理好 session cookie 来保持会话状态连续性。 - **动态页面抓取**:针对那些依赖 AJAX 技术异步更新部分内容的情况,则可考虑采用 Selenium WebDriver 实现完整的浏览器交互体验,从而获取最终呈现给用户的 HTML 文档片段。 #### 示例代码 下面给出一段简单的例子展示如何用 Python 解析并运行来自网页上的 JavaScript 函数: ```python import execjs def execute_js_function(js_code, func_name, *args): ctx = execjs.compile(js_code) result = ctx.call(func_name, *args) return result ``` 此函数接收三个参数:要编译执行的 js 字符串、待调用的方法名以及该方法所需的任意数量的位置实参。它返回由指定名称所指代的 JavaScript 方法的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值