首页 > 其他分享 >JS逆向入门

JS逆向入门

时间:2024-06-16 23:21:16浏览次数:23  
标签:逆向 请求 接口 JS headers params https com 入门

C级通关

第一题

打开页面 https://www.aqistudy.cn/

实现接口 https://www.aqistudy.cn/apinew/aqistudyapi.php 的正常请求并获取明文响应

分析

  1. 开着F12进页面
  2. 遇到无限debugger 一个 never pause here 下去
  3. 关闭所有断点 Activate breakpoint(Ctrl + F8),随便逛逛网站找找目标接口
  4. image-20240613200856817
  5. 找到了如上图,简单分析一下接口
  6. image-20240613201159969
  7. response 内容同样为一长串加密字符
  8. image-20240613201340275
  9. 重放请求,发现 payload 和 response 都不变
  10. image-20240613202145237
  11. 请求类型为 XHR/fetch ,直接打断点开抓
  12. image-20240613203819469

扣代码

  1. image-20240613205415430
  2. 先搞定加密,定位到 pov0M2gfR 这个函数
  3. image-20240613212022614
  4. 简单扣一下代码补补环境,缺啥找啥,我直接扣了两个文件2000,环境齐了。入参加密破解成功
  5. image-20240613213609051
  6. 再搞解密,定位到了 deIZLF7oahc0DLiXbqt 这个函数
  7. image-20240613214629626
  8. 然后发现这个函数已经在扣加密的时候也已经扣过了,可以直接调,至此,加解密的破解我们就完成了
  9. image-20240613214856629

模拟请求

import execjs
import requests
from pathlib import Path
import json
project_dir = Path(__file__).resolve().parent
file = f'{project_dir}\\入参.js'
ctx = execjs.compile(open(file, encoding='utf-8').read())

url = "https://www.aqistudy.cn/apinew/aqistudyapi.php"
headers = {
    "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
}

for city in ['广州', '深圳', '杭州', '北京', '上海', '南京', '重庆']:
    ret = {
        'city': city,
        'type': 'HOUR',
        'startTime': '2024-06-14 08:00:00',
        'endTime': '2024-06-14 09:00:00'
    }
    params = ctx.call('encrypted', ret)
    data = {"hXhY1B2Kd": params}
    res = requests.post(
            url=url,
            headers=headers,
            data=data
        )
    if res.status_code == 200:
        text = res.text.strip()
        data = ctx.call('deIZLF7oahc0DLiXbqt', text)
        print(city, json.loads(data))
    else:
        print(res.text)

image-20240614100835131

第二题

打开页面 https://xunkebao.baidu.com/#/searchList?searchValue=%E4%BA%BF%E7%BA%AC%E9%94%82%E8%83%BD&searchTab=all

搜索 亿纬锂能 找到接口https://xunkebao.baidu.com/crm/web/dgtsale/bizcrm/enterprise/search

3 种方法快速定位到接口中 headers 里的 Acs-Token 参数加密位置

方法一

  1. Acs-Token 并非常见的参数名称,那么我们直接全局搜索,打上断点一步到位
  2. image-20240614201620568

