某美颜app sig参数分析
之前转载过该app的文章,今天翻版重新整理下,版本号:576O5Zu+56eA56eAYXBwIHY5MDgw (base64 解码)。
上来先抓个包:

jadx搜索关键词 "sigTime",然后定位到这里

看这行代码 cVar.addForm(INoCaptchaComponent.sig, generatorSig.sig); ,看下INoCaptchaComponent.sig 其实就是 "sig",感觉是这里大差不差。

sig 是由 generatorSig.sig 计算出来的,跟进去。

这里是定义了一个 静态 SigEntity,看下大概的功能就是做下参数拼接,底部是调用nativeGeneratorSigOld(str, bArr, str2) 方法,继续跟进去。

这里最终是调用了public static native SigEntity nativeGeneratorSigOld(String str, byte[][] bArr, String str2) 方法,是一个native方法,用到的so是release_sig。
用ida pro 打开这个so 看看,继续跟进。
先看看导出表

搜索"java_",可以看到java层注册的函数名,没错是个静态注册的,而且没有什么混淆。

先看 Java_com_meitu_secret_SigEntity_nativeGeneratorSig 函数

先看下 v10 = ValidateKey::getValidateResult() 大概就是检验是否合规的key

进来这里调用了 JavaHelper::getAndroidAPKKeyHash 函数,看起来像是校验 apk 签名
然后再看下 GeneratorSIG 函数,看字段命名 就像是,瞎猜的。

刚开始掉用了一个 GetSecretKey 函数,获取 key,接着是拼接一些不明的字符串,最后调用了 MD5_Calculate 计算函数。
着重分析下这个
这个MD5_Calculate 函数 重要的是由三部分组成 MD5_Init, MD5_Update, MD5_Final。

init 这里 全都是MD5标准的常量

最核心的加密都是在MD5_Update里面。

静态分析到此结束,开始上 frida 动态调试下。
先hook下 com.meitu.secret.SigEntity和_Z13MD5_CalculatePKcjPc函数看看。
打印下看看

把MD5_Calculate 方法的入参参数2 用hexdump转换成正常的字符串,在md5加密下,是cb67c671be0f0de69cfa310007eb146c,果然和hook出来的so层加密是一样的。

但是会发现 so层加密 cb67c671be0f0de69cfa310007eb146c 和 SigEntityB-结果:bc766c17ebf0d06ec9af130070be41c6 值不一样,仔细对比会发现他们是相邻的两个字符互换得来。
把_Z13MD5_CalculatePKcjPc 函数的入参参数 和抓包拿到的请求参数对比,我们会发现,它其实是把get请求后面的参数,先排序,然后再拼接,在拼接的过程中各拼接了2个盐值(xxxxxx 手动马赛克),最后MD5计算出来的。
最后 最后当然是 python 算法还原了。
看看效果:

