爬虫利器:Frida Rpc算法转发

  发布时间:2025-12-07 20:37:40   作者:玩站小弟   我要评论
本章来给大家介绍一个爬虫利器,嗯。。。,app协议还原利器更合适,当然,自己用的话是利器,别人用是折磨,因为它需要依赖模拟器或手机。对于环境来说是有些麻烦的!这个东西我们一般称它为frida rpc算 。

本章来给大家介绍一个爬虫利器,爬虫嗯。利器 。算法 。爬虫 ,利器app协议还原利器更合适 ,算法当然,爬虫自己用的利器话是利器,别人用是算法折磨 ,因为它需要依赖模拟器或手机。爬虫对于环境来说是利器有些麻烦的!

这个东西我们一般称它为frida rpc算法转发 。免费模板算法

为什么使用rpc算法转发

我们都知道现在开发app主流的爬虫方案是Java,一些中大厂app是利器Java+C++ ,C++最后生成的算法是so,是arm汇编。

一般分析arm汇编才是最难的 ,所以中大厂会更倾向把重要加密放在so中,来增强爬虫或者破解的难度!模板下载! !

但是如果使用rpc的话  ,你就不太需要分析繁琐的Java层和so层的加密了 !

你需要通过frida主动调用Java层或so层的方法 ,然后拿到被加密的内容,然后其他的操作不是就可以为所欲为了?

环境 复制pixel2 v10(已root

)

Magisk v23.0Charles v4.6.2Drony v1.3.154Python v3.8.6frida v14.2.181.2.3.4.5.6. rpc转发案例

本次使用的app是高防服务器嘟嘟牛,百年只刚嘟嘟牛 ,哈哈哈!

抓包

通过抓包发现 ,走的接口是http://api.dodovip.com/api/user/login

提交的是一个Encrypt:xxxx,返回的是一串字符串,这 ?? ?啥玩意 ? ??

所以我们要模拟这个请求 ,必定要捋清这个请求和响应是怎么生成的!云计算

分析

app拖入jadx中 ,搜索关键字Encrypt:

主要加密逻辑在这一块:

分析不是这一章的重点,相关hook代码 ,稍微研究一下就懂了 !

复制Java.perform(function

() {

function printMap2(map

) {

return Java.cast(map, Java.use("java.util.HashMap"

));

}

// Java.use("com.dodonew.online.http.RequestUtil").encodeDesMap.overload(java.lang.String, java.lang.String, java.lang.String).implementation = function (data, desKey, desIV

) {

console.log("RequestUtil encodeDesMap is call"

)

console.log("data:", data

)

console.log("desKey:", desKey)//65102933 console.log("desIV:", desIV)//32028092 let result = this.encodeDesMap(data, desKey, desIV

)

console.log("RequestUtil encodeDesMap result:", result

)

return result

}

Java.use("com.dodonew.online.http.RequestUtil").paraMap.overload(java.util.Map, java.lang.String, java.lang.String).implementation = function (addMap, append, sign

) {

console.log("RequestUtil paraMap is call"

)

console.log("addMap:", addMap

)

console.log("addMap:", printMap2(addMap

))

console.log("append:", append

)

console.log("sign:", sign

)

let result = this.paraMap(addMap, append, sign

)

console.log("RequestUtil paraMap result:", result

)

return result

}

Java.use("com.dodonew.online.http.RequestUtil").decodeDesJson.implementation = function (json, desKey, desIV

) {

console.log("RequestUtil decodeDesJson is call"

)

console.log("json:", json

)

console.log("desKey:", desKey

)

console.log("desIV:", desIV

)

let result = this.decodeDesJson(json, desKey, desIV

)

console.log("RequestUtil decodeDesJson result:", result

)

return result

}

})1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44. 整理

根据上述hook,整理出来主动调用应该是这样调用的,一个加密,一个解密。

复制//请求加密function callparaMap(username, userPwd, timeStamp

) {

let result = ""

;

Java.perform(function

() {

let map = Java.use("java.util.HashMap").$new

();

map.put("timeStamp", timeStamp

)

map.put("loginImei", "Androidnull"

)

map.put("equtype", "ANDROID"

)

map.put("userPwd", userPwd

)

map.put("username", username

)

// let r1 = Java.use("com.dodonew.online.http.RequestUtil").paraMap(map, "sdlkjsdljf0j2fsjk", "sign"

)

// console.log("r1:", r1) // result = Java.use("com.dodonew.online.http.RequestUtil").encodeDesMap(r1, "65102933", "32028092"

)

// console.log("r2:", r2)

})

return result

;

}

//响应加密function calldecodedesjson(data

) {

let result = ""

;

Java.perform(function

() {

result = Java.use("com.dodonew.online.http.RequestUtil").decodeDesJson(data, "65102933", "32028092"

)

// console.log("decode:", decode)

})

return result

;

}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29. 搭建服务

既然上述已经把逻辑捋清楚了,并且也已经写好的主动调用的js代码 。建站模板

那么就来了,如何和python结合到一起,跑成一个web ,这样爬虫只需要响应的参数拿到返回值即可 。

代码​  :

