app登录加密及抓包方法

3,747 阅读2分钟

前情描述

app--> aHR0cHM6Ly93d3cubWFzZ291LmNvbS94ei5odG1s
之前是手动fiddler抓包,获取加密后的参数,将每个账号的加密参数保存以后使用。但是因为账号会定期回收更换,这种方式很麻烦,所以决定探究一下app的内部构造。

探究加密过程

登录抓包

登录页面 登录接口的参数如下 登录接口 经过几次尝试可以发现,我们的目标就是password这个参数,其他参数是固定或者输入的

反编译

用jadx打开这个app的apk文件 apk 看这目录结构,庆幸他没有加壳加固 那我们全局搜索一下,登录url:
"/user-server/loginByPassword/basic" search 变量后面加个",查找更方便。在大佬那边学来的
现在进入这个文件,看下变量被调用的方法
这里data应该是加密过的提交参数,那过程应该在addLoginByPasswordSecurityParameters这个函数中
看到这就很清晰了,使用了AES加密,key是绿框中的值
但是具体的mode,padding,iv还不清楚
跳转到aesUtils.encrypt方法中,我们瞅一瞅 注意到这个c初始化只传了两个参数,大胆猜测mode是ECB,因为其他的都需要iv参数
padding我是通过将登录抓包到的加密值,测试不同padding,确定是Pkcs7Padding
这里要注意的是,加密后有一个urlencode的操作,抓包的值需要decode一下
在线加密解密网址

模拟加密

现在梳理一下
AES加密 模式 ECB 填充 Pkcs7Padding 编码 Base64 字符集 utf8
待加密字符串
加密进行urlencode

对应代码,Crypto 使用 pip install pycryptodome 安装

抓包问题解决

问题描述

之前使用fiddler直接可以抓取到app内部请求记录,当我现在解决了登录加密后发现,只能抓取到登录的记录,进去后页面全是空白,可能是app更新了。虽然之前写的爬虫依然可以用,但是怕数据接口变化。所以还是要解决抓不到包的问题

解决方案

思路源于 loco大佬
按照文章介绍,我们使用模拟器安装好xposed框架及JustTrustMe模块
我这里使用夜神模拟器,安卓版本是5.1
看下使用后效果

ok,完美解决! 拿上登录后的cookie愉快的抓取数据咯