首页 > 编程语言 >Python爬虫:通过js逆向了解某音请求接口参数a_bogus加密过程

Python爬虫:通过js逆向了解某音请求接口参数a_bogus加密过程

时间:2024-06-10 11:54:35浏览次数:24  
标签:某音 target Python js proxy array property bogus

1. 前言

需要提前说明以下,本篇文章讲述的内容仅供学习,切莫用于商业活动,如若被相关人员发现,本小编概不负责!切记
本次分析的接口为:https://www.douyin.com/aweme/v1/web/discover/search/
它的请求方式为:GET
请求需要的参数有:

请求参数中需要进行js逆向是:a_bogus
必须需要的请求头字段为:referer,user-agent(可不写,建议写)
这个接口用于获取某音搜索所得到的用户数据,如下:

2. 找到js逆向部分最关键的点

需要找到该接口的启动器下这个,然后点击进入

然后在下述这个地方进行断点操作。为什么是这个地方呢?因为这个地方是参数值a_bogus生成的地方。当然在该断点上需要继续执行脚本多次,才会找到我们需要的请求接口请求参数a_bogus加密部分。

如下(下述是edge浏览器操作截图):

此时,可以发现这个关键部分就是上述这个代码,其中arguments就是加密需要的参数,也就是如下:

var params = [
        0,
        1,
        14,
		'device_platform=webapp&aid=6383&channel=channel_pc_web&search_channel=aweme_user_web&keyword=%E5%A5%A5%E7%89%B9%E6%9B%BC&search_source=normal_search&query_correct_type=1&is_filter_search=0&from_group_id=&offset=0&count=10&need_filter_settings=1&list_type=single&update_version_code=170400&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=120.0.0.0&browser_online=true&engine_name=Blink&engine_version=120.0.0.0&os_name=Windows&os_version=10&cpu_core_num=8&device_memory=4&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7375104739480094217&msToken=NqYCyHdpAMPM14BJ6fw69qOui-bipCWQ8oZ0Yibr2FoASHy-5CR-0ryRcocIpxlMnOAslkYUTbITzUR6uUt1CTJcO4GdM-KNuXyzARN35Lw5w0avNwdZdfM%3D&msToken=NqYCyHdpAMPM14BJ6fw69qOui-bipCWQ8oZ0Yibr2FoASHy-5CR-0ryRcocIpxlMnOAslkYUTbITzUR6uUt1CTJcO4GdM-KNuXyzARN35Lw5w0avNwdZdfM%3D',
        "",
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.218.400 QQBrowser/12.1.5496.400"
    ]

3. js逆向生成a_bogus参数值

直接把bdms.js这个文件的代码copy到本地电脑,找到59!==这段代码下,然后在最后加上下述代码

然后在另外一个js文件这个js文件,当然可以直接在这个js代码下直接写。然后运行这个文件,就会报一些错误,如下:

这是由于缺少一定环境导致的,此时需要补环境,补环境的代理代码如下:

function get_enviroment(proxy_array) {
    for (var i = 0; i < proxy_array.length; i++) {
        handler = '{\n' +
            '    get: function(target, property, receiver) {\n' +
            '        console.log("方法:", "get  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return target[property];\n' +
            '    },\n' +
            '    set: function(target, property, value, receiver) {\n' +
            '        console.log("方法:", "set  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return Reflect.set(...arguments);\n' +
            '    }\n' +
            '}'
        eval('try{\n' + proxy_array[i] + ';\n'
            + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}catch (e) {\n' + proxy_array[i] + '={};\n'
            + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}')
    }
}
proxy_array = ['window', 'document', 'location', 'navigator', 'history', 'screen'] 
get_enviroment(proxy_array)

把对应的环境补上,然后再运行就不会报一些错误,然后再执行下述测试代码,如下:

虽然生成的a_bogus的结果值与实际该接口的a_bogus值在长度上有一些不同,但是是可以正常访问的,如下:

标签:某音,target,Python,js,proxy,array,property,bogus
From: https://www.cnblogs.com/liuze-2/p/18240562

相关文章

  • python实现自定义线程池
    线程池ThreadPool对象的几个关键方法:get_idle_num():获得当前空闲线程的数量submit(task:callable):把一个任务(实际上就是一个函数)提交到线程池中执行.如果没有空闲线程则阻塞.wait_idle():阻塞,直到有空闲线程stop():停止线程池中的所有线程.(注意:非强制停止,......
  • Python 中 `return` 语句的主要作用
    在Python中,`return`语句用于从函数中返回一个值,并终止函数的执行。`return`语句是函数中最重要的控制流语句之一,它决定了函数的输出和执行流程。以下是`return`语句的主要作用和一些示例:###主要作用1. 返回值:  -`return`语句将一个值(或多个值)从函数传递给调用者。这......
  • python里装饰器的作用是什么
    在Python中,装饰器(decorator)是一种高级函数,用于修改或扩展其他函数或方法的行为,而无需直接修改它们的代码。装饰器常用于以下场景:日志记录:记录函数的调用信息,如函数名、参数和返回值。权限验证:在执行函数前检查用户是否有权限。性能测量:测量函数的执行时间。缓存:缓存函数的返回......
  • Python魔法之旅-魔法方法(25)
    目录一、概述1、定义2、作用二、应用场景1、构造和析构2、操作符重载3、字符串和表示4、容器管理5、可调用对象6、上下文管理7、属性访问和描述符8、迭代器和生成器9、数值类型10、复制和序列化11、自定义元类行为12、自定义类行为13、类型检查和转换14、自......
  • Python魔法之旅-魔法方法(23)
    目录一、概述1、定义2、作用二、应用场景1、构造和析构2、操作符重载3、字符串和表示4、容器管理5、可调用对象6、上下文管理7、属性访问和描述符8、迭代器和生成器9、数值类型10、复制和序列化11、自定义元类行为12、自定义类行为13、类型检查和转换14、自......
  • Python中的异常处理详解
    异常处理是编程中常见的一项任务,用于处理程序在运行时可能发生的错误情况。Python提供了强大的异常处理机制,使得开发者能够更好地控制和处理程序的异常情况。本文将深入探讨Python中的异常处理,包括异常的基本概念、异常处理语句、异常类型以及如何自定义异常。目录异常的......
  • 基于Python的桌面定时提醒小程序
     分享一个自己之前做的小程序,主要功能有两个:可以间隔固定时间弹窗提醒,间隔的时间以及重复的次数可以自己选定,提示的内容也可以手动输入;设定具体的时间点,定时提醒,提示的内容也可以手动输入;自己用了这个小程序已经快两年了,感觉体验还不错,所以就拿出来分享下,小程序是用Python......
  • Python 机器学习基础:掌握 Pandas 数据处理库的奥秘
    在Python的机器学习领域中,Pandas是一个不可或缺的工具。它不仅提供了强大的数据结构,还拥有数据处理和分析的能力,是数据科学家和机器学习工程师的得力助手。本文将深入探讨Pandas的核心功能,并通过实际案例,展示其在机器学习项目中的关键作用。1.Pandas简介Pandas是......
  • python打印一颗桃花树
     以下是使用Python的turtle库来绘制一棵梅花树,并添加落叶效果的代码:importturtleimportrandom#设置画布和画笔canvas=turtle.Screen()canvas.bgcolor("black")pen=turtle.Turtle()pen.speed(0)pen.penup()pen.left(90)pen.backward(200)pen.pendown()#......
  • 008基于SSM+Jsp的汽车在线销售系统
    开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示网站首页车辆信息管理员登录用户信息管理车辆信息管理出库记录管理入库记录管理车辆购买管理......