事情的起因是之前一直能正常跑的企X宝的脚本突然无法使用了。

下面是啰嗦的问题分析:查了下问题,发现是现在web端的搜索接口必须要登录才能使用了,既然要登录,于是我直接将cookie复制进行请求,发现单个账号请求20次左右cookie就失效了,于是我想到了多账号用登录接口模拟登陆获取cookie,然而看了眼登录,嗯,极验的滑块。。由于极验我现在只是把加密参数w的生成流程走通了,但是完整的过滑块流程尚没有时间搞成品,估计挺麻烦的。那有没有不需要登录就能请求的办法呢?有,它的app端,是不需要登录的,那就开搞。

第一步当然是抓包分析请求,开启mitmproxy,手机挂上代理,打开app,搜索~

分析后发现上图那个post请求的,就是app端的搜索接口。需要重点关注请求头中的红框中的内容,以及请求体中红框中的内容,这些就是我们本次需要逆向生成的加密参数。

既然要逆向app,我们先把apk下载下来,然后解压,拿到里面的classes.dex文件,然后使用dex2jar工具将它转换成java代码,然后我们就可以开始看apk里有哪些内容了。(相关工具请自行百度,这里不介绍)

阿这,看到了qihoo的包名,这是360的壳,这就说明apk是被加固了的,加固后的apk我们是没法分析代码的,只能通过脱壳工具进行脱壳之后,才能进行逆向分析。

那么介绍几个app脱壳工具:易开发、blackdex、反射大师(使用方法这里不介绍)

通过脱壳工具进行脱壳后的代码如图:

然后我们搜索我们要找的加密参数token,定位到是在QXBApi.class这个文件中,并且直接发现他的搜索接口就定义在这里。

很显而易见,他的token就是通过encryptcbc方法进行加密,而且cbc三个字母,让我联想到了AES加密的cbc模式,点进去看看。

看到这个IV,有没有豁然开朗的感觉?AES加密中有一个初始化向量,一般就取名为IV。那我们搜索一下在哪个文件中用到了下面的getIV函数

可以发现是在这个CryptoTool.class文件中用到,并且他的加密、解密函数都定义在这里了,不过只是对秘钥进行了一点点操作,不是很复杂。那么我们只需要扣出他的加密解密逻辑,写到我们自己的代码里,对明文值进行加密,就可以成功请求到数据了。

企x宝app的token加密逻辑其实非常简单了,它只用了AES进行加密,相比web端登录用到的极验,那真的是天差地别了,难点主要在于怎么拿到APP中的代码。


oh yeah