如何使用Python逆向抓取APP数据

 更新时间:2021年05月24日 08:22:58   作者:不加班的程序员丶  
今天给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

今天给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固,所以除了抓包之外,还需要对 APP 进行查壳脱壳反编译等操作。

所需设备和环境:

设备:安卓手机

抓包:

fiddler+xposed+JustTrustme

查壳:ApkScan-PKID

脱壳:frida-DEXDump

反编译:jadx-gui

hook:frida

抓包

手机安装app,设置好代理,打开 fiddler 先来抓个包,发现这个 app 做了证书验证,fiddler 开启之后  app提示连接不到服务器:

图片

那就是 app 做了 SSL pinning 证书验证,解决这种问题一般都是安装 xposed 框架,里面有一个 JustTrustme 模块,它的原理就是hook,直接绕过证书验证类,安装方法大家百度吧。

之后再打开app,可以看到成功抓到了包:

图片

先简单分析一下,可以看到请求体中 formdata 是密文,响应内容也是密文,这个请求和响应中有用信息非常少,甚至都不知道在 jadx-gui 里怎么搜索,请求体中 formdata 是以两个等号结尾的,应该是个 base64 编码,其他一概不知。。。

脱壳反编译

那先来反编译,在这之前,通常是先用查壳工具检查一下 app 是否加固,打开 ApkScan-PKID ,把 app

可以看到这个 app 使用了 360 加固,真是层层设限啊!!这里使用frida-DEXDump来脱壳,可以到 github 上下载 frida-DEXDump 的源代码,完成之后打开项目所在文件夹,在当前位置打开命令行运行以下命令:

python main.py

等待脱壳完成,可以看到当前项目中生成了一个对应文件夹,里面有很多dex文

图片

下面用 jadx-gui 打开 dex 文件,一般先从最大的文件开始依次搜索关键字,我们知道 java 中使用 base64 是有 BASE64Encoder 关键字的,因为抓包得到的信息非常少,在这里就只能搜索这个关键字了,搜到第四个dex中,得到了疑似加密处:

图片

可以看到是使用了一个 aes 加密,密钥是固定的字符串。

Frida Hoo

Java不太熟,分析不来,直接使用 frida 来写一段 hook 代码看一看 encrypt 函数入参和出参的内容:

图片

同时来抓包对比:

图片

图片

就得到了这里的请求 data 入参数据:

pageIndex:当前页码

pageSize:当前页对应的数据条数

typeId 和 source 是固定的, 接下来再来 hook decrypt 函数,对比抓包和 hook 结果:

图片

图片

结果是一样的,至此,我们逆向分析就完成了。

总结一下请求和响应过程,就是请求体中的 data 经过 encrypt 函数加密传参,改变 pageIndex 就可以得到每页数据,响应是经过 decrypt 函数加密显示,那我们只需要在 python 中实现这个 aes 加密解密过程就行了,从反编译的 java 代码中可以看出密钥是固定的:wxtdefgabcdawn12,没有 iv 偏移。

请求

直接上代码:

图片

运行代码,成功拿到数据:

图片

到此这篇关于如何使用Python逆向抓取APP数据的文章就介绍到这了,更多相关Python逆向抓取APP数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中的多线程实例(简单易懂)

    Python中的多线程实例(简单易懂)

    这篇文章主要介绍了Python中的多线程实例,一个CPU,将时间切成一片一片的,CPU轮转着去处理一件一件的事情,到了规定的时间片就处理下一件事情,更多的相关内容需要的小伙伴可以参考下面文章详细
    2022-06-06
  • Python 2/3下处理cjk编码的zip文件的方法

    Python 2/3下处理cjk编码的zip文件的方法

    今天小编给大家分享Python 2/3下处理cjk编码的zip文件的方法,在项目中经常会遇到这样的问题,小编特意分享到脚本之家平台,感兴趣的朋友跟随小编一起看看吧
    2019-04-04
  • 使用python实现UDP通信方式

    使用python实现UDP通信方式

    这篇文章主要介绍了使用python实现UDP通信方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python argparse的使用步骤(全网最全)

    python argparse的使用步骤(全网最全)

    argparse是python的一个命令行参数解析包,在代码需要频繁修改参数时,方便使用,主要用法就是在命令行输入自己想要修改的参数,这篇文章主要介绍了python argparse的使用步骤(全网最全),需要的朋友可以参考下
    2023-04-04
  • 详解Python装饰器之@property

    详解Python装饰器之@property

    今天带大家学习python装饰器的相关知识,文中对Python @property做了非常详细的介绍,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Python使用PIL进行JPEG图像压缩的简易教程

    Python使用PIL进行JPEG图像压缩的简易教程

    本文介绍了如何使用Python编程语言和wxPython图形用户界面库进行JPEG图像的压缩,通过添加滑块控件,我们可以调整压缩质量,并将压缩后的照片另存为原来的名称加上后缀"压缩+质量数字"的新文件,需要的朋友可以参考下
    2023-09-09
  • python3 使用函数求两个数的和与差

    python3 使用函数求两个数的和与差

    这篇文章主要介绍了python3 使用函数求两个数的和与差,具有很好的参考价值,希望对大家有所帮助。
    2021-05-05
  • 利用Python脚本实现自动刷网课

    利用Python脚本实现自动刷网课

    这篇文章主要介绍了利用Python脚本实现自动刷网课,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Python使用PyMySql增删改查Mysql数据库的实现

    Python使用PyMySql增删改查Mysql数据库的实现

    PyMysql是Python中用于连接MySQL数据库的一个第三方库,本文主要介绍了Python使用PyMySql增删改查Mysql数据库的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 解决pyecharts在jupyter notebook中使用报错问题

    解决pyecharts在jupyter notebook中使用报错问题

    这篇文章主要介绍了解决pyecharts在jupyter notebook中使用报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论