APP登录接口协议加密函数定位与分析

admin 2025年7月4日10:37:59评论12 views字数 1949阅读6分29秒阅读模式

 

前言

最近在看一个APP,某加密企业壳,登录接口传递的参数加密、存在sign校验

整个分析流程如下:
APP登录接口协议加密函数定位与分析
65f51746b19dec7148112b82f749836e.png

抓包分析

短信登录接口,参数加密,存在sign校验
APP登录接口协议加密函数定位与分析
06ca4b638428a140f3ec6cbd628db2b5.png

此时,有两种方式,一种是脱壳分析代码

另一种是通过Frida脚本直接hook常用的加解密函数、Okhttp等网络类,打印参数和堆栈定位代码

本次讲述第一种。

脱壳

fart脱壳机脱壳。
也可以通过Frida脱壳脚本脱dex。

登录函数定位

方法1:通过算法助手定位加解密函数,打印堆栈。
算法助手Pro1.0.9 下载地址: https://mp.weixin.qq.com/s/Kcbr1mh45N1BIKrySg39Vg

APP登录接口协议加密函数定位与分析
7eb3f0c294328e2ff29db9a1ba2f6023.png

不过,当前APP存在校验,注入后就停在起始页面。

方法2:Frida分析
APP存在Frida校验,如果最新版的绕不过去,可以尝试去互联网上寻找以前版本的APP。一般来说,非必要APP的接口不会改变,以前的APP也能够使用。

互联网上,常见的xx厂商安全加固的Frida校验有很多。找以前版本的APP,虽然也有Frida校验,但是可以用已有的脚本绕过,比较省事。

objection分析

objection -g <包名> explore -P .objectionplugins

采用objection插件watch_events
监听onclick点击事件

plugin watch_event onclick
输入手机号、验证码,点击登录
APP登录接口协议加密函数定位与分析
4a5e805643b66f05fb79cefb94c50381.png
如图所示,会打印弹出发起点击事件的类,在jadx中搜索类名
APP登录接口协议加密函数定位与分析
739baca547ac0ec104b9f17bf0f556ed.png

找到位置,我们就可以进行正向分析。但是,有的代码写的比较复杂,正向分析跟代码很容易被绕晕。

因为加密功能是在点击之后,那有没有其他办法?

整个过程:
输入账号密码——》点击按钮——》加密 ——》 发送请求

发送请求这个过程是比较靠后的,我们打印HTTP类的堆栈,跟着堆栈往上找。

工具:https://github.com/r0ysue/r0capture

看r0capture能否抓包我们需要的请求和响应包,r0capture可以打印接口的堆栈信息,再改位置在最下面那几行,名称类似于send、post之类的。

python r0capture.py -U -f com.xxx.xxx -v
全局搜索请求包中的关键词,定位堆栈
APP登录接口协议加密函数定位与分析
b890becc4d915e8044461e7d9847e740.png

在调用的堆栈中找到了发包位置,发包函数为sendPost,复制类名在反编译后的代码中搜索

public XXXHttpResponse sendPost(String strUrlPath, XXXHttpRequestParams params)

判断是不是该接口,可以在objection中hook,打印参数和堆栈

objection无法hook类报错:

APP登录接口协议加密函数定位与分析
940ab95e84c8a4f555dd83f5be7c2a0c.png

原因:加载的类不对。

解决办法:参考我前几天写的文章。

登录协议分析

接着跟着调用栈,寻找到传入明文、传出密文的函数。
最终找到是一个native函数

static {
    System.loadLibrary("security");
}


private static native byte[] aesEncode(String param, String random);

private static native String sign(String param, String time);
寻找libsecurity.so文件,搜索关键词aesEncode
APP登录接口协议加密函数定位与分析
f0c1b5f1c3c43fd16c18e7b394f2fd79.png

开发为了方便,将sign校验和加密都放在了一个位置。
后续加解密直接Frida调用即可。

Frida动态hook的好处就是没必要分析具体的加解密过程。

因为是在native层,自定义函数实现的AES加解密,所以上面说的Frida通用加密hook脚本应该是找不到的。

简单说明加密方式:
AES CBC PKS7
key固定写在so文件中
iv是随机的,由key+random取md5的前16位。random放在请求头中一块发送到后端。

sign校验方式:
请求体中的所有内容 + random,拼接后取sha1,然后base64。

总结

对APP的加密请求进行分析,定位到了关键函数。

 

原文始发于微信公众号(进击的HACK):APP登录接口协议加密函数定位与分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月4日10:37:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   APP登录接口协议加密函数定位与分析http://cn-sec.com/archives/4221866.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息