某广告SDK流量加解密-响应
接着上次的写,这次跟一下响应数据的解密
响应
看过这么多广告sdk,他们的流量数据,基本都是放在 JSONObject 中,所以直接从 JSONObject 中下手hook就稳稳的
其调用栈为如下:
根据上面的调用栈对 com.bytedance.sdk.openadsdk.core.q 的 g 函数 hook
其参数如下:
发现该函数的参数还是密文,说明密文就是在 g 函数内部进行解密的,其解密函数就是下面的 b 函数:
在 b 函数中先对密文进行切割,然后将切割的字符串传入 a.b 函数中
其中参数三还被函数a处理过
由上面可知 a.b 函数的三个参数依次为:
参数一为:密文的第50位到结尾
参数二为:密文第34位到49位
参数三为:密文第2位到33位,前16位与后16位对换
a.b 函数为如下:
函数具体解密逻辑为:
1 对参数一先用base64解密
2 由参数三生成密钥
3 设置解密模式为 "AES/CBC/PKCS5Padding"
4 初始化解密参数,写入参数三生成的密钥,并由参数二生成初始化向量
5 对参数一base64解密后的数据进行解密
到这里穿山甲流量的解密就完成了,直接copy代码写了一个解密的jar包
CSJDcrypt.java
package com.yooha;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.FileReader;
import java.io.IOException;public class CSJDcrypt {public static void main(String[] args) throws IOException {String s = readfile(args[0]);System.out.println(decrypt(s));}public static String readfile(String filename) throws IOException {FileReader fileReader=new FileReader(filename);int length=0;char[] cfile = new char[0X1000 * 100];int index = 0;while((length=fileReader.read())!=-1) {cfile[index++] = (char)length;}char[] newstr = new char[index + 1];for(int i = 0; i < index; i++){newstr[i] = cfile[i];}newstr[index] = 0;fileReader.close();return new String(newstr);}public static String a(String str, int i2) {if (str == null || str.length() != i2) {return null;}int i3 = i2 / 2;return str.substring(i3, i2) + str.substring(0, i3);}public static String decrypt(String str) {if (isEmpty(str) || str.length() < 49) {return str;}String a = a(str.substring(1, 33), 32);String substring = str.substring(33, 49);return (substring == null || a == null) ? str: _decrypt(str.substring(49), substring, a);}public static String _decrypt(String str, String str2, String str3) {if (isEmpty(str)) {return null;}try {byte[] decode = MyBase64.decode(str.getBytes());System.out.println("str3 = " + str3);SecretKeySpec secretKeySpec = new SecretKeySpec(str3.getBytes(), "AES");System.out.println("str3 = " + secretKeySpec.getEncoded());Cipher instance = Cipher.getInstance("AES/CBC/PKCS5Padding");instance.init(2, secretKeySpec, new IvParameterSpec(str2.getBytes()));String ret = new String(instance.doFinal(decode), "utf-8");return ret;} catch (Exception e2) {System.out.println("_decrypt -> error = " + e2.getMessage());return null;}}public static boolean isEmpty(String str){if (str.length() == 0){return true;}return false;}}
MyBase64.java
这个是网上找的一个Base64,你们自己找个能跑起来就行
后来想想,之前有个沙箱当时就是用python调用jar包解密,搞的有点麻烦,沙箱越轻越好,还是直接用python解算了,然后了解了一下Crypto,挺好用的,写了个python的解密脚本
# -*- coding: utf-8 -*-
import base64
from Crypto.Cipher import AES class AES_CIPHER(object):#解密函数 ("AES/CBC/PKCS5Padding");@classmethoddef _decrypt(cls, str1, str2, str3):cryptor = AES.new(str3.encode("utf8"), AES.MODE_CBC, str2.encode("utf8"))plain_text = cryptor.decrypt(base64.b64decode(str1))unpad = lambda s: s[0:-ord(s[-1:])]return unpad(plain_text)@classmethoddef decrypt(cls, info):if len(info) < 49:return infoelse:return cls._decrypt(info[49:], info[33:49], info[1:33][16:32] + info[1:33][0:16]).decode('utf-8')if __name__ == '__main__':with open("flow.txt", "r", encoding='utf-8') as out:info = out.readline()print(AES_CIPHER.decrypt(info))
没错,用python写代码就是这么少。下面是解密内容
后面我写了一个广告sdk自渲染广告的监控工具,链接:https://github.com/YoooHaaa/renderAd
有兴趣可以去看看,工具拿来把js脚本改改,就能复用到其他业务上
某广告SDK流量加解密-响应相关推荐
- 某广告SDK流量加解密-请求
今天刚好在看某甲广告sdk,发现他请求跟响应的数据都是加密的,于是跟了一下,做个记录. 样本的话,随便那个apk都行,现在基本99%应用都集成了穿山甲 请求 先找一个sdk中请求广告的函数开始跟(sd ...
- 移动安全-Burpy自动化加解密APP报文
文章目录 前言 Burpy实战 演示环境 插件简介 RPC脚本 Burpy效果 手动加解密 自动加解密 总结 前言 我在前面一篇博文 移动安全-Brida加解密数据 中介绍了如何使用 Brida 插件 ...
- 软件安全加解密,程序授权管理控件CrypKey SDK
CrypKey SDK 为软件开发者提供极为灵活的执行副本保护和自定义许可策略.通过 CrypKey SDK,函数调用被开发者嵌入到被保护程序的源码中. 具体功能: 创建自定义对话框 保护程序的特定方 ...
- android 中动态加载广告sdk
关于动态加载sdk的话题,网上介绍比较多:今天通过第三方工具来取个巧,虽然方法也有点不太靠谱,但终归是一个思路. 项目里面接入了穿山甲sdk和广点通sdk广告,结果放到应用市场时说被拒了,因为有广告, ...
- Popular MVC框架请求响应数据加解密@Decrypt和@Encrypt的使用示例
简介 此项目用于演示popularmvc如何提供统一全自动化的API隐私数据保护,并且可以做到业务无感和灵活指定数据加解密算法. 请求数据加密使用@Decrypt注解,响应信息加密使用@Encrypt ...
- 自动加解密请求包响应包插件(autoDecoder)
之前所立的一个flag:明文传,明文响应:密文传,密文响应 0x01 背景 当数据包里都是密文,我们无从下手:就算是获得了加解密的一些关键信息,能解密出来,但是每个数据包我们都需要慢慢解密,请求包需要 ...
- 微信加解密流程,证书作用讲解,官方SDK使用教程
微信支付接口常用参数及证书区分 1. 私钥和证书 1.1 商户API证书 1.1.1 功能介绍 API证书,是指由商户申请的,用来证实商户身份的证书.API证书由证书授权机构Certificate A ...
- 警惕!国内某广告SDK内置“后门”功能,Google Play商店已强制下架
本文讲的是警惕!国内某广告SDK内置"后门"功能,Google Play商店已强制下架, 新闻摘要 Lookout安全团队近日发现了个信的广告软件开发工具包(SDK),可以通过下载 ...
- android广告SDK原理详解(附源码)
广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告 ...
最新文章
- 上传图片配置控制大小_esp32-cam拍照上传云平台,http协议传输
- Datawhale实验室
- 分布式系统,session共享方案
- 使用Canvas进行验证码识别
- K - 老鼠走迷宫(DFS)
- Open vSwitch实验常用命令
- 中希尔排序例题代码_超全面分析十大排序算法
- CentOS6/CentOS7系统配置IPv6地址的方法
- vc2010c语言,VC2010下载_VisualC++2010官方下载「vc2010」-太平洋下载中心
- thought works培训总结
- .net mvc笔记3_Understanding Razor Syntax
- Pandas数据分析实战(1)——探索Chipotle快餐数据
- waterfall 上拉加载 下拉刷新
- Qt官方示例-QLineEdit编辑器
- AMD RX 7700XT、7800XT和7600显卡参数 RX 7700XT、7800XT和7600相当于什么水平
- java中的双冒号操作符
- 教师资格证科目二客观题汇总
- 上班族最常用数据图表分析软件有哪些
- [论文阅读]A Joint Training Dual-MRC Framework for Aspect Based Sentiment Analysis
- 软件安装和点亮流水灯
热门文章
- 【json】json文件中文乱码
- 阿里云国际站云服务器可以用来做什么业务?
- 优秀的html布局,优秀的网页设计中常见的六大布局
- Calcite优化规则之ProjectAggregateMergeRule
- 《当下的启蒙》的概述和精华
- iPhone 导入照片显示时间不是拍摄时间
- c 语言提取左右声道数据
- 菏泽话务员机器人方案_智能打电话机器人让电话营销变得更简单
- iOS Xcode提交IPA时收到苹果邮件ITMS-90338: Non-public API usage
- org.apache.dubbo 2.7.7 服务端处理请求及时间轮(失败重试)