app逆向实战:某瓣7.18.0版本_sig参数抓包与破解

本篇博客旨在记录学习过程,不可用于商用等其它途径

入口

小组里面全部讨论数据列表
在这里插入图片描述

抓包

根据抓包结果,_sig参数是动态生成的,需要破解
在这里插入图片描述

查克

使用PKID查壳工具发现app并没有加固
在这里插入图片描述

参数源码定位

使用jadx打开apk,全局搜索_sig参数,下图是搜索结果
在这里插入图片描述
这个参数使用的地方不多,仔细观察找到具有赋值作用的代码行并逐个进去观察,根据RequestFormBody_ts_sig确定这是具体加密位置
在这里插入图片描述

源码分析

接下来找到a2.first怎么来的,看下图确定a2是通过ApiSignatureHelper.a(request)得到的,双击a进入它的具体实现代码
在这里插入图片描述
大家看下图,实际调用是第一个a,不过它重载了另一个a方法,这个才是具体的加密位置
在这里插入图片描述
第一个a传递的三个参数分别是:
request.url().toString():请求url
request.method():请求方式
header:请求头的Authorization参数,如果有则取前七个字符
其实在抓包时就能知道这三个的内容了,所以这点不难
在这里插入图片描述

第二个a直接看到最后一行,最后返回了new Pair<>(HMACHash1.a(str4, sb.toString())String.valueOf(currentTimeMillis))两个值,其中第二个值是时间戳,对应上_ts,所以_sig是通过new Pair<>(HMACHash1.a(str4, sb.toString())得到的
把代码修整一下方便阅读,其中StringPool.AMPERSAND就是&,可以知道加密文本就是对url, methood, authorization三个参数与时间戳进行判断拼接处理,其中url截取的是路径,不包含后缀参数,按本案例来加密文本就是GET&%2Fapi%2Fv2%2Fgroup%2F721771%2Ftopics&1721737945

public static Pair<String, String> a(url, methood, authorization) {String decode;String str4 = FrodoApi.a().e.b;StringBuilder sb = new StringBuilder();sb.append(methood);String encodedPath = HttpUrl.parse(str).encodedPath();sb.append(StringPool.AMPERSAND);sb.append(Uri.encode(decode));if (!TextUtils.isEmpty(authorization)) {sb.append(StringPool.AMPERSAND);sb.append(authorization);}long currentTimeMillis = System.currentTimeMillis() / 1000;sb.append(StringPool.AMPERSAND);sb.append(currentTimeMillis);return new Pair<>(HMACHash1.a(str4, sb.toString()), String.valueOf(currentTimeMillis));
}

双击进去HMACHash1代码,发生其实就是使用的是原生加密,所以现在就差一个密钥就能得到加密算法了。
回去看第二个a,发现密钥是通过FrodoApi.a().e.b得到的,双击进去后发现并没有在此处定义,那就要找到创建它实例的位置,也就是new ZenoConfig()的位置,这里大家记下b参数是第三个传参赋值的
在这里插入图片描述
全局搜索ZenoConfig,观察代码发现只有一处符合,双击进去
在这里插入图片描述
看下图流程,最终锁定在String d2 = FrodoUtils.d();,双击进去
在这里插入图片描述
在这里就能看到赋值的了,这段代码大致意思,c默认值是bHUvfbiVZUmm2sQRKwiAcw==,但是最终值是AESbHUvfbiVZUmm2sQRKwiAcw==加密之后的结果,密钥是Base64.encodeToString(AppContext.a().getPackageManager().getPackageInfo(AppContext.a().getPackageName(), 64).signatures[0].toByteArray(), 0);,分析一下这段代码,getPackageInfo是获取应用信息,getPackageName是包名,PackageInfo.signatures是App的签名。所以最后的密钥是把App签名通过toByteArray()转换为字节数组流,然后Base64一下。
在这里插入图片描述
一般情况下app签名是不变的,所以这里得到HMACHash1密钥也是不会变的,直接使用frida hook拿到密钥

Java.perform(function(){var ba = Java.use("com.douban.frodo.utils.crypto.HMACHash1");ba.a.overload('java.lang.String', 'java.lang.String').implementation = function (a1,a2) {console.log(a1);console.log(a2);var res = ba.a(a1, a2);console.log("计算 result:" + res);return res;}}
)

运行结果:
在这里插入图片描述
拿到密钥,然后构建加密文本就能拿到结果了

def get_sig(url, ts):urlpath = urlparse(url).pathsign = '&'.join(['GET', quote(urlpath, safe=''), ts])print(sign)sig = hmac.new("bf7dddc7c9cfe6f7".encode(), sign.encode(), hashlib.sha1).digest()_sig = base64.b64encode(sig).decode()return _sig

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382138.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于FPGA的以太网设计(3)----详解各类xMII接口

1、什么是xMII接口 MII (Media Independent Interface)接口,即介质无关接口或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准。“介质无关” 表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作。 MII接口是MAC和PHY之间的通信接口,MAC产生…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十三)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 33 节&#xff09; P33《32.通知-进度条通知》 下载按钮对应的逻辑&#xff1a; 取消按钮对应的逻辑&#xff1a; 暂停按钮对应的…

MIT6.824(6.5840) Lab1笔记+源码

文章目录 其他人的内容&#xff0c;笔记写的更好&#xff0c;思路可以去看他们的MapReduceworkermapreduce coordinatorrpc纠错 源码worker.gocoordinator.gorpc.go 原本有可借鉴的部分 mrsequential.go&#xff0c;多看几遍源码 其他人的内容&#xff0c;笔记写的更好&#xf…

C++的STL简介

