首页 > 编程语言 >某视频tv app 签名算法分析

某视频tv app 签名算法分析

时间:2024-12-26 17:53:05浏览次数:8  
标签:console dump tv app -- 算法 var return AESUtils

一、基本信息

分析工具:objection、frida

二、加解密分析

通过抓包发现请求体里有签名校验 sign ,并且响应体里返回的数据是密文,所以本次的目标就是破解签名 sign 以及响应包加密算法。

2.1 请求签名 sign

从 sign 的数值长度上判断可能是 MD5,先使用 objection hook java.security.MessageDigest.getInstance 判断使用的算法。
android hooking watch class_method java.security.MessageDigest.getInstance --dump-args --dump-backtrace --dump-return

这里看到 com.ximi.video.utils.UserUtils.MD5 调用了 MD5 算法,对这个函数方法进行 hook。
android hooking watch class_method com.xxx.video.utils.UserUtils.MD5 --dump-args --dump-backtrace --dump-return

由此就得到了 sign 的 hash 方式,即 asda26vahEsacdcand+除 sign 之外的请求体参数+eriju4owg5RdsaQocpsdcdadacirgnld,再进行 MD5 。

2.1 响应加解密算法

先 hook javax.crypto.Cipher.doFinal 来判断 APP 加解密算法的调用情况,发现 com.xxx.video.net.AESUtils 进行了调用,AES 加解密的话我们还需要知道密钥和偏移量。
android hooking watch class_method javax.crypto.Cipher.doFinal --dump-args --dump-backtrace --dump-return

对 com.xxx.video.net.AESUtils.decrypt 方法进行 hook,目的主要是得到传参以及参数数据类型,后续可以编写 frida 脚本进行 hook。
android hooking watch class_method com.xxx.video.net.AESUtils.decrypt --dump-args --dump-backtrace --dump-return

编写 frida 脚本用于获取密钥和偏移量。

Java.perform(function() {
  try {
    var AESUtils = Java.use('com.ximi.video.net.AESUtils');
    var SecretKeySpec = Java.use('javax.crypto.spec.SecretKeySpec');
    var IvParameterSpec = Java.use('javax.crypto.spec.IvParameterSpec');

    AESUtils.decrypt.overload('java.lang.String', 'javax.crypto.SecretKey', 'javax.crypto.spec.IvParameterSpec', '[B').implementation = function(s, secretKey, iv, byteArray) {
      console.log('AESUtils.decrypt called with arguments:');

      // cipher mode
      console.log('Cipher Mode: ' + s);

      // 打印 SecretKey 的详细信息
      try {
        // 将 secretKey 转换为 SecretKeySpec
        var castedSecretKey = Java.cast(secretKey, SecretKeySpec);
        var secretKeyBytes = castedSecretKey.getEncoded();
        console.log('SecretKey (getEncoded): ' + bytesToString(secretKeyBytes));
      } catch(e) {
        console.log('Error getting SecretKey bytes: ' + e.message);
      }

      // 打印 IvParameterSpec 的内容
      try {
        var ivBytes = iv.getIV();
        console.log('IvParameterSpec: ' + bytesToString(ivBytes));
      } catch(e) {
        console.log('Error getting IvParameterSpec bytes: ' + e.message);
      }

      var result = this.decrypt(s, secretKey, iv, byteArray);
      return result;
    };

    function bytesToHex(byteArray) {
      var hexString = '';
      for (var i = 0; i < byteArray.length; i++) {
        var hex = (byteArray[i] & 0xff).toString(16);
        hex = (hex.length === 1) ? '0' + hex: hex;
        hexString += hex;
      }
      return hexString;
    }

    function bytesToString(bytes) {
      let str = '';
      for (let i = 0; i < bytes.length; i++) {
        str += String.fromCharCode(bytes[i]);
      }
      return str;
    }

  } catch(e) {
    console.log('Error: ' + e.message);
  }
});

标签:console,dump,tv,app,--,算法,var,return,AESUtils
From: https://www.cnblogs.com/cijian9000/p/18633829

