首页 > 其他分享 >mPaas抓包分析和数据加解密

mPaas抓包分析和数据加解密

时间:2024-03-14 14:33:20浏览次数:100  
标签:调用 加密 rQ 加解密 mPaas 0f encode encrypt 抓包

mPaaS是阿里研发的一个移动开发平台,其中移动网关服务(Mobile Gateway Service,简称 MGS)作为 mPaas 最重要的组件之一,连接了移动客户端与服务端,简化了移动端与服务端的数据协议和通讯协议,从而能够显著提升开发效率和网络通讯效率。通过RPC组件进行网络请求,并且可以设置拦截器拦截请求的发送数据和返回结果。

实例分析

首先对使用了mpaas进行网络请求的应用进行抓包发现请求的body和返回的body都被加密无法正常解析。

对应的接口为/otsmobile/app/mgs/mgw.htm

搜索此字符串可以看到其对应mobilegw.url

找到mobilegw.url的引用处为函数getGWFURL

getGWFURL进行hook并打印调用栈可以看到http请求相关的方法名addRequestHeadersaddCokie2Header,所以HttpWorker.call应该是组包的位置

查看HttpWorker.call可以看到其在调用了addRequestHeaders之后会继续调用executeRequest进行网络请求

executeRequest内部会调用executeHttpClientRequest

executeHttpClientRequest中会调用getPostData先获取需要post的数据

getPostData会先调用getEncryptedEntity将需要post的数据进行加密

getEncryptedEntity会调用clientRpcPack.encrypt将数据加密

hook一下clientRpcPack.encrypt可以看到明文数据和密文数据,密文数据与抓包的数据相同

clientRpcPack.encrypt 内部会先将明文数据进行GZip压缩,然后调用encode函数,传入一个16个字节的随机字符串,GZip压缩后的数据和一个encrypt_index

encode是一个jni函数,对应在libmpaas_crypto.soJava_com_alipay_mobile_common_mpaas_1crypto_Client_encode函数

Java_com_alipay_mobile_common_mpaas_1crypto_Client_encode会调用fake_island::client::encode并返回三个buffer,最后将这三个buffer的数据返回

hook fake_island::client::encode看一下他的参数,分别是传入的随机字符串,随机字符串长度,GZip压缩后的数据和长度,以及一个encrypt_index,并且encrypt_index为1

fake_island::client::encode内部会根据encrypt_index来选择具体的加密算法,这里encrypt_index为1,所以选择的是xchg_ecc

ECC椭圆双曲线算法会根据传入的公钥和随机字符串生成rQrG

xchg_ecc生成rQrG的时候需要首先调用EVP_PKEY_get0_EC_KEYEVP_PKEY结构中得到EC_KEY并进一步得到公钥,而EVP_PKEY结构对应的就是xchg_ecc第一个参数(这里ida不知道怎么回事优化没了),而这个参数是在jni函数入口时从handle字段中拿到的

通过分析找到是在调用Java_com_alipay_mobile_common_mpaas_1crypto_Client_init函数是传入了一个公钥,并且初始化了EVP_PKEY结构并保存在了handle字段中

xchg_ecc返回会会利用rQ对传入的GZip压缩数据再次进行aes128_cbc加密

通过调用fake_island::cbc_128::initialize生成aes128_cbc加密的keyiv,当rQ的长度大于0xf时key就是将rQ以16个字节为一组进行异或的结果。而iv则为rQ剩余的字节,不足16个字节的部分用 0x10-剩余字节的个数 进行填充。

hook一下查看key和iv具体生成的过程,xchg_ecc生成的rQ02 4b 97 21 9e dc 0c 91 d5 ff 2c 6a db 32 6c 0b 39 1a a3 db f6 f0 63 85 7e aa a6 e0 06 98 39 04 7402 4b 97 21 9e dc 0c 91 d5 ff 2c 6a db 32 6c 0b异或39 1a a3 db f6 f0 63 85 7e aa a6 e0 06 98 39 04得到aes的key为3b 51 34 fa 68 2c 6f 14 ab 55 8a 8a dd aa 55 0f,而rQ还剩余一个字节为74,所以aes的iv为74 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f

这里aes 的key是通过其会调用fake_island::aes_128_cbc_en::key_128函数确定的,而为什么this + 8位置保存的是iv呢,这个是因为其后面会调用update对16个字节为一组的数据进行具体的加密操作,而加密之前会先将this + 8位置的16个字节先和状态矩阵进行异或,所以其作用就是一个iv

hook一下 fake_island::client::encode查看调用完成后返回的三个buffer分别存放的是rG, 加密的参数rQ

Java_com_alipay_mobile_common_mpaas_1crypto_Client_encode返回后会将rG保存在this.e中,将rQ加密的参数传入函数a再次进行格式化