水文一篇,再接再续。
相关文章:
某美颜app sig参数分析
之前转载过该app的文章,今天翻版重新整理下,版本号:576O5Zu56eA56eAYXBwIHY5MDgw (base64 解码)。 上来先抓个包: jadx搜索关键词 "sigTime",然后定位到这里 看这行代码 cVar.addForm(INoCaptchaComponent.sig, genera…...
Linux - Linux系统优化思路
文章目录影响Linux性能的因素CPU内存磁盘I/O性能网络宽带操作系统相关资源系统安装优化内核参数优化文件系统优化应用程序软件资源系统性能分析工具vmstat命令iostat命令sar命令系统性能分析标准小结影响Linux性能的因素 CPU CPU是操作系统稳定运行的根本,CPU的速…...
2.Elasticsearch入门
2.Elasticsearch入门[toc]1.Elasticsearch简介Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。客户端支持Java、.NET(C#)、PHP、Pyth…...
RK3399平台开发系列讲解(应用开发篇)断言的使用
🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…...
云原生系列之使用prometheus监控nginx
前言 大家好,又见面了,我是沐风晓月,本文主要讲解云原生系列之使用prometheus监控nginx 文章收录到 csdn 我是沐风晓月的博客【prometheus监控系列】专栏,此专栏是沐风晓月对云原生prometheus的的总结,希望能够加深自…...
第六届省赛——8移动距离(总结规律)
题目:X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 1…...
C++vector 简单实现
一。概述 vector是我们经常用的一个容器,其本质是一个线性数组。通过对动态内存的管理,增删改查数据,达到方便使用的目的。 作为一个线性表,控制元素个数,容量,开始位置的指针分别是: start …...
通用缓存存储设计实践
目录介绍 01.整体概述说明 1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析 02.市面存储方案 2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足 03.存储方案原理 3.1 Sp存储原理分析3.2 MMKV存储…...
sheng的学习笔记Eureka Ribbon
Eureka-注册中心Eureka简介官方网址:https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…...
零代码工具我推荐Oracle APEX
云原生时代零代码工具我推荐Oracle APEX 国内的低码开发平台我也看了很多,感觉还是不太适合我这个被WEB抛弃的老炮。自从看了Oracle APEX就不打算看其它的了。太强大了,WEB服务器都省了,直接数据库到WEB页面。功能很强大,震撼到我…...
InstructGPT方法简读
InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大,并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”,几乎不具有可解释性和可控性,因此&…...
SpringCloud-5_模块集群化
避免一台Server挂掉,影响整个服务,搭建server集群创建e-commerce-eureka-server-9002微服务模块【作为注册中心】创建步骤参考e-commerce-eureka-server-9001修改pom.xml,加入依赖同9001创建resources/application.yml9002的ymlserver: # 修改端口号por…...
AQS底层源码深度剖析-BlockingQueue
目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…...
Kotlin协程:Flow的异常处理
示例代码如下:launch(Dispatchers.Main) {// 第一部分flow {emit(1)throw NullPointerException("e")}.catch {Log.d("liduo", "onCreate1: $it")}.collect {Log.d("liudo", "onCreate2: $it")}// 第二部分flow …...
qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)
前言 MP4,是最常见的国际通用格式,在常见的播放软件中都可以使用和播放,磁盘空间占地小,画质一般清晰,它本身是支持h264、AAC的编码格式,对于其他编码的话,需要进行额外处理。本文提供了ffmpeg录…...
C#读取Excel解析入门-1仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在
业务中也是同样的功能点实现。只是多扩展了很多代码,构成了项目的其他部分,枝干所在。但是有用的枝干,仅仅不超过三个主要的!所以您仅仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在了 str…...
一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)
文章目录 知识回顾问题描述解决过程经验分享各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信五",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 我们在前面章回中介绍了如何使用MQTT通信,包含它…...
100种思维模型之混沌与秩序思维模型-027
人类崇尚秩序与连续性,我们习惯于我们的日常世界,它以线性方式运作,没有不连续或突跳。 为此,我们学会了期望各种过程以连续方式运行,我们的内心为了让我们更有安全感,把很多事物的结果归于秩序,…...
Java开发 - Redis初体验
前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库。两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的了解和学习上。学完本…...
Python - 使用 pymysql 操作 MySQL 详解
目录创建连接 pymsql.connect() 方法的可传参数连接对象 conn pymsql.connect() 方法游标对象 cursor() 方法使用示例创建数据库表插入数据操作数据查询操作数据更新操作数据删除操作SQL中使用变量封装使用简单使用: import pymysqldb pymysql.connect(host,user…...
AC6966B开发板开发准备-环境搭建:Windows下JL杰理AC696N开发环境配置
引言做蓝牙音频、音箱或IoT产品的开发,最怕的不是写代码,而是环境配半天跑不起来。JL杰理AC696N这颗芯片在耳机、音箱方案里很常见,性价比高,外设也全,但第一次接触杰理方案时,环境配置往往要先踩几个坑。尤…...
DirectSPI:STM32寄存器级零开销SPI驱动库
1. DirectSPI 库概述DirectSPI 是一个面向特定 STM32 微控制器系列的超高速、零抽象层 SPI 驱动库。其设计哲学与标准 HAL/LL 库截然不同:不封装寄存器访问,不引入中间状态机,不进行参数校验,不依赖 CMSIS 启动文件或系统时钟配置…...
用户样式管理新范式:Stylus如何重塑跨浏览器自定义体验
用户样式管理新范式:Stylus如何重塑跨浏览器自定义体验 【免费下载链接】stylus Stylus - Userstyles Manager 项目地址: https://gitcode.com/gh_mirrors/sty/stylus 在当今多浏览器并存的互联网生态中,用户面临着网页样式个性化的核心痛点&…...
API网关选型指南:从Nginx到Kong的5个关键决策点(含实战代码)
API网关选型指南:从Nginx到Kong的5个关键决策点(含实战代码) 在数字化转型浪潮中,API作为系统间通信的桥梁,其管理效率直接影响业务敏捷性。当团队面临每秒数千次API调用时,选择合适的网关技术栈往往成为架…...
强烈建议Java面试后一定要及时“复盘”!
金三银四到了,不知道大家在这之前是否都拿到了自己理想的Offer?是否做好面试的复盘?对于我们做技术的来讲,每次面试之后的复盘工作非常重要,一次好的复盘能让我们认识到自己的短板,明确我们后续努力的方向&…...
Halcon实战:用Smallest_rectangle2算子精准定位农产品尺寸(附完整代码)
Halcon实战:用Smallest_rectangle2算子精准定位农产品尺寸(附完整代码) 在农业自动化分选线上,一颗大蒜的尺寸偏差可能直接影响出口等级评定。传统人工抽检不仅效率低下,面对每小时数吨的吞吐量时,误差率往…...
【Dlib人脸识别】2. 基于欧氏距离的人脸匹配实战解析
1. 欧氏距离在人脸匹配中的核心作用 人脸识别技术的核心挑战在于如何量化两张人脸的相似度。Dlib采用128维特征向量来表示人脸特征,而欧氏距离就是衡量这些高维向量相似度的标尺。想象一下,我们把每个人脸特征看作星空中的一个星座,距离越近的…...
Halcon实战:用shape_trans算子5分钟搞定不规则区域的最小外接矩形提取
Halcon实战:5分钟精准提取不规则区域最小外接矩形的工业级方案 在工业视觉检测领域,我们常常需要从复杂的背景中快速定位目标物体的精确边界。无论是印刷电路板上的字符识别、机械零件的尺寸测量,还是包装盒的位置校准,准确的目标…...
Java初级项目如何实现图书管理系统
Java的核心目标是掌握基本语法、面向对象编程和简单的控制台交互。该系统不需要数据库或图形界面,可以通过集合存储数据来满足学习需求。以下是如何从功能设计到代码结构逐步实现的。1. 明确基本功能基本的图书管理系统通常包括以下操作:添加图书&#x…...
ValueCell:构建金融投资决策生态系统的多智能体架构设计哲学
ValueCell:构建金融投资决策生态系统的多智能体架构设计哲学 【免费下载链接】valuecell ValueCell is a community-driven, multi-agent platform for financial applications. 项目地址: https://gitcode.com/gh_mirrors/va/valuecell 在当今信息过载的金融…...