相关文章

  • 字符串匹配:BF算法 | KMP算法 | Z函数
    什么是字符串匹配?给你一个字符串str,问你这个字符串中是否包含字符串sub。例如:str="abcdef",sub="cdef",问str中是不是有sub。一.BF算法BF算法(BruteForce),翻译成中文就是暴力匹配算法。暴力匹配其实很好想,不就让我们判断str中有没有sub嘛,直接一个一个来。定义两个指针,一个指st......
  • 计算机毕业设计—51328 Springboot二手交易平台APP(源码免费领)
    摘要1绪论1.1开发背景1.2开发现状1.3springboot框架介绍1.4论文结构与章节安排2 Springboot二手交易平台APP系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据流程2.2.2业务流程......
  • 用小学生都能理解的方式介绍 TF-IDF 算法
    用小学生都能理解的方式介绍TF-IDF算法什么是TF-IDF?举个例子:小猫和小狗的故事1.计算TF(词频)2.计算IDF(逆文档频率)3.计算TF-IDFTF-IDF的特点另一个例子:更直观的理解总结在信息检索和文本挖掘中,TF-IDF是一个非常重要的算法。它可以帮助我们找到文档中最重要......
  • 算法网关视频分析网关:视频分析技术的准确性和实时性是如何确保的?
    在当今数字化时代,视频分析技术已成为安全监控、交通管理等多个领域不可或缺的工具。然而,确保视频分析技术的准确性和实时性,尤其是在多变的环境条件下,是一个复杂而重要的挑战。以下是一些关键技术和策略,它们共同确保了视频分析技术在各种条件下都能提供高效、准确的结果。1、图像......
  • node.js基于智能算法的健康食材订购系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于健康食材订购系统的研究,现有研究主要以传统的食材订购模式或单一功能的食材相关系统为主,专门针对基于智能算法的健康食材订购系统的研究较少。在国......
  • 基本数据结构——算法学习(三)上
    数据结构——算法学习(三)上前言数据结构是计算机科学的基石,几乎所有的软件开发、算法设计都离不开对数据的组织与管理。它不仅是程序高效运行的保障,也是解决复杂问题的关键工具。学习数据结构的过程,不仅仅是掌握具体的知识点,更是培养逻辑思维能力和问题解决能力的重要途径。在......
  • Android 9.0 app获取当前已连接wifi列表ssid和密码功能实现
    1.前言 在9.0的系统定制化开发中,在一些关于wifi的定制中,有产品需求app中要求获取当前连接wifi和密码功能,在系统原生wifi中是禁止获取wifi连接的密码的,所以就需要对wifi模块进行一部分的修改,来满足app中获取wifi的ssid和密码功能,接下来就来实现这个功能如图:首选看下在a......
  • PyCharm专项训练4 最小生成树算法
    一、实验目的:本文的实验目的是通过编程实践,掌握并应用Prime算法和Kruskal算法来求解给定图的最小生成树问题。二、实验内容:数据准备:使用networkx库创建一个图G,并添加指定的节点和带权重的边。算法实现:实现Kruskal算法,通过构建最小生成树T,并找出构成最小生成树的边......
  • PyCharm专项训练5 最短路径算法
    一、实验目的    本文的实验目的是通过编程实践,掌握并应用Dijkstra(迪杰斯特拉)算法和Floyd(弗洛伊德)算法来解决图论中的最短路径问题。二、实验内容数据准备:使用邻接表的形式定义两个图graph_dijkstra和graph_floyd,图中包含节点以及节点之间的边和对应的权重。算......
  • 【数据集】【YOLO】【目标检测】灭火器识别数据集 3261 张,YOLO灭火器识别算法实战训练
     一、数据集介绍【数据集】灭火器识别数据集3261张,目标检测,包含YOLO/VOC格式标注。数据集中包含1种分类:names:['extinguisher'],表示"灭火器"。数据集图片来自国内外网站、网络爬虫、监控采集等;可用于监控和移动设备灭火器识别。检测场景为工业园区、办公大楼、居民楼......