函数a会分别将encrypt_indexrG的长度rGSYMMETRIC_ENCRYPT_RMK加密的请求参数的长度加密的请求参数格式化到缓冲区

具体的格式就是encrypt_indexSYMMETRIC_ENCRYPT_RMK占一个字节,而rG的长度加密的请求参数的长度占3个字节,具体格式如下。

这样服务器拿到rG后通过私钥得到rQ(ECC算法),然后对加密的请求参数进行解密。然后将需要返回的数据通过相同的方法进行加密,那客户端在接收到返回数据时直接用事先保存的rQ进行解密即可。

标签:调用,加密,rQ,加解密,mPaas,0f,encode,encrypt,抓包
From: https://www.cnblogs.com/revercc/p/18072792

相关文章

  • STM32 LwIP学习过程问题总结(一):LwIP ping不通,抓包发现ICMP校验和为0x0000
    一、问题今天在将之前的STM32LwIP1.4.1版本程序移植到2.1.2版本上时,发现ping不同,但是开发板有ICMP回复包,黄颜色警告checksum为0x0000。说明LwIP移植应该是没问题,数据处理这一块出错了。 在网上找了下相关的错误,ST论坛有个问题和我这个一样。HardwareIPv4checksumonanST......
  • JavaScript逆向之有道翻译加解密全过程解析
    本篇文章用于解析有道翻译中的加解密全过程url:https://fanyi.youdao.com/index.html#/加密访问网址,输入框中随便输入一个英文单词,查看触发流量包,只看Fetch/XHR类型的。这里主要关注webtranslate的这条,请求参数和响应数据都是有加密的,主要了解其的加解密逻辑。根据url定位......
  • charles进行抓包
                     charles下载地址:https://www.zzzmode.com/mytools/charles/一.抓取pc端http和https接口1.打开charles软件后再Proxy代理tab下Proxy Settings进行配置http端口 2.在Proxy下的SSL Proxy中进行启用SSL代理,并配置主机地......
  • app抓包专题
    一、系统代理-NO_PROXY安卓开发时设置NO_PROXY,手机会不走系统代理,比如得物绕过方式:1、软件Drony、SocksDroid(推荐)、ProxyDroid、Postern注意:需要关闭手机上的系统代理2、fridaHookJava.perform(function(){varBuilder=Java.use("okhttp3.OkHttpClient$B......
  • burpsuit app 抓包 安卓7.0以上证书制作
    burpsuitapp抓包以及安卓7.0以上证书制作前言:今天在使用某校园跑脚本时需要上传token,只能抓包获取,但发现安卓7.0以上的证书不能直接导入,故记录一下制作以及导入方式。首先我们要从burpsuite的客户端或者官方网页获得证书,将证书放在kali中或其他带有openssl的linux系统中,对其......
  • fiddler绑定mumu模拟器安装证书配置抓包使用
    1、在mumu模拟器的浏览器上,访问代理机器的ip加上8888回车,点击下载证书 2、找到mumu模拟器里的设置,找到证书,进行安装  3、证书安装完成之后,找到连接的wifi,点击配置代理为手动 4、以上配置完成就可以抓包成功啦 ......
  • 安卓使用HttpCanary进行抓包
    IOS抓包软件Stream的安装与使用使用「Stream」进行IOS抓包同样的代码,有时候在安卓端会出现不同的问题,所以还需要进行安卓的抓包另外安卓非Root用户的抓包比较麻烦,需要安装指定版本的HttpCannary(小黄鸟)HttpCanary介绍1、观看抓包软件的結果还能抓取音频以及视频。2、可以自动式......
  • Charles抓包工具使用
    https://zhuanlan.zhihu.com/p/48804618Charles抓包1.安装Charles。安装地址:https://www.charlesproxy.com/download/2.配置(1)开关本机抓包一般我们在抓取手机端内容时需要将Proxy菜单栏下的WindowsProxy取消勾选,禁止charles抓取本机上的请求信息。注:开启电脑端抓包后......
  • 又学了一招, 设置抓包代理证书, Charles, fiddle
    之前一直都没用心搞懂证书的安装逻辑今天又碰到了铁板.因为买了新的硬盘,将以前的文件转移到新硬盘上,导致旧的证书路径失效.需要重新导入,重新安装,否则浏览器就一直显示证书不安全,恶心了自己两天. 具体操作1:在运行面板中输入certmgr.msc,确定 2: 打开当......
  • 【APP逆向18】解决NO_PROXY抓包问题
    1.前置:在抓包某货app时,基于关键字搜索,我们发现抓不到返回商品信息的接口,这是怎么回事呢?这是因为在安卓开发时,OkHttp发送请求,设置Proxy.NO_PROXY,基于系统代理都是抓不到包。OkHttpClientclient=newOkHttpClient();FormBodyform=newFormBody.Builder().add("user"......