您现在的位置是:首页 >其他 >看我如何大战某知名电商APP:Charles抓包,逆向分析App,RPC模拟(全套教程安排)网站首页其他
看我如何大战某知名电商APP:Charles抓包,逆向分析App,RPC模拟(全套教程安排)
大家好,我是阿爬!这里是诉说阿爬和阿三爬虫故事的爬友圈
本期实现一个某品会,接口sign参数解密,内容简单易懂,重点是实现一个rpc的调用
一、初步分析
1.抓包分析
老规矩,依旧使用vpn+charles抓包,走到搜索页,在charlse可以看到搜索页接口,首先来看请求
此接口为post请求,参数是以表单形式提交,一眼看去参数比较多,这的多刷几页数据对比一下才能看到是哪些参数有变化。再看请求头
请求头中的信息非常少,比较亮眼的是api_sign参数,猜想是一个加密处理。最后看一下请求结果
从结果看也是我们搜到的数据
2.参数定位
A.接口:首先还是对搜索接口进行一次重放攻击,看是否能拿到相同结果,选中接口,右键选中重复,最终结果也是一样的,说明相同参数可以拿到结果,改参重放攻击请求一下,发现请求失败。
B.表单:经过多次接口刷新,对比参数,发现表单参数中主要有pageToken、timestamp、keyword、以及和keyword相关内容的字段有变化,不过都没有特殊的处理,pageToken从结果来看像base64加密,于是base64解密看一下,果然能解开
至此重点关注的地方就不在表单。
C.请求头:请求头中的api_sign参数才是重点,此时需要用到神器jadx打开app,反编译后能看到没有加固操作,于是全局搜索关键字,很快定位到函数入口处
跟进b.b函数,发现有几层连续调用, 直到找到疑问函数
刚跟到这里时阿爬表示蒙圈了,后来仔细一下,这个反射调用方法一定处理了object对象,于是往上跟进initInstance()方法,在里面看到有调用KeyInfo类
于是大胆的跟进此类,发现方法比较多,那到底哪一个才是真实调用函数呢?我是根据传参类型来判断是哪个函数调用的,根据context,map,string,boolean发现真实调用处是gsNav函数
由于是native层实现的,此处不能看到具体实现逻辑,不过阿爬还是好奇的用ida打开对应so文件看了一下。好家伙进去一看,此方法还是静态注册得,心想难度降低了很多,当点进去看伪c代码时,调用函数有点多就懒得去分析了,有兴趣的爬友可以去试试,于是就想到用frida rpc调用实现吧
二、rpc调用
1、hook参数 在实现rpc前首先得把相关传参搞定,因此先hook一下gsNav函数,打印一下其参数分别是什么
知道参数后只需要实现Python端和js端即可完成调用
2、Python端 Python端完成字符串map参数的传递,以及函数的调用
3、Js端
js代码负责构建一个完整的map对象传到gsNav函数中
三、结果展示
最后对一下调用结果
至此本期rpc调用到此结束,简单总结一下使用rpc的特点:
1.开发效率快,当so层逆向时间成本高且对firda没有限制时可用。
2.需要一直保持一个frida server服务,以及对应手机app在运行,因此部署此类爬虫有一定局限性。
3.如果有对frida检测需要处理相关检测点
4.整个爬虫流程可能不够稳定
欢迎大家评论区留言,关注阿爬了解更多爬虫故事!
特别声明:本文章只作为学术研究,不作为其他不法用途;如有侵权请联系作者删除。