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都能操作起来。

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

猜你喜欢

转载自blog.csdn.net/weixin_61736939/article/details/127606597