您现在的位置是:首页 >其他 >看我如何大战某知名电商APP:Charles抓包,逆向分析App,RPC模拟(全套教程安排)网站首页其他

看我如何大战某知名电商APP:Charles抓包,逆向分析App,RPC模拟(全套教程安排)

爬友圈 2024-07-11 12:01:05
简介看我如何大战某知名电商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.整个爬虫流程可能不够稳定

  欢迎大家评论区留言,关注阿爬了解更多爬虫故事!

  特别声明:本文章只作为学术研究,不作为其他不法用途;如有侵权请联系作者删除。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。