Python实现XX短视频加密算法抓包分析及刷邀请
Python实现XX短视频加密算法抓包分析及刷邀请
出自:https://zhuanlan.zhihu.com/p/466929667?utm_id=0

0x00 工具准备
- Fiddler(代理抓包)
- Xposed(hook框架)
- Inspeckage(通用hook插件,备选算法助手)
- HEX编码转换(base64转HEX)
- 雷电模拟器(雷电3绿化版)
- ProxyDroid(代理转发工具,用Gitee一键编译的)
想学Python的小伙伴可以关注小编的 公众号【Python日志】
各工具使用方法介绍等详细内容可参考各自文档或百度。
0x01 理想的分析过程
新建模拟器,安装好目标APP及工具,先不要打开目标APP。
1、用ProxyDroid解决抓不到包的问题
打开ProxyDroid按下图示例填好代理服务器IP、端口,协议选HTTP(就算抓HTTPS,也选HTTP)

下滑可以选择用全局代理还是分应用代理,这里直接全局代理了。

代理服务器IP、端口为Fiddler中的代理,默认8888端口,IP为局域网IP,在Fiddler右上角有如下所示的图标,可以在上面悬停鼠标,就会显示局域网地址,一般为192.168..。

2、用Inspeckage自动hook加密算法及hash
打开Inspeckage,选择目标APP,界面如下。

根据图中提示转发8008端口到电脑,即在模拟器运行目录下打开cmd,再输入:
'''
adb forward tcp:8008 tcp:8008
'''
此时在电脑浏览器中打开http://127.0.0.1:8008/即可看到Inspeckage网页界面。
点开设置,将不需要的都关掉,只留Crypto和Hash两个,打开自动刷新。

3、开始分析
工具都配置好后,打开目标APP,直到成功绑定邀请码。(或者在开屏广告停留一下,查看Inspeckage的Crypto,出结果后关闭自动刷新,因为不知道为什么这里会自动清除记录,偏偏刚启动会有个注册的包要用到。)
分析方法是根据Fiddler中数据包参数去Inspeckage中寻找对应的加解密输入输出。
- 点开绑定邀请码的包,绑定邀请码的时候看着Fiddler,很好确定是哪个包,不出意外的话就是目标域名在Fiddler中最下方倒数第二个。

可以看到发送参数有3个,一个时间戳,一个HEX格式的data,一个MD5的sign。
- 在Inspeckage的Crypto中搜索自己输入的邀请码,没搜到就把折叠起来的加密数据点开再搜,明文在前的是加密,base64在前的是解密。

这里可以确定:
- 加密算法是AES,
key是h3PV8o444kNybrx77icyiriQ2q0uTjqUSsFRfaynkT8=(base64编码),iv是DrRMfzwgpjgI1sIjfW8aXw==(base64编码),- 解密模式是
AES/CFB/NoPadding, - 加密数据格式为
{"mod":"user","build_id":"a1000","token":"","oauth_id":"xxxxx","oauth_type":"android","aff":"xxxxx","app_status":"xxxx:2","version":"4.5.5","apiV2":"v2","app_type":"local","code":"invitation"}
- 把加密结果用HEX编码转换转为HEX,发现和data中去除前32个字符之后对的上。根据上一篇文章的经验,这32个字符应该是
IV。把刚刚得到的iv即DrRMfzwgpjgI1sIjfW8aXw==转为HEX,发现正好和data前32位相等。

这里可以确定:发送的data是iv与加密数据的HEX编码拼接而成。
- 再用同样的方法,去Hash界面中搜抓到的sign,可以看到是一长串hash进行MD5加密。
- 继续搜这一长串hash,发现正好是下面一条SHA256加密的结果。

加密字符串格式为data={}xtamp={}132f1537f85sjdpcm59f7e318b9epa51
- 这时候拿去验证SHA256,发现结果对不上。仔细看一下,发现timestamp没完全显示,估计出了点问题,手动补全为
data={}×tamp={}132f1537f85sjdpcm59f7e318b9epa51,再次验证发现没问题了。

- 加密的数据已经差不多弄清楚了,那返回的data解密应该也是一样的。将前面得到的key和iv拿去解密,发现不对。这个时候根据前面的经验,猜测返data也是前32位为iv,后面为待解密数据,一试发现果然如此。

