前言
由于某些网站的请求参数的加密比较复杂,通过寻常手段扣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都能操作起来。
最后,如果这篇文章对您有帮助请给博主点点关注哦~