复制from fastapi import FastAPIimport uvicornimport fridajsCode = """ function callparamap(username, userPwd, timeStamp

) {

let result = ""

;

Java.perform(function

() {

let map = Java.use("java.util.HashMap").$new

();

map.put("timeStamp", timeStamp

)

map.put("loginImei", "Androidnull"

)

map.put("equtype", "ANDROID"

)

map.put("userPwd", userPwd

)

map.put("username", username

)

// let r1 = Java.use("com.dodonew.online.http.RequestUtil").paraMap(map, "sdlkjsdljf0j2fsjk", "sign"

)

// console.log("r1:", r1) // result = Java.use("com.dodonew.online.http.RequestUtil").encodeDesMap(r1, "65102933", "32028092"

)

// console.log("r2:", r2)

})

return result

;

}

function calldecodedesjson(data

) {

let result = ""

;

Java.perform(function

() {

result = Java.use("com.dodonew.online.http.RequestUtil").decodeDesJson(data, "65102933", "32028092"

)

// console.log("decode:", decode)

})

return result

;

}

rpc.exports =

{

encrypt: callparamap

,

decode: calldecodedesjson

,

};

"""# 准备工作# process = frida.get_device_manager().add_remote_device(192.168.3.68:27042).attach("com.dodonew.online"

)

process = frida.get_usb_device().attach(com.dodonew.online

)

script = process.create_script(jsCode

)

print([*] Running 小肩膀

)

script.load

()

app = FastAPI

()

# http://127.0.0.1:8080/getencrypt?username=18903916120&password=1111&timestamp=1647662720061@app.get("/getencrypt"

)

async def getencrypt(username, password, timestamp

):

result = script.exports.encrypt(username, password, timestamp

)

return { "data": result

}

from pydantic import BaseModelclass Item(BaseModel

):

data: str@app.post("/getdecode"

)

async def getdecode(item: Item

):

result = script.exports.decode(item.data

)

return { "data": result

}

if __name__ == __main__

:

uvicorn.run(app, port=8080)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.

运行 :

构造请求

代码:

复制import requestsimport timeimport jsondt = time.time() * 1000# 请求加密url = f"http://127.0.0.1:8080/getencrypt?username=18903916120&password=1111&timestamp={ dt}"r1 = requests.get(url

)

print(r1.json

())

# 登录url = "http://api.dodovip.com/api/user/login"headers =

{

"Content-Type": "application/json;charset=utf-8"

}

data =

{

"Encrypt": r1.json().get("data"

)

}

print(data

)

r = requests.post(url=url, headers=headers, data=json.dumps(data

))

print(r.text

)

# 拿到请求解密data =

{

"data": r.text

}

url = "http://127.0.0.1:8080/getdecode"r = requests.post(url=url,headers=headers, data=json.dumps(data

))

print(r.text)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.

运行 :

总结

这个app还是很简单的 ,但是应该用到了俩加密  ,如果要是硬刚代码的话  ,还是需要研究研究的。源码下载

但是如果使用rpc这种转发方案的话,你就可以发现几行代码就完事了 !

但是缺陷也是明显的 ,需要依赖电脑和手机 ,如果只是采集数据的话,应该还是挺合适的!

  • Tag:

相关文章

  • WSSAT:一款功能强大的Web服务安全评估与审计工具

    关于WSSATWSSAT是一款功能强大的Web服务安全评估与审计工具,该工具完全开源,并给广大研究人员提供了一个动态环境,即只需要编辑其配置文件即可添加、更新或删除漏洞。该工具接受WSDL地址列表作为
    2025-12-07
  • Android 5.0彩蛋怎么开启?

    安卓5.0彩蛋是接下来小编为大家带来的,每一个安卓系统版本的设置应用中都暗藏一颗可爱的;彩蛋”,之前的Android Kitkat系统的彩蛋是一个甜点盘动画。现在Android 5.0已经发布,那么它
    2025-12-07
  • 深度XP系统安装教程(深度XP系统安装及设置,让电脑更快速更顺畅)

    在电脑使用过程中,一个稳定高效的操作系统是非常重要的。而深度XP系统作为一款基于WindowsXP的优化版操作系统,具有更好的稳定性和兼容性,能够提供更快速、更顺畅的使用体验。本文将详细介绍深度XP系
    2025-12-07
  • 七彩虹H81M主板的强大性能和稳定性(打造出色电脑体验的首选主板)

    作为电脑硬件的核心组件之一,主板对电脑性能和稳定性起着至关重要的作用。七彩虹H81M主板凭借其强大的性能和稳定可靠的品质,成为众多电脑爱好者的首选。本文将详细介绍七彩虹H81M主板的特点和优势。一、支
    2025-12-07
  • 自动驾驶汽车中午开才安全?

    自动驾驶与人类驾驶的安全性对比是颇具争议的热门话题。中央佛罗里达大学的博士生Shengxuan Ding领导一项基于2000多辆自动驾驶汽车数据的研究发现,在某些情况下,自动驾驶汽车可能比人类驾驶更安
    2025-12-07
  • 支持指纹识别 小米要推高端红米机

    现在有消息人士透露,小米在准备一款新机,其搭载了MT6795处理器,如果不出意外,这会是定位高端的红米旗舰机。 此外,消息中还强调,这款新机也会配备指纹识别功能,且是FPC的方案。需要补
    2025-12-07

最新评论