Appium抓取app数据

2023-11-19

主流APP数据抓取难点:

 

 

1.请求参数加密

                -sign签名,使用sha1加上md5做辅助加密

 

2.请求body加密

                -整个请求体使用DES算法做加解密

 

3.代理检测反爬

                -抓包设置代理后,直接不再加载数据

 

4.私有CA证书反爬

                -由于公有的证书需要付费,有一些厂商(oppo)的证书为私有

 

 

 

解决办法:

 

一、暴力解决:

针对以上问题,暴力解决的方式就是一切不予解决,直接以侵入webview的方式获取数据。

 

优点:直接,简单,暴力

缺点:依赖appium环境,整套环境搭建安装起来还是比较麻烦,抓取效率低下

 

二、破解sign签名:

反编译源码进行动态调试,然后利用

 

优点:  抓取效率高

缺点:破解成本高,反编译浪费时间,成功概率较小,非常麻烦,需要看和调试代码

 

 

 

项目示例:(oppo软件商店抓取)

 

传统抓取方式的表现:

    按照传统步骤charles抓包,发现进入app详情和评论页面的时候出现CA证书无法加载!

 

分析问题:

    https是需要SSL认证的,所以去去请求的时候会带着CA证书来鉴定请求是否安全,对于

    一些比较重视安全的企业来说,app内置的CA证书就够用了,但是 发现oppo软件商店这

    款应用比较奇葩,CA证书是自己签发的,这样必须得绕过认证

 

解决CA自签发证书问题:

    那么解决方法就是不带https就好了,在模拟器中,安装以下内容

            Xposed框架     ——>  加载第三方模块库来侵入系统达到可自定制需求的目的

                需要做的事情:

                    1.模拟器需要root

                    2.在模拟器上安装xposed框架app

                    3.进入Xposed  app , 点击安装,完成之后可能卡死,重启就好

 

            JustTrustMe    ——>  安装

            SSLSping         ——>  安装

            这两个模块下载完成后,进入Xposed app选择模块,导入这两个模块后重启即可   

    这样就不再走https了,自然绕过了CA认证!

 

 

然后再通过传统的方式去抓包:

       抓取的结果如下:

            

 

 

发现问题:

        1. sign签名

        2.数据返回格式是x-protostuff (序列化协议)

        

 

解决问题(方式二:基于反编译源码动态调试): 

        破解app(这个在之后再做仔细的分析)

        

        1.下载apk,修改后缀为zip,解压之后拿到dex文件(dalvik虚拟机字节码,相当于java的class文件),使用apktool反编译dex2jar转化为jar文件(将smali代码转化为class文件,一般会有针对变量和方法名的混淆) , 再使用jd-GUI打开jar文件,这样就可以看到基本的代码了,但是仅仅只是看到代码而已,距离研究分析破解而言才刚刚开始。

 

 

       2.动态调试需要和反编译需要安卓环境的支持,这里暂时不做说明和实践。

 

 

 

 

解决问题(方式一:基于appium):

        appium是一款自动化测试移动端的工具,可以获取app的视图,那么问题就很好解决了。

 

        环境下载安装与配置

        1.安装appium-desktop ,下载后安装即可

        2.安装adb工具  (3个文件:adb.exe, xxxx.dll,xxxxx.dll) 将这三个文件放在c盘下的Windwos目录下

            都复制到System32 和SysWow目录下,最后在控制台输入adb命令就可以用了

        3.打开模拟器,打开开发者调试模式,进入系统的版本号,点击5次即可打开

        4.使用adb命令连接模拟器,adb connect 127.0.0.1:xxxx   

                   逍遥模拟器是21503

                   夜神模拟器是62001

                最后使用adb devices -l 查看连接的设备应该可以看到模拟器的设备名称

        5.下载Android idk环境,由于新版本(25.2+)的Android sdk会出现命令过时的情况,所以下载低版本的比较好

           下载完成之后配置android_home环境变量到Path下即可,这样可以在终端直接运行android sdk命令

        6.在终端运行android sdk 命令,下载那些sdk. 完成之后即可

        

        创建appium session:

        1.appium创建127.0.0.1的host

        2.配置参数如下json:

 