由于各种AES加解密工具都把输入输出格式固定死了,很少有支持HEX或base64编码的输入以及key、iv,所以建议写代码验证或者使用其他工具,或者手动转换编码再去用工具验证,这里是将待解密数据[HEX转为base64][],将key、iv转为HEX,再用工具验证
- 到这里只看了绑定邀请码的包,现在再去看看注册的包,毕竟不注册没办法刷邀请。根据Fiddler中先后顺序,依次将发包的data解密查看,结果没有发现注册字样,且多个data完全相同。所以可以猜测,要么是没抓到注册包,要么是这些数据包自动完成了注册。
分析部分到这里就可以结束了,有key、有iv、有加解密数据模板、有sign模板,可以直接写代码了。
4、怎么全是猜测?
看到这里,我也纳闷,怎么都是猜的,直接分析能猜到这些吗?
估计还真不好猜。
因为实际分析过程并不是这么顺利,所以中间反编译看了源码,同时结合上一次分析蚂蚁加速器的经验,所以很多东西都一眼看出来了,这两个APP加密基本相同。
想学Python的小伙伴可以关注小编的 公众号【Python日志】
0x02 实际分析过程
这里使用雷电3,即安卓5,因为安卓7安装证书麻烦。绿化版来自派大星模拟器多开助手网站。
开局先抓包,打开Fiddler、模拟器中设置好代理、安装证书、打开APP。
一顿操作猛如虎,一看结果啥也没有,而且APP能正常打开正常使用。这时候就可以猜测,APP禁用了代理。
一般防抓包措施自行了解。抓不到包的时候,如果APP闪退或者不能访问网络,则有可能是检测了代理;如果APP正常使用,那应该是禁用了代理。
这里可以使用抓包精灵、小黄鸟等手机端的抓包工具,或者用代理工具转发流量到Fiddler,因为手机端不方便操作,所以这里用ProxyDroid来转发流量。
用其他工具可以,比如Drony、Postern、socksdroid,不过我推荐用ProxyDroid,代理模式齐全,设置过程简单明确。
用了代理工具,结果还是没有抓到想要的包,有点不对劲,我开始怀疑它不是HTTP协议,可能用了ws或者tcp。
这里就没头绪了,所以只能去看Inspeckage的结果,然后反编译(没加壳)找算法,找半天找到了。这个时候可以用frida取hook到结果了,但是我还是想试试能不能抓到包。
之后陆续尝试了用Inspeckage添加代理、用socks代理,都没成功。
最后无意中发现,新建模拟器后第一次打开这个APP的时候用ProxyDroid可以抓到包,之后测试多次,无论什么姿势,除了第一次打开之外都抓不到包,难道除了第一次之外都改用了tcp?
不过好在还是抓到了包,这时候结合Inspeckage中hook到的加密算法和hash,就可以拼接出请求的数据包了,详情见上方。
还是想不通为什么,希望有知道的大佬能解惑。
Python代码
# -*- encoding: utf-8 -*-
'''
@File : 91.py
@Time : 2022年02月13日
@Author : erma0
@Version : 1.0
@Link : https://erma0.cn
@Desc : xx短视频刷邀请
'''
import requests
import time
import json
from base64 import b64decode
from hashlib import sha256, md5
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# from Crypto.Hash import SHA256, MD5 # 和hashlib库一样
class Aff(object):
"""
xx短视频刷邀请
"""
def __init__(self, aff: str = "gcKyA"):
Python实现XX短视频加密算法抓包分析及刷邀请的更多相关文章
- python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫
用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...
- python编写网络抓包分析脚本
python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...
- Python 爬虫知识点 - 淘宝商品检索结果抓包分析(续二)
一.URL分析 通过对“Python机器学习”结果抓包分析,有两个无规律的参数:_ksTS和callback.通过构建如下URL可以获得目标关键词的检索结果,如下所示: https://s.taoba ...
- Python 爬虫知识点 - 淘宝商品检索结果抓包分析(续一)
通过前一节得出地址可能的构建规律,如下: https://s.taobao.com/search?data-key=s&data-value=44&ajax=true&_ksT ...
- Python 爬虫知识点 - 淘宝商品检索结果抓包分析
一.抓包基础 在淘宝上搜索“Python机器学习”之后,试图抓取书名.作者.图片.价格.地址.出版社.书店等信息,查看源码发现html-body中没有这些信息,分析脚本发现,数据存储在了g_page_ ...
- 抓包分析、多线程爬虫及xpath学习
1.抓包分析 1.1 Fiddler安装及基本操作 由于很多网站采用的是HTTPS协议,而fiddler默认不支持HTTPS,先通过设置使fiddler能抓取HTTPS网站,过程可参考(https:/ ...
- 抓包分析SSL/TLS连接建立过程【总结】
1.前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下.开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来 ...
- Wireshark抓包分析HTTPS与HTTP报文的差异
一.什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换 ...
- 聊聊tcpdump与Wireshark抓包分析
1 起因# 前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况.这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了.在排查 ...
- 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...
随机推荐
- P1314 聪明的质监员(题解)
题目 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) ...
- week_9(推荐系统)
Andrew Ng 机器学习笔记 ---By Orangestar Week_9(推荐系统) 1. Problem Formulation 这节就仅仅简单地介绍了一下 推荐系统的应用和实例.完全可以略 ...
- Python从入门到精通(第2版)——pyuic5: error: no such option: -m的问题解决
前言 在学习<Python从入门到精通(第2版)>的第15章 GUI界面编程--15.2.4 将.ui文件转换为.py文件时,按照书中步骤出错时的问题解决,希望对同样学习本书的同学有所帮助 ...
- Kubernetes 部署 - DevOps CI/CD详细指南
什么是Kubernetes部署? 在此文章中,我们将探索Kubernetes(K8s),结合DigitalOcean Kubernetes集群与Buddy自动化运维系统部署以达到以下列出的目标: 使 ...
- S2-032 CVE-2016-3081 远程代码执行
漏洞名称 CVE-2016-3081 S2-032 远程代码执行 利用条件 Struts 2.3.20 - Struts Struts 2.3.28 ( 2.3.20.3 和 2.3.24.3 除外) ...
- [cocos2d-x]飞机大战 遇到的bug和总结(一)
第一点: Sequence* sequence=Sequence::create(actionMove, actionFinished,NULL); create方法的最后必须加上NULL,不然会报出 ...
- 低版本客户端连接高版本数据库报错ORA-28040、ORA-01017
测试环境: 客户端:Oracle 11.2.0.1 服务端:Oracle 19.16 测试过程: 1.低版本客户端连接高版本数据库报错ORA-28040 2.低版本客户端连接高版本数据库报错ORA-0 ...
- SQL优化的一些方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- MySQL 合并查询union 查询出的行合并到一个表中
在合并查询中,尤其是二分类的情况,在查询结果是相同列名的时候可以考虑合并查询.先查询出行的结果,再使用union或者union all合并查询结果. 另外如果 union 和 order by 一起使 ...
- Android第五次作业
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...