python通过RPC远程调用获取请求参数实例


前言

由于某些网站的请求参数的加密比较复杂,通过寻常手段扣js代码去逆向要花费大量时间精力。通过RPC远程调用可以大大节省去扣代码的时间。让我们来看下具体过程吧。


提示:以下是本篇文章正文内容,下面案例可供参考

一、RPC是什么?

RPC,全称Remote Procedure Call, 即远程过程调用。

主要作用是屏蔽网络编程细节,实现调用远程方法就像调用本地方法(同一个进程中的方法)一样的体验。

同时屏蔽底层网络通信的复杂性,让我们更加专注业务逻辑的开发。

二、使用步骤

1.下载RPC框架

这里给出大佬的RPC框架源码地址,大家自行下载

2.网页js注入

实例网站:aHR0cHM6Ly9zcGEyLnNjcmFwZS5jZW50ZXIv(需base64解码查看)

1.通过抓包分析可知网页加密参数为token

2.全局搜索找到加密函数位置

通过分析可知加密函数为i['a'],参数为"/api/movie"和0(与offset相同)

3.通过hook或本地替换导出加密函数保存到window

手动hook:(缺点:每次刷新网页会清空)

 

新建代码段自定义函数用于返回给服务器数据

function nn(x) {
    console.log(x,typeof(x))
    var v = [];
    v.push(cason("/api/movie",x));
    return v;
}

运行函数检测效果

成功得到加密参数。

本地替换:

在e下导出函数,在结尾添加自定义函数

测试结果相同。

3.部署服务器

1.启动服务器

2.复制cyrpc.js粘贴到浏览器控制台


 注意:最后的nn必须与自定义函数名相同!

出现如上所示即为连接成功。

4.调用RPC得到返回结果

浏览器打开http://127.0.0.1:9420/cbb?type=I&webId=1001&data=20发送get请求得到响应参数值。

参数说明:

type:'A'-->数组,'O'-->object对象,'S'-->字符串,'I'-->数字

wenId:标识符,可同时启用多个

data:发送的数据

 5.python代码实现

 第一次请求会给你一个参数,第2次请求需要带上这个参数才能正常请求。

# coding:utf-8
import requests
import re

i = 0
while i < 3:
    r = requests.get('http://127.0.0.1:9420/cbb?type=I&webId=1001&data=0')
    print(r.text)
    token = re.search(r'1001---\[\["(.*?)"]]', r.text)[1]
    print(token)
    res = requests.get(f'https://spa2.scrape.center/api/movie/?limit=10&offset=0&token={token}')
    if res.status_code == 200:
        print(res.text)
        break
    else:
        print('---------')
        i += 1

总结

RPC调用是一种非常简单且强大的功能,可以通过自启一个浏览器来拦截js文件实现RPC服务,熟练掌握后各种难度的js都能操作起来。

最后,如果这篇文章对您有帮助请给博主点点关注哦~

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值