{

  "platformName": "Android",

  "platformVersion": " 4.4.4”,       ——> 模拟器android版本号

  "appPackage": "com.oppo.market”,         ——> main入口类位置

  "appActivity": "com.oppo.market.activity.MainActivity”,      ——>入口的activity

  "deviceName": “127.0.0.1:21503”,              ——>模拟器的host与端口

  “app": “c://xxxxx”               —> 模拟器app的位置

}

 

设置完成之后就可以看到app视图了,这样就可以拿数据了

                

 

怎么拿数据呢?

        appium提供不同版本的代码支持,可以调用seleium相关的api直接获取元素

    

 

依赖:appium => 

 

pip install Appium-Python-Client

 

 

方案架构图:

 

                                 请求                                                                代理请求发送

代码client        ————————>  appium-desktop-server   ————————>   adb server  ————>  app

 

 

可以看到,整个请求链经过了好几层转换,所以环境搭建是相对较难的,但是理清晰了还是很直接的。

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Appium抓取app数据 的相关文章

  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010

    意大利著名好车品牌 法拉利 一直在世界上享受名誉 该游戏作品将带领玩家感悟法拉利的文化底蕴 游戏介绍 法拉利虚拟学院2010 包括了2010款法拉利F1赛车F10 以及三条通过镭射扫描技术绘制的高精度赛道 Fiorano Mugello N
  • spring boot 简介以及作用

    我们都知道spring是一个功能非常强大的框架 但是它也存在非常不好的弱点 也是对于我们普通的程序员的致命的弱点 就是它的配置文件太多了 而 在开发界一直有一句话 就是约定大于配置 这样一句话 就是说系统 类库 框架应该假定合理的默认值 而
  • JsonObject对象和jsonArrsy数组的获取JDK1.8,添加到表中

    1 基础数据结构 一个合同号对应多个批号 一个批号对应多个车辆 arrivalReport contractContent contractNumber 2021 11 17合同号 orderNumber 2021 11 17 0032订单
  • AbstractQueuedSynchronizer之AQS

    文章目录 AbstractQueuedSynchronizer AQS 概述 基本原理 实现细节 等待队列 state属性 独占模式 ReentrantLock AbstractQueuedSynchronizer AQS 概述 Abstr