方法二

  1. 该接口请求类型为xhr,一个 XHR/fetch 断点先断到该请求处(此处没找到接口 dgtsale ,找到了和题目描述一致的 bizcrm
  2. image-20240614202525068
  3. XHR 直接断在了这里,此时我们打印一下参数,会发现还没有出现我们所需要的值。于是我们 Step out of current function 往后跟一跟
  4. image-20240614202111600

方法三

  1. Acs-Token 参数既然在 headers 当中,那么我们通过 hook headers 的方式跟踪 headers 的赋值操作
  2. image-20240614203702847
  3. Step out of current function 往出跟一跟,也到了这个地方
  4. image-20240614204257878

追踪后续

  1. 根据上述三种方法找到该值出现的地方,我们从 C3 往下追到 getSign
  2. image-20240614194722093
  3. 往下跟,加密位置应该就是这里了,入参挨个执行完 pe.gs 生成结果
  4. image-20240614215007047
  5. image-20240614215216787

第三题

解决题目 https://match2023.yuanrenxue.cn/topic/4 ,给出详细可行的解决思路

分析

  1. 先简单分析一下请求,发现 payload 有两个参数,一个 page ,一个 yt4 ,且每个请求无法重放,可知我们只要搞定 yt4 这个参数,就可以解决该问题
  2. image-20240616195126942
  3. 该请求系 XHR ,直接用 Initiator 跟过去

第四题

打开页面 https://music.163.com/ ,搜索 周杰伦

找到接口 https://music.163.com/weapi/cloudsearch/get/web?csrf_token=

实现该接口中的 paramsencSecKey 算法,成功访问该接口并获取到正确数据

分析

  1. 接口请求类型 XHR ,一个断点直接打上去,然后看看堆栈,搞一下红框里的几行代码,入参可变的其实也就 i0x 里一个搜索词
  2. image-20240614224804436

扣代码

  1. 首先去扣 window.asrsea ,直接跟踪定位到 d 这里,前后非匿名函数扣一扣,缺啥找啥,很容易就可以在本地运行了
  2. image-20240615152704161
  3. 整理一下函数命名,将死参数直接写入函数内部
  4. image-20240615154410723

模拟请求

  1. 最后拿着我们得到的参数去模拟请求,成功获取响应,过关
  2. image-20240615155238513

第五题

打开页面 https://www.ynjzjgcx.com/register/process?type=

获取验证码,代码实现触发的滑块验证码流程,破解通过率高于 80%

分析

  1. 模拟一遍过程,其请求了两个接口:
    1. 第一步通过一个 params 参数请求了 https://www.ynjzjgcx.com/prod-api/mohurd-pub/vcode/genVcode ,在手机号相同的条件下每次请求的 params 不同,且其为一个 172 位的字符串
    2. 第二步通过滑块后同样通过一个 params 参数请求了 https://www.ynjzjgcx.com/prod-api/mohurd-pub/sms/sendVCodeSms ,且其也为一个 172 位的字符串,有理由推测是同一种加密方式
  2. XHR 请求,直接用 Initiator 跟过去瞅瞅,一下就找到了这两个显眼包,入参为一个手机号
  3. image-20240616214636312
  4. 往下简单跟几步之后发现了一个加密函数,看样子很像最后要的 params ,在这里直接打印出来然后结束调试,发现不是,于是接着往下跟,最后是经过三个函数生成的最终字符串
  5. image-20240616222905494
  6. 然后我们去扣一下这里面的两个加密函数 X_eW_e

标签:逆向,请求,接口,JS,headers,params,https,com,入门
From: https://www.cnblogs.com/thx2199/p/18251465

相关文章

  • 自学编程Java入门基础教学
    (首先下载typora/15天免费使用)MARKDOWN标题(符号必须英文输入法)标题#(#个数分级别)空格文案二级标题三级标题文字world!(前后两个*加粗)world!(1斜体*)world!(3*斜体加粗)world!(两个~波浪号删除线)引用吗喽小帆船自学Java寻大厂offer(>空格)分割线(三个-获三个*分割线)......
  • 百度翻译逆向Acs-Token逆向百度翻译爬虫(调试篇)
    文章声明本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与文章作者无关,若有侵权,请联系我立即删除!概要-该篇文章是基于translate接口的分析-用到的工具Edge浏览器逆向目标求参数Acs-Token上一篇百度翻译是技巧篇,这篇来带着......
  • Kettle 数据抽取工具使用教程:从入门到实战
    一、简介Kettle是PentahoDataIntegration(PDI)的一个组成部分,是一个开源的数据集成工具。它被广泛用于数据的抽取、转换和加载(ETL)过程。Kettle提供了一个易于使用的图形界面,可以轻松设计和执行ETL流程。github源码地址:https://github.com/pentaho/pentaho-......
  • JDBC入门
    JDBC简介JDBC概念JDBC就是使用Java语言操作关系型数据库的一套API全称:(JavaDataBaseConnectivity)Java数据库连接JDBC是一套标准接口,实现同一套Java代码,操作不同的关系型数据库JDBC本质官方(sun)公司定义的一套操作所有关系型数据库的规则,即接口各个数据库厂商去实现这套接口......
  • FASTAPI从入门到进阶
    fastapi框架fastapi,一个用于构建API的现代、快速(高性能)的web框架。fastapi是建立在Starlette和Pydantic基础上的,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包,是构建高性能Asyncio服务的理性选择。快速:可与......
  • 德语语法白话入门
    碎碎念先前留学的原因,报班学习了一段时间的德语语法。下面的笔记是当时梳理的,尝试用最合理的方式串联起德语的知识点。不过嘛,目前看来,应该不会继续学习德语了。但谁说的准呢,所以发在这里,以作备忘。引言对于一个语言来说,最重要的三个要素是:“主谓宾”。比如,一个简单的中文句子就......
  • 大数据开发语言Scala入门
    Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特点,运行在Java虚拟机(JVM)上。这使得Scala能够与Java库无缝集成,并利用JVM的性能优化。Scala的这些特性,特别是其函数式编程的特性,使其在大数据处理领域非常受欢迎,特别是作为ApacheSpark的主要编程语言。Scala......
  • 循环神经网络(RNN)入门指南及代码示例
    简介循环神经网络(RecurrentNeuralNetwork,RNN)是一种擅长处理序列数据的神经网络结构。与传统的前馈神经网络不同,RNN拥有循环连接,可以保留以前的信息,从而在处理时间序列数据、自然语言处理等任务中表现出色。在这篇文章中,我们将详细介绍RNN的基本概念及其变体LSTM和GRU,并通过......
  • 博客园入门
    一、语言:通常博客都是采用markdown语言。1.1markdown语言教程1:https://markdown.com.cn/basic-syntax/教程2:https://forum-zh.obsidian.md/t/topic/435/教程3:https://markdown.com.cn/intro.html1.2Html语言(1)markdown提供了可无缝转换为HTML的轻量级语法。对于......
  • Python爬虫入门与实践
    在当今的互联网时代,网络爬虫已经成为获取网络数据的重要工具。Python作为一种强大的编程语言,其简洁易读和丰富的库支持使得它成为爬虫开发的首选语言。本文将带你入门Python爬虫,并通过一个简单的示例来展示如何使用Python爬取网页数据。一、Python爬虫基础Python爬虫通常包括......