当前位置: 首页 > news >正文

美拍sig逆向

声明:该文章仅为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖!

一、目标:

解决美拍发现页数据采集

二、抓包:

抓包方式:VPN+中间人抓包
没有遇到检测,直接可以获取请求体

三、参数分析:

在发现页下拉,同时进行抓包,对比两次请求,发现需要解决的参数为:sig,sigTime。

四、参数还原:

在jadx中打开apk,开始搜索sig的位置
在这里插入图片描述
在这里插入图片描述
经过分析,发现sig的生成是在sigEntity这个类中,那么接下来对这个类中的方法进行hook
在这里插入图片描述

Java.perform(function () {let SigEntity = Java.use("com.meitu.secret.SigEntity");SigEntity["generatorSigWithFinal"].implementation = function (str, strArr, str2, obj) {console.log(`SigEntity.generatorSigWithFinal is called: str=${str}, strArr=${strArr}, str2=${str2}, obj=${obj}`);let result = this["generatorSigWithFinal"](str, strArr, str2, obj);console.log(`SigEntity.generatorSigWithFinal result=${result}`);return result;};
});

分析hook的结果:
在这里插入图片描述
hot/feed_timelin.json就是我们请求连接中的path,strArr也是请求params中的参数值,result的结果是一个指针,指向com.meitu.secret.SigEntity@a12435d这个地址,我们可以修改一下,输出result.sig,结果为:21d41abbe45bbd01b3c57471ab3c663b,和请求中的sig很相似,所以继续往下分析。
在sigEntity中可以看到,nativeGeneratorSigFinal方法是在release_sig中实现的

private static final String SO_NAME = "release_sig";
public static native SigEntity nativeGeneratorSigFinal(String str, byte[][] bArr, String str2, Object obj);

使用ida打开librelease_sig.so文件进行分析,首先还是先搜索一下sig,接下来尝试对so中的方法进行hook。

在这里插入图片描述
其实这里,我对这几个方法都进行了hook,只有GeneratorSIG这个方法在我进行操作时有结果,故而认定sig是在这个方法中生成的(其实看名字也能知道…)。
接下来对GeneratorSIG中的代码进行分析,中间涉及到加密key,由GetSecretKey(v11, v12);方法生成,再对该方法进行hook,拿到key值。
hook代码如下:

Java.perform(function () {let secretkeyss = Module.getExportByName("librelease_sig.so", "_Z12GetSecretKeySs");Interceptor.attach(secretkeyss, {onEnter: function (args) {console.log("[*] 获取美拍密钥...");},onLeave: function (retval) {let str_ptr = retval;let length = Memory.readU32(str_ptr.add(4));let data_ptr = Memory.readPointer(str_ptr);if (length < 16) {data_ptr = str_ptr.add(8);}let secret = Memory.readUtf8String(data_ptr, length);console.log("[*] 密钥: " + secret);console.log("[*] 密钥长度: " + length);}})}
)

接下来,就是将GeneratorSIG中的代码,还原为python代码,即可生成sig。
其实就是一个简单的md5,然后再进行换位操作。

http://www.dtcms.com/a/284271.html

相关文章:

  • 神经网络:模拟人脑的 AI 信息处理系统
  • 代码随想录打卡第十二天
  • Unity | AmplifyShaderEditor插件基础(第十集:噪声的种类+火焰制作-下)
  • 透过结构看时间——若思考清洗则表达有力
  • 开源Agent平台Dify源码剖析系列(六)核心模块core/agent之CotCompletionAgentRunner
  • Web开发 01
  • Vue.js 的 Composition API 深度解析:构建高效可维护的前端逻辑
  • 让大模型输出更加规范化——指定插件
  • LVS部署DR模式集群
  • @Linux搭建DNS-主从服务器
  • Spring原理揭秘--Spring的AOP
  • cuda编程笔记(8)--线程束warp
  • Cookie 与 Session概述
  • AI编程实战:如何让AI生成带参数和返回值的Python函数——以PDF文本提取为例
  • 【橘子分布式】gRPC(理论篇)
  • 要实现在调用  driver.get()  后立即阻止页面自动跳转到 Azure 登录页,可通过以下几种方法实现:
  • Redis完全指南:从基础到实战(含缓存问题、布隆过滤器、持久化及Spring Boot集成)
  • 前端 cookie 使用
  • 独家|理想汽车放弃华为PBC模式,回归OKR理想汽车
  • 自动化测试工具 Selenium 入门指南
  • 大带宽服务器对于高流量网站的作用
  • Kubernetes v1.33:容器生命周期管理的重要演进
  • 断网情况下,网线直连 Windows 笔记本 和Ubuntu 服务器
  • python的抗洪救灾管理系统
  • 分布式系统中脑裂问题
  • 数据结构入门 (二):挣脱连续空间的束缚 —— 单向链表详解
  • LiteCloud超轻量级网盘项目基于Spring Boot
  • 大模型AI制作svg流程图过分简单粗糙单调的问题及修改调整方法
  • AI大模型教程 Langchain AI原生应用开发 Milvus AnythingLLM Dify 仿京东《京言》AI实战解析
  • 【赵渝强老师】Redis的主从复制集群