识货app免更新过拦截器获取免加密数据
app:识货v7.20.1
接口:https://sh-api.shihuo.cn/daga/search/goods/v1?minVersion=15670&clientCode=%7Bholder%7D
&v=7.20.1&channel=huawei&device=Pixel%203a&platform=android×tamp=1684553856312&tok
en=c0df5113c555827f6e0c294b227d2b7b
解析流程
首先打开app,发现需要更新,我们先尝试一下断网进入,先清除缓存,在断网进入,发现可以过更新,但是好像抓不到包
先用jadx打开app进行反编译,看一下源码,先看下能不能过掉强制更新,搜索关键字版本,发现UpdateDialog方法是进行版本更新的主要方法,我们可以直接让这个方法返回为空,就可以过掉更新
使用frida hook UpdateDialog方法,不返回任何数据,可以直接过掉更新,需要注意的是,frida启动需要用spawn注入模式,因为更新是在app刚启动就进行了检测
在操作app的时候,也是发现app有提示检测到在root环境下运行,我们可以尝试删除该app下的libmsaoaidsec.so文件,很多app都是基于jni操作c语言来进行root检测,这也是常见的反调试手段,打开mt管理器,找到该app下的lib目录,删除该文件
抓包后,发现根本抓不到任何有用的包,有可能是未走系统代理
我们用vpn转发的形式进行抓包,先关掉系统代理,打开SocksDroid,设置charles socks代理转发,再添加对应的app
这边就可以正常进行搜索抓包了
我们先看下搜索接口,发现有很多参数,我们可以大胆尝试,去掉某些参数看一下是否能正常请求,结果测试,发现只要更改关键字,就可以获取到对应的返回数据,我用上一个包的请求参数,只更改关键字,即可获得对应的返回数据
当我们点进商品详情页面是,我们会发现请求参数进行加密,返回参数也进行了加密,我们也可以再jadx里面搜索关键字查找该接口做了怎样的处理,也可以用另一种方法
hook拦截器,我们再hook免更新的时候,再hook一下会启动哪些拦截器
这有这几个拦截器,我们直接hook我们需要的接口会经过哪个拦截器
当我们再第八个拦截器选择不进入当前拦截器的时候,该接口竟然明文发送,再看charles抓包,发现返回数据也是明文,有可能该接口存在两种请求方式,一种未加密也能够返回数据的情况,
我们直接把接口请求复制下来,再python里面尝试一下
1 |
|
发现可以正常获取到鞋子的尺码信息,该app的接口都可以用明文的形式进行发送获取
我们再去看一下源码,看一下加密参数和返回的加密数据是用什么方式做了加密,关于尺码的那个接口返回的参数里面带有dwlength字段,我们直接去源码里面搜一下,反编译未成功,找了半天,这里可能跟base64有关,我们去看一下Base64.decode方法
我们直接hook一下这个方法,发现他的调用栈涉及到native层
我们回到刚刚未编译成功的那里,我们找一下.SwSdk.heracles方法,果然调用了native方法,对应的so文件时dusanwa.so
我们再mt管理器中,找到dusanwa.so,然后带着app用unidbg尝试调用
先将基本信息填写好
1 |
|
需要注意的是 由于加密的字符串过长,java没法传入这么长的字符串,我们可以可以创建一个StringBuilder
,然后对加密的字符串进行切割,在放进去,最后再将对应需要补的环境补进去
运行没有问题,成功返回了结果,我们也可以对这个unidbg项目进行打包,打包出来用python调用
打包文件架构:
运行结果: