京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:Python进阶者
来源:Python爬虫与数据挖掘
Hello,大家好,我是码农星期八,本次带来的是如何通过frida rpc算法转发来完成x物搜索商品接口的加密!
x物4.74.5版本
链接:https://pan.baidu.com/s/1el0a48vsIl7XI-cDr7iynA 提取码:tlvb
--来自百度网盘超级会员V1的分享
pixel2 v10(已root) Magisk v23.0 Charles v4.6.2 Drony v1.3.154 Python v3.8.6 frida v14.2.18
首先进行搜索,根据抓到的包逐条筛选,可以发现这条url数据是吻合的!
经过不断测试,发现newSign这个值是不断变化的。
通过构造请求,这个值不对确实是无法请求的!!会返回一个签名校验失败!
那,如何搞定这个newSign呢?
将app拖入jadx中,搜索newSign
发现有很多newSign,是哪个呢?那就只能猜了,我们先hook第一个,看是不是走的这个!
点进入,看看是哪个类,hook的是RequestUtils.c这个方法!
hook代码
Java.perform(function () { function printMap2(map) { return Java.cast(map, Java.use("java.util.HashMap"));
}
Java.use("com.shizhuang.duapp.common.utils.RequestUtils").c.implementation = function (map, j2) { console.log("RequestUtils c is call") console.log("map:", map) console.log("map:", printMap2(map)) console.log("j2:", j2) let result = this.c(map, j2) console.log("RequestUtils c result:", result) return result
}
})
验证
可以发现走的确实是第一个,并且newSign也能对上!
那就好办了,既然已经知道了他调用的是哪个方法,但是也不想使劲扣代码,直接上rpc吧!
com.shizhuang.duapp.common.utils.RequestUtils.c这个函数接受的是两个参数。
一个是一个map,一个是时间戳。
map里面包括了分页,要搜索的内容什么的。
rpc转发代码
from fastapi import FastAPI import uvicorn import frida
jsCode = """
function newsign(arg_f,j2) {
let result = "";
Java.perform(function () {
let map = Java.use("java.util.HashMap").$new();
for (let key in arg_f) {
map.put(key + "", arg_f[key] + "")
}
result = Java.use("com.shizhuang.duapp.common.utils.RequestUtils").c(map, j2)
})
return result;
}
rpc.exports = {
newsign:newsign
};
""" # 准备工作 # process = frida.get_device_manager().add_remote_device('192.168.3.68:27042').attach("com.dodonew.online") process = frida.get_usb_device().attach('com.shizhuang.duapp')
script = process.create_script(jsCode)
print('[*] Running ')
script.load() from pydantic import BaseModel
app = FastAPI() class Item(BaseModel): m: dict
j2: int @app.post("/getnewsign") async def getencrypt(item: Item): result = script.exports.newsign(item.m, item.j2) return {"data": result} if __name__ == '__main__':
uvicorn.run(app, port=8080)
代码
import requests import time import json
timestamp = int(time.time() * 1000)
url = "https://app.dewu.com/api/v1/app/search/ice/search/list" params = { "originSearch": "false", "catId": 0, "abTest": '[{"name":"search_equlheight_spu_strategy","value":"0"}]', "hideAddProduct": 0, "sortType": 0, "showHot": 1, "limit": 20, "productDetailVersionFlag": 1, "typeId": 0, "sortMode": 0, "page": 0, "title": "13苹果" }
# ########### 加密newsign begin
data = { "m": params, "j2": timestamp,
}
r = requests.post("http://127.0.0.1:8080/getnewsign", data=json.dumps(data))
sign = r.json().get("data")
# ########### 加密newsign end
params["newSign"] = sign print(params)
headers = { "duuuid": "38a763c08fd35e88", "duimei": "", "duplatform": "android", "appId": "duapp", "duchannel": "pp", "humeChannel": "", "duv": "4.74.5", "duloginToken": "", "dudeviceTrait": "Pixel+2", "dudeviceBrand": "google", "timestamp": f"{timestamp}", "shumeiid": "20220315115339c2791752e1a1601028f3d267a317791d01458b2315a9eba3", "oaid": "", "User-Agent": "duapp/4.74.5(android;10)", "X-Auth-Token": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiMzhhNzYzYzA4ZmQzNWU4OCIsInVzZXJJZCI6MTg1NDk2MzI5NCwiaXNHdWVzdCI6dHJ1ZSwiZXhwIjoxNjc4ODUyNDE4LCJpYXQiOjE2NDczMTY0MTgsImlzcyI6IjM4YTc2M2MwOGZkMzVlODgiLCJzdWIiOiIzOGE3NjNjMDhmZDM1ZTg4In0.AM9apvMO1rj73LmLF3gHLS0IR5kWICzJIxsjXwMaC3NtlF2VdvH2PEAMDLi-gCb6sceplIC8gJlivVp0WxPOYnA5JOmcaGaA32ihjNCNJdsST2vt-I0vyhi4XVcRvK6-H_H8X-miCXnVkUnq0xs0sz4L9A8QSKJAb9y4xTLPKvw_ncwglg7chNDsBM2AfItPRpqjT-rHrW4tEix9EXCIQsAcRSgqodHOq1TPviNm0j8TaX4DMnTQTN4IktwWqiRXUfDtSraQAFeS_1z4lANCWNshRwNNUxlOHmE8kvN91dr9aZ1PvRF8yoBZg9kWvwOSuxYA7W9VPHx6TsOp2xGFhQ", "isRoot": "0", "emu": "0", "isProxy": "0", "Host": "app.dewu.com", "Accept-Encoding": "gzip", "Connection": "keep-alive" }
r1 = requests.get(url=url, headers=headers, params=params) print(r1.url) print(r1.text)
得到的结果
小试牛刀一下,果然,rpc万能,除了有点废环境。
人生没有白走的路,加油!
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
越努力,越幸运。
我是码农星期八,如果觉得还不错,记得动手点赞一下哈。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据驱动的精细化运营体系中,指标是业务判断、效果复盘、策略优化的核心依据。随着企业数据化程度提升,指标数量持续膨胀,但 ...
2026-07-23在用户运营与产品增长体系中,留存是衡量产品真实价值与用户粘性的核心标尺,也是决定用户生命周期价值、获客投产比的底层因素。 ...
2026-07-23 很多数据分析师精通Excel、SQL、Python等工具,但当被问到“面对一个具体的业务问题,该用什么分析方法”“描述性分析和诊断 ...
2026-07-23【核心关键词】埋点、产品、互联网、数据库、决策、数据分析、产品经理、商业模式、移动互联网、指标体系、运营模块、大数据平 ...
2026-07-22在高并发、大数据量的业务系统中,单表数据量达到千万级甚至亿级后,会出现查询性能骤降、索引维护成本飙升、存储扩容困难等问题 ...
2026-07-22 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-07-22在金融风控、企业运营、行业研究等数据分析场景中,大量数据以面板数据形态存在:例如多家分支机构连续多个季度的风险指标、多位 ...
2026-07-21 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-07-21一、活动介绍 2026暑期CDA备考冲刺季,为想利用假期拿证的你量身打造。考点胶囊内容搭配多重硬核福利,让你在旅行、实习、居家 ...
2026-07-21金融行业的运营风险贯穿业务全流程,涵盖交易欺诈、操作违规、流程漏洞、合规偏差、客户信用异常等多元场景,是银行、保险、证券 ...
2026-07-17财产保险作为金融行业的核心板块,涵盖车险、家财险、责任险、企财险等多元品类,是个人与企业抵御财产风险、经营风险的重要保障 ...
2026-07-17 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-07-17【核心关键词】模块、餐饮、客户、门店、企业、订单、供应链、多样化、产品、生产计划、数据分析、生产管理、物料管理、业务分 ...
2026-07-16在数字化分析时代,原始数据本身不具备业务价值,只有通过科学的统计学方法加工、拆解、验证与解读,才能挖掘数据背后的规律、差 ...
2026-07-16 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-07-16在描述性统计分析、数据预处理、异常值排查与多组数据分布对比工作中,箱线图(Box Plot)是应用最广泛的可视化与统计工具之一。 ...
2026-07-15在企业数据存储、业务统计与数据分析工作中,绝大多数业务数据都带有时间维度属性,例如订单创建时间、用户注册时间、支付完成时 ...
2026-07-15 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-07-15【核心关键词】产品、经营、客户、调研、销售额、宏观、会计行业、客户满意度、发展趋势、经营状况、数据分析、竞争对手、数据 ...
2026-07-14问卷调查是市场调研、用户研究、社会调研与产品分析的核心数据采集方式。问卷数据大多以分类数据为主,例如用户性别、年龄分层、 ...
2026-07-14