某软件商店app抓包分析与sign加密算法实现

文章目录

  • [1. 写在前面](#1. 写在前面)
  • [2. 抓包配置](#2. 抓包配置)
  • [3. 抓包分析](#3. 抓包分析)
  • [4. 接口测试](#4. 接口测试)
  • [5. sign加密算法](#5. sign加密算法)
  • [6. 数据效果展示](#6. 数据效果展示)

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

APP逆向分析的第一步,就是抓包分析!抓包这个层面能够碰到的坑那也是数不胜数,现在大一点的APP基本都是自己的协议,然后就是各种防抓包,wifi代理检测,转发检测,证书校验...

做为一名多年爬虫过来人,告诉你爬虫的过往与未来:

基础:

语法,爬虫库+框架,解析库(五花八门),抓包工具(应有尽有),多线程,多进程,分布式爬虫,自动化与存储方案

六七年之前会上面部分加少量的反爬虫对抗能力,去任何一家爬虫业务的企业,爬虫团队长老位必有一席之位!

Web逆向:

浏览器构造,基础语法,Bom、Dom属性与方法,调试技巧与工具,加密定位,代码混淆,补环境,AST,扣代码,算法还原,指纹与风控对抗能力(里面有超过一半需要长期实践加经验积累)

以上两项掌握,如果是在三年前基本在另何一家企业都是爬虫团队的中坚核心力量,首席长老就是你!

APP逆向:

逆向原理,Java 、Smali语法,反编译工具,各种Hook手法与工具,调式与定位技巧,砸壳,加固

还有你见或没见过的各种验证码: 滑块,点选,运算,图文,逻辑

爬虫的尽头无疑就是逆向,根本学不完!


分析目标

T1BQT+i9r+S7tuWVhuW6l++8jOiHquW3seS4i+i9vQ==

2. 抓包配置

这个APP有一个证书校验,如果直接去抓包的话,就是下面这个情况:

这里的话咱们也是可以使用Frida去Hook掉证书验证,当然你需要反编译APP并且定位到验证部分

这里我使用的是Charles + Drony的方案去抓这个APP的包,用什么方案不是唯一的,也可以使用Postren

Android7.0之后默认不信任用户添加到系统的CA证书。所以再这里我们需要把Charles的证书放到手机的系统证书路径下,不然https协议数据包是失败的(保证手机已经root

powershell 复制代码
/etc/security/cacerts #系统证书路径
/data/misc/user/0/cacerts-added #用户证书路径

把Charles证书保存到本地,使用如下命令进行计算:

powershell 复制代码
openssl x509 -subject_hash_old -in wql.pem(文件名)

把上面计算出来的d27ccb05文件拷到手机系统证书下,后缀名的数字是为了防止文件名冲突的,推送到手机命令如下:

powershell 复制代码
adb push d27ccb05.0 /sdcard

adb shell进入到命令行模式,将我们刚刚推送到/sdcard下面的d27ccb05.0证书移动系统中证书路径下去,如下所示:

bash 复制代码
su #切换权限
cd /sdcard # 切换目录
mv d27ccb05.0 /etc/security/cacerts # 移动证书

然后我们再到手机上看系统证书,就可以看到我们刚刚移动进去的证书文件了, 如下所示:

接下來,Drony配置如下,主要一个就是局域网IP地址加端口,这个端口就是Charles的端口,如下所示:

最后下拉点击规则配置,这里的话选择我们抓包的APP应用即可,如下所示:

3. 抓包分析

在完成上面配置准备之后,就可以开始抓包了,打开APP跟Charles还有Drony,APP内点击搜索一下关键词,抓一下搜索接口的请求,搜索接口抓包信息如下所示:

可以看到headers的请求参数很多,但是大部分都是固定值。动态的有sign、id

下面再抓一下请求信息接口,可以看到参数基本都是一样的,两个接口不一样的地方就是sign加密参数内容有变化

4. 接口测试

我们先把抓包请求拿出来放到Postman工具内测试验证一下,搜索接口测试如下所示:

详情接口测试如下所示:

证明接口都是没有问题的~

5. sign加密算法

sign加密生成主要通过多个参数id、ocs、oak、salt做md5计算实现的

然后就是URL也参与了加密,md5之前的加密明文如下:

salt是一串盐字符串,固定的几个参数,将APK反编译后全局搜索能够找到,由于我这里7+版本的app删掉了,就不再验证展示

直接上算法,核心加密生成算法如下所示:

javascript 复制代码
const crypto = require('crypto');

function getMd5(body) {
    return crypto.createHash('md5').update(body, 'utf8').digest('hex');
}

function getSign(url, t) {
    const oak = "cdb09c43063ea6db";
    const oakRear = "08f4fe8a43775179bdc58acb383220bc";
    const idd = "867686020" + Math.floor(Math.random() * (999999 - 100000 + 1) + 100000) + "///";
    const ocs = "google%2FNexus+6P%2F23%2F6.0.1%2FUNKNOWN%2F2%2FMHC19Q%2F7902";
    const salt = "STORENEWMIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANYFY/UJGSzhIhpx6YM5KJ9yRHc7YeURxzb9tDvJvMfENHlnP3DtVkOIjERbpsSd76fjtZnMWY60TpGLGyrNkvuV40L15JQhHAo9yURpPQoI0eg3SLFmTEI/MUiPRCwfwYf2deqKKlsmMSysYYHX9JiGzQuWiYZaawxprSuiqDGvAgMBAAECgYEAtQ0QV00gGABISljNMy5aeDBBTSBWG2OjxJhxLRbndZM81OsMFysgC7dq+bUS6ke1YrDWgsoFhRxxTtx/2gDYciGp/c/h0Td5pGw7T9W6zo2xWI5oh1WyTnn0Xj17O9CmOk4fFDpJ6bapL+fyDy7gkEUChJ9+p66WSAlsfUhJ2TECQQD5sFWMGE2IiEuz4fIPaDrNSTHeFQQr/ZpZ7VzB2tcG7GyZRx5YORbZmX1jR7l3H4F98MgqCGs88w6FKnCpxDK3AkEA225CphAcfyiH0ShlZxEXBgIYt3V8nQuc/g2KJtiV6eeFkxmOMHbVTPGkARvt5VoPYEjwPTg43oqTDJVtlWagyQJBAOvEeJLno9aHNExvznyD4/pR4hec6qqLNgMyIYMfHCl6d3UodVvC1HO1/nMPl+4GvuRnxuoBtxj/PTe7AlUbYPMCQQDOkf4sVv58tqslO+I6JNyHy3F5RCELtuMUR6rG5x46FLqqwGQbO8ORq+m5IZHTV/Uhr4h6GXNwDQRh1EpVW0gBAkAp/v3tPI1riz6UuG0I6uf5er26yl5evPyPrjrD299L4Qy/1EIunayC7JYcSGlR01+EDYYgwUkec+QgrRC/NstV";
    
    const middleBody = ocs + t + idd + url.split('.com').slice(-1)[0].replace("?", "");
    const length = (middleBody.length + 48).toString();
    const body = oak + oakRear + middleBody + length + salt;

    return getMd5(body);
}

const url = "https://api-cn.store.heytapmobi.com/search/v1/search?start=0&tabId=&searchType=10&size=10&keyword=快手"
const timestamp = Math.floor(Date.now() / 1000); // 当前时间戳
console.log(getSign(url, timestamp));

6. 数据效果展示

搜索接口与详情接口请求headers:

详情页面数据内容:

好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

相关推荐
柠檬少少开发13 分钟前
图像拼接算法及实现(一)
人工智能·算法·计算机视觉
weixin_486681141 小时前
C++系列-STL容器中统计算法count, count_if
开发语言·c++·算法
一道秘制的小菜1 小时前
C++第七节课 运算符重载
服务器·开发语言·c++·学习·算法
咕噜咕嘟嘟嘟2 小时前
343. 整数拆分
数据结构·算法
WenGyyyL3 小时前
力扣最热一百题——二叉树的直径
java·c++·算法·二叉树·深度优先
sdlkjaljafdg3 小时前
vector<bool>性能测试
开发语言·c++·算法
muyierfly3 小时前
36.贪心算法3
算法·贪心算法
Kenneth風车4 小时前
【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·分类·数据分析·回归
m0_631270406 小时前
标准C++(二)
开发语言·c++·算法
沫刃起6 小时前
Codeforces Round 972 (Div. 2) C. Lazy Narek
数据结构·c++·算法