前情描述
app--> aHR0cHM6Ly93d3cubWFzZ291LmNvbS94ei5odG1s
之前是手动fiddler抓包,获取加密后的参数,将每个账号的加密参数保存以后使用。但是因为账号会定期回收更换,这种方式很麻烦,所以决定探究一下app的内部构造。
探究加密过程
登录抓包
登录页面
登录接口的参数如下
经过几次尝试可以发现,我们的目标就是password这个参数,其他参数是固定或者输入的
反编译
用jadx打开这个app的apk文件
看这目录结构,庆幸他没有加壳加固 那我们全局搜索一下,登录url:
"/user-server/loginByPassword/basic"变量后面加个",查找更方便。在大佬那边学来的
现在进入这个文件,看下变量被调用的方法
这里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愉快的抓取数据咯