爬虫利器:Frida Rpc算法转发

  发布时间:2025-12-07 15:19:23   作者:玩站小弟   我要评论
本章来给大家介绍一个爬虫利器,嗯。。。,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:

相关文章

  • 网络物理系统安全之​CPS的特点

    CPS的特点CPS体现了嵌入式系统,实时系统,有线和无线)网络和控制理论的几个方面。嵌入式系统:CPS最一般的特征之一是,由于与物理世界直接接口的几台计算机传感器,控制器或执行器)仅执行很少有具体的行
    2025-12-07
  • 派拓网络IoT/OT安全服务即将落地中国,为企业提供全方位安全保障​

    全球网络安全领导者Palo Alto Networks派拓网络)近期宣布其物联网IoT)/运营技术OT)安全服务即将落地中国,以应对日益增长的物联网安全需求。该服务由北京神州数码云计算有限公司简称神州
    2025-12-07
  • 数据库备份“魔法钥匙”,如何打开分布式备份效率之门?

    信创浪潮下分布式数据库崛起随着国家对信息安全战略重视程度的不断提升,国产信创产业迎来了前所未有的发展机遇。在数据库领域,国产分布式数据库异军突起,其凭借对国产硬件和软件环境的高度适配性,以及在性能方面
    2025-12-07
  • 勒索软件忙招人,2024年网络安全四大新趋势

    虽然网络安全行业裁员降薪一片哀嚎,但是网络犯罪组织却“求贤若渴”。根据Cato Networks发布的《2024年第三季度SASE威胁报告》,网络犯罪趋于“专业化”,开始积极招募渗透测试员来优化勒索软
    2025-12-07
  • 谷歌正寻求提高 C++ 内存安全

    谷歌 Chrome 安全团队称其一直在致力于改善 Chrome 浏览器的内存安全;近期,该团队正在研究使用 heap scanning 技术来提高 C++ 的内存安全。虽然从内存安全方面出发,Rust
    2025-12-07
  • 立即修复,微软驱动程序关键漏洞已被APT组织利用

    近日,微软被曝Windows AFD.sys漏洞编号:CVE-2024-38193)正在被黑客组织利用。该漏洞被归类为自带易受攻击驱动程序BYOVD)漏洞,可影响Windows套接字的注册I/ORIO
    2025-12-07

最新评论