随机推荐

  • 爬虫学习笔记(十五)——加密解密

    文章目录 一 概念和作用 1 1 概念 1 2 作用 1 3 常用加密方式 二 字符编码 2 1 进制间转换方法 python 2 2 unicode 三 Base64编码原理 3 1 概念 3 2 作用 3 3 Base64编码表 3 4
  • MySQL备份与恢复

    2 3 1备份MySQL数据库 在MySQL的bin目录下 有一个名为mysqldump的可执行文件 将该bin目录添加到环境变量中 可以利用它在 命令提示符 环境下来备份数据库 语法格式如下 mysqldump opt 要备份的数据库名
  • 词项(term)与词条(token)区别

    传送门
  • Sublime Text 3 全程详细图文教程(转载)

    今天被群里大佬安利了一款文本编辑软件 找了一下相关教程 一 前言 使用Sublime Text 也有几个年头了 版本也从2升级到3了 但犹如寒天饮冰水 冷暖尽自知 最初也是不知道从何下手 满世界地查找资料 但能查阅到的资料 苦于它们的零碎
  • 系统CPU飙高和频繁GC,我要怎么排查

    1 Full GC次数过多 相对来说 这种情况是最容易出现的 尤其是新功能上线时 对于Full GC较多的情况 其主要有如下两个特征 线上多个线程的CPU都超过了100 通过jstack命令可以看到这些线程主要是垃圾回收线程 通过jstat
  • 理解图像的傅里叶变换(细心分析)

    最近在看图像的傅里叶变换 看着频谱图一直没看明白到底为啥是那样的 跟同学研究了好久 终于想明白了 感谢同学的耐心指导 大家相互讨论真的很快就能出结果 多讨论 多学习 图像的傅里叶变换 图像是一个二维的信号 所以对它进行二维的傅里叶变换 对于
  • layui文件上传接口后端具体实现SpringMVC

    做课程设计时候 用到了layui文件上传接口 参考官方文档给出的响应接口文档 code 0 msg data src http cdn layui com 123 jpg 然后具体的上传书写方式分为前端和后端 layui官方并没有说明上传的
  • [1140]linux查看历史命令history

    一 什么是history 在bash功能中 它能记忆使用过的命令 这个功能最大的好处就是可以查询曾经做过的举动 从而可以知道你的运行步骤 那么就可以追踪你曾下达过的命令 以作为除错的工具 二 History的保存 那么命令记录在哪里呢 在h
  • tomcat数据源配置多个ip oracle,tomcat里配置多数据源(数据库连接池) jndi 和项目连接 ssh框架...

    以mysql和oracle数据库为例 我项目以mysql为主 但需要去一个oracle数据库里查询数据 所以只有mysql里表的实体类 但没有oracle数据库实体类 所以配置mysql的数据源有实体类直接把数据源放到session工厂里用
  • 如何修改文件权限

    改变文件权限的两种方法 第一种 符号 sudo chmod 文件身份 操作符 权限符号 文件档案或目录 文件的四种身份 u user文件所有者 g group 文件所属群组 o other 其他拥有者 a all 全部身份 操作符的三种类
  • 4.1 不定积分的概念与性质

    思维导图 学习目标 学习不定积分 我会采取以下几个步骤 1 学习基本的积分表 首先 我会学习基本的积分公式 例如幂函数 指数函数 三角函数 反三角函数等的积分公式 这些公式是不定积分计算的基础 掌握它们是十分重要的 2 理解积分的定义和性质
  • FLOPS、TOPS和FLOPs的区别

    FLOPS 即每秒浮点运算次数 是每秒所执行的浮点运算次数 Floating point operations per second 缩写 FLOPS 的简称 被用来评估电脑效能 FLOPs 注意s小写 是floating point op
  • Android C2DM学习——云端推送

    一 基础知识 当我们开发需要和服务器交互的应用程序时 基本上都需要获取服务器端的数据 比如 地震及时通 就需要及时获取服务器上最新的地震信息 要获取服务器上不定时更新的信息一般来说有两种方法 第一种是客户端使用Pull 拉 的方式 隔一段时
  • LeetCode_Array_42. Trapping Rain Water 接雨水【双指针】【Java】【困难】

    目录 一 题目描述 英文描述 中文描述 示例与说明 二 解题思路 三 AC代码 Java 四 解题过程 第一搏 第二搏 一 题目描述 英文描述 Given n non negative integers representing an el
  • Qt在connect重载信号时使用lambda表达式

    Qt在connect重载信号时使用lambda表达式与一般信号时有所区别 例 QComboBox信号currentIndexChanged有两种参数类型 void currentIndexChanged int index void cur
  • 如何统计DataFrame中各列数据分类的各个不同数据出现的次数

    可以使用 value counts 函数来统计每个不同数据在数据列中出现的次数 例如 假设有一个名为 df 的 DataFrame 其中包含一列名为 col 要统计 col 列中各个不同数据的出现次数 可以使用以下代码 counts df
  • python 读写数据文件的6种常用方式

    本文主要介绍python读写数据文件的6种常用方式 1 python内置方法 with open r test xlsx as f a f read 一般 在应用上述上下文管理器后 可以用如下三种方式进行内置方法的读写操作 read 一次性
  • java实现区块链_用Java实现一个简单的区块链

    前面的文章 笔者花了不少的文字来介绍区块链的基础概念 以太坊的概念和开发 大家是否感觉区块链开发还是挺复杂的呢 但其实区块链技术本质就是一个分布式账本 在技术上本质就是一个链表 链表里面有一个个的区块 每个区块有自己的数字签名 涉及到加密技
  • Android Log-日志介绍

    一 基本介绍 Logcat是Android日常开发过程中的重要组成部分 Logcat上会显示系统消息 使用Log类添加到应用的消息 应用运行异常信息等 通过日志 我们可以实时监控应用运行状态 为应用调试提供重要参考 Log格式 一条标准的日
  • Appium抓取app数据

    主流APP数据抓取难点 1 请求参数加密 sign签名 使用sha1加上md5做辅助加密 2 请求body加密 整个请求体使用DES算法做加解密 3 代理检测反爬 抓包设置代理后 直接不再加载数据 4 私有CA证书反爬 由于公有的证书需要付