抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

尝试了一下对 GiWiFiAndroid 客户端网络请求的抓包和其中加密算法的逆向分析

准备阶段

本次逆向过程我并没有借助 PC 端处理, 直接就轻松的完成了…出乎意外

测试环境

  • 设备: Redmi K20 Pro
  • 安卓版本: 11
  • 特性: 已安装 magisk
  • GiWiFi 版本: 2.4.1.4

使用工具

分析开始

抓包尝试

此步骤使用 httpcanary 进行抓包, 因为 GiWiFi 并没有用 SSL Pinning 等方式来阻止抓包

所以该过程异常轻松

最终我们能得到如下图的加密内容

1ikQr.jpg

可以轻松通过等号这种特征发现请求包中每一个属性都用了 base64 进行处理

初步怀疑是其他常用加密算法加密后再进行处理

最后经过多次抓包发现内容并没有改变, 可以推断并不是加上了动态内容(如timestamp)再进行加密, 这使得我们的工作量会小很多

反编译尝试

使用 MT管理器 进行直接反编译发现我们什么有价值内容都得不到…你可以发现 百度SDK 相关的内容, 因为他加壳了

暴力脱壳

直接脱壳肯定是不现实的事情, 于是我们使用 Frida-dexdump 进行脱壳

因为我手机系统已经自带 magisk 这里使用 MagiskFrida 模块即可开机自动加载 Frida-server 服务并且自动开启相关 tcp 转发

所以我这步骤比较方便, 其他环境请自行研究

接下来在 termux 上安装相关工具, 用于控制 Frida-server

1
2
$ pip install frida
$ pip install frida-tools

安装完成之后, 输入

1
$ frida-ps

查看 frida 服务是否正常连接

没问题后请保持 GiWiFi 在最前台运行 (这里我使用将 termux 窗口运行的方式), 再输入

1
$ frida-dexdump

即可获得相关 dex

1ii5E.jpg

反编译继续

使用 MT管理器 对抓取的多个 dex 包进行全选反编译, 即可进行正常分析

1ilZg.jpg

1iyCx.jpg

算法分析

在打开dex 包后进行简单搜索, 先随便搜索一个关键的属性名 staModel 可以看到一个可疑的 smali 文件

1iSQU.jpg

打开瞧一瞧

1ipDX.jpg

很快锁定一个函数 getEncrypt , 定位到它所在的位置看看

1iwc2.jpg

可以看到一串像是密钥的东西 5447c08b53e8dac4

继续定位到所指向的 com/gbcom/gwifi/codec/d 看看

1iUwS.jpg

好家伙…算法一目了然, 也可以点一下右上角的 转java 选项使用 jadx 引擎转换为 java 更具可读性

1ib2u.jpg

再通过刚刚获得的密钥位数可以得出, 这是使用 aes128-ecb 加密且使用 PKCS5Padding 方式进行填充再最后转换为 base64 的加密逻辑

提示: ecb 算法不需要 iv (初始化向量)

结果验证

随便打开个在线加解密的网站验证一下自己的想法吧

1i09q.jpg

结果一致

好了…本次解密分析可以结束了

结尾

第一次写这种类型的文章, 用了点奇技淫巧, 以至于单靠手机端就完成了目标…

希望对大家逆向学习有所帮助吧 :)

可能会抽空把 giwifi-gear 添加上 phone 认证模式

评论