0.STL简介 C的STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;它提供了一套通用的类和函数模板&#xff0c;用于处理数据结构和算法。STL的主要组件包括&#xff1a; 容器分配器算法迭代器适配器仿函数 容器 容…

vscode 远程 Ubuntu 系统

1、在 Ubuntu 下检查 sshd 守护进程是否开启 ps -aux | grep sshd如果没有开启&#xff0c;请在 Ubuntu 下输入指令安装 sudo apt-get install openssh-server2、首先打开 Windows 下的 vscode&#xff0c;点击左下角图标打开远程窗口 3、打开远程窗口&#xff0c;选择“Con…

排序算法与复杂度介绍

1. 排序算法 1.1 排序算法介绍 排序也成排序算法&#xff08;Sort Algorithm&#xff09;&#xff0c;排序是将一组数据&#xff0c;依照指定的顺序进行排序的过程 1.2 排序的分类 1、内部排序&#xff1a; 指将需要处理的所有数据都加载到**内部存储器&#xff08;内存&am…

领夹麦克风哪个品牌好,电脑麦克风哪个品牌好,热门麦克风推荐

​在信息快速传播的时代&#xff0c;直播和视频创作成为了表达与交流的重要方式。对于追求卓越声音品质的创作者而言&#xff0c;一款性能卓越的无线麦克风宛如一把利剑。接下来&#xff0c;我要为大家介绍几款备受好评的无线麦克风&#xff0c;这些都是我在实际使用中体验良好…

EXCEL怎么自动添加表格吗?

第一步&#xff0c;选中需要添加表格的范围 第二步&#xff0c;点击开始&#xff0c;选择条件格式&#xff0c;“使用公式确定要设置格式的单元格” 第三步&#xff0c;编辑规则说明加上<>"" 第四步&#xff0c;点击边框&#xff0c;选择外边框确定即可&#x…

Adobe国际认证详解-动漫制作专业就业方向和前景

动漫制作专业的就业方向和前景随着创意产业的蓬勃发展而愈发广阔。这一专业涵盖了从角色设计、场景绘制到动画制作、特效合成等多个环节&#xff0c;是创意与技术相结合的典型代表。随着数字媒体和互联网的普及&#xff0c;动漫制作专业人才的需求正不断增长&#xff0c;为该专…

如何将mp4格式的视频压缩更小 mp4格式视频怎么压缩最小 工具软件分享

在数字化时代&#xff0c;视频内容成为信息传播的重要载体。然而&#xff0c;高清晰度的视频往往意味着较大的文件体积&#xff0c;这给存储和分享带来了一定的困扰。MP4格式作为目前最流行的视频格式之一&#xff0c;其压缩方法尤为重要。下面&#xff0c;我将为大家详细介绍如…

谷粒商城实战笔记-跨域问题

一&#xff0c;When allowCredentials is true, allowedOrigins cannot contain the special value “*” since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider u…

java中多态的用法

思维导图&#xff1a; 1. 多态的概念 多态通俗的讲就是多种形态&#xff0c;同一个动作&#xff0c;作用在不同对象上&#xff0c;所产生不同的形态。 例如下图&#xff1a; 2. 多态的实现条件 Java中&#xff0c;多态的实现必须满足以下几个条件&#xff1a; 1. 必须在继承…

MybatisPlus的使用与详细讲解

今天我们来讲解一下Mybatis的升级版&#xff0c;就是MybatisPlus. MybatisPlus是如何获取实现CRUD的数据库表信息的&#xff1f; 默认以类名驼峰转下划线作为表名 默认把名为id的字段作为主键 默认把变量名驼峰转下划线作为表的字段名 1.MybatisPlus中比较常见的注解 TableN…

Golang | Leetcode Golang题解之第241题为运算表达式设计优先级

题目&#xff1a; 题解&#xff1a; const addition, subtraction, multiplication -1, -2, -3func diffWaysToCompute(expression string) []int {ops : []int{}for i, n : 0, len(expression); i < n; {if unicode.IsDigit(rune(expression[i])) {x : 0for ; i < n &…

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测&#xff0…

Yolo-World在自定义数据集上进行闭集词汇训练推理过程(二)——使用ultralytics库训练模型

文章目录 概要训练整体流程推理整体流程 概要 之前的文章已经介绍了如何在本地使用源码的yolo-world进行本地化训练模型&#xff0c;具体请参考&#xff1a;Yolo-World在自定义数据集上进行闭集词汇训练过程 下边介绍一下基于ultralytics库训练yolo-world的方法&#xff0c;非常…

如何防止热插拔烧坏单片机

大家都知道一般USB接口属于热插拔&#xff0c;实际任意带电进行连接的操作都可以属于热插拔。我们前面讲过芯片烧坏的原理&#xff0c;那么热插拔就是导致芯片烧坏的一个主要原因之一。 在电子产品的整个装配过程、以及产品使用过程经常会面临接口热插拔或者类似热插拔的过程。…

ROS2中间件

ROS2 是重新设计的 Robot Operating System&#xff0c;无论从用户API接口到底层实现都进行了改进。这里主要关注ROS2 的中间件。 1. 通信模式 ROS2 使用DDS协议进行数据传输&#xff0c;并通过抽象的rmw&#xff0c;支持多个厂家的DDS实现&#xff08;FastDDS&#xff0c;Cyc…

自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感…

Adobe Dimension(DN)安装包软件下载

目录 一、软件简介 二、软件下载 三、注意事项 四、软件功能 五、常用快捷键 快捷键&#xff1a; 一、软件简介 Adobe Dimension&#xff08;简称DN&#xff09;是Adobe公司推出的一款三维设计和渲染软件。与一般的3D绘图软件相比&#xff0c;DN在操作界面和功能上有所不…