本文来自网易云社区

作者:王涛

本文主要介绍了移动端爬虫的工具与方法,作为一个入门的大纲。没有详细介绍的也给出了本人学习过程中借鉴的资料的链接,适合对移动端爬虫感兴趣的同学入门。

一、抓包模拟

基本原理(中间人攻击)

中间人攻击:在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信。攻击机以自己的证书替代服务器发给客户端的证书。通常,客户端不会验证该证书,直接接受该证书,从而建立起和攻击机的安全连接。这样,客户端发送的数据,都会被攻击机获取和解密。

工具介绍Fiddler

charles

anyproxy

手机安装证书

需要

需要

需要

支持抓取

http/websocket/https(单向认证)

http/websocket/https(单向认证)

http/websocket/https(单向认证)

支持平台

win/mac/linux(受限)

win/mac/linux

win/mac/linux

脚本开发

Jscript.net

未知

js

具体的报文走向如下

手机上的配置方法(以Fiddler为例,其它类似)准备工作:手机与PC在同一个局域网内(可以连同一个WIFI,或者电脑插入移动WIFI)

配置步骤见下:

==特别说明,抓不到报文可能的情况==

1、单向双向 https

https的抓包原理是基于中间人攻击的方式,但是这种方式只适用于单向认证的方式,也就是只是客户端去检验服务端的证书。而双向认证的Https,服务端还会校验客户端的证书。https握手过程如下:

如何检测是双向认证还是单向认证,可以通过wireshark抓包看双方的协商过程,证书的交换是否是双向的。

解决办法:暂时没有好的办法解决这个抓包的问题

2、ssl pinning

ssl pinning:证书锁定Certificate Pinning是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在建立安全连接的过程中,客户端会将预置的公钥和接受的证书做比较。如果一致,就建立连接,否则就拒绝连接。Certificate Pinning在手机软件中应用较多。因为这些应用连接的服务器相对固定,可以预先将服务器的X509证书或者公钥保存在App中。例如,苹果应用商店Apple App Store就预置了这个功能。当使用中间人工具或者Fiddler之类的工具拦截数据,就会造成应用商店无法联网的情况。

抓取实现

抓到报文后,就可以模拟请求了。请求发送的几种方式:抓包工具里面提供了发送功能,Fiddler中的Composer 标签里提供了此功能。

Chrome的Postman扩展程序也可以用来发送报文。

Python中的requests包也可以方便地实现

缺陷如何构造更多的请求?(常见的分页请求、更换查询参数等)

如果抓不到包怎么办?(如果通信走socket怎么办?)

http参数中包含加密、签名字段,如何找到参数的生成方法?

二、模拟点击

基本原理(基于UIautomator)

通过程序模拟人的行为对APP的界面进行点击、滑动等操作,同时可以获取APP的Activity页面上的大部分控件上的文本信息(有一些可能获取不到,Uiautomator本身就获取不到)

工具介绍Appium

Macaca

支持平台

需要

需要

脚本语言

PC/ios/android/hybrid(h5、native混合)

PC/ios/android/hybrid

备注

支持Android所有版本

Android支持API>17

底层框架

UIAutoation(IOS)/UIAUtomator+Selendroid(Android)

XCUITest(IOS)/UIAUTOMATOR(Android)

稳定性

一般

更好

开源

JS基金项目,社区活跃

阿里开源,未来未知

==特别说明==

抓取实现程序基本架构

框架API说明

以Appium为例,Appium 支持的API 介绍如下:定位支持

通过accessibility id查找元素

通过元素id

通过元素文本内容

通过元素可见链接文本定位

通过元素标签名称定位元素

通过元素class name属性定位元素

支持单个、批量获取

操作支持

从某个元素滑动到另一个元素

把某元素拖到目标元素

模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)

从A点滑动到B点,滑动时间可配

快速滑动

模拟双指捏(缩小操作)

在元素上执行放大操作

单击

还能摇一摇(IOS支持)

执行JS脚本

获取H5页面的page source

输入框输入(回车的支持,建议选用sogou输入法,keycode: 66 ,==这样不需要去定位键盘上回车的输入==)

控制APP

安装、删除、运行、关闭APP

指定运行某APP的某activity

获取控件信息

文本

元素tag名称

内容描述(content-desc)

样例代码(python)

如果使用过selenium做爬虫或测试,对这个接口应该很熟悉。from appium import webdriver

desired_caps = {}

desired_caps['platformName'] = 'Android'desired_caps['platformVersion'] = '6.0'desired_caps['deviceName'] = '192.168.174.101:5555'desired_caps['appPackage'] = 'com.android.calculator2'desired_caps['appActivity'] = '.Calculator'driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

driver.find_element_by_id("digit_1").click()

driver.find_element_by_id("op_add").click()

driver.find_element_by_id("digit_2").click()

driver.find_element_by_id("eq").click()

driver.quit()

缺陷获取效率低定位元素需要时间

为了保证稳定,需要在额外地增加等待时间

获取的数据有限只能获取到界面上可视控件的信息

H5页面信息,(需要切换driver到H5)

Appium的不稳定,出现异常时有可能进程卡死,需要重新启动

三、APK逆向

基本原理

方法一、二 对于没有android逆向经验的朋友是不错的选择,开发起来也比较简单,能满足一些对于应用数据的需求。但是如果想要更高效地获取更多的数据,就需要研究APP的代码。通过向APK中注入自己的代码,修改APP本身原来的逻辑,比如修改函数执行内容、增加新的逻辑等等来来实现自己的目标。一般的操作步骤如下:逆向APK

分析smali代码

通过hook框架向APK中注入代码,修改逻辑需要的基础smali语法

APK反编译

静态、动态调试

常用HOOK框架

反调试、反HOOK应对策略

下面知识可以快速入门smali语法,最基本的数据类型,函数定义关键字,寄存器作用说明

关键字field private isFlag:z --- 定义变量.method --- 方法.parameter --- 方法参数.prologue --- 方法开始.line 12 --- 此方法位于第12行invoke-super --- 调用父函数const/high16 v0, 0x7fo3 --- 把0x7fo3赋值给v0invoke-direct --- 调用函数return-void --- 函数返回void.end method --- 函数结束new-instance --- 创建实例iput-object --- 对象赋值iget-object --- 调用对象invoke-static --- 调用静态函数

数据类型B --- byteC --- charD --- double (64 bits)F --- floatI --- intJ --- long (64 bits)S --- shortV --- void 只能用于返回值类型Z --- BooleanLxxx/yyy/zzz; --- 类

[XXX --- 数组

寄存器类型寄存器采用v和p来命名,

v表示本地寄存器,p表示参数寄存器,

共16个寄存器,v0~v15,  关系如下

v0第一个本地寄存器

v1第二个本地寄存器v2 p0(this)v3 p1第一个参数

v4 p2第二个参数

v5 p3第三个参数

当然,如果是静态方法的话就只有5个寄存器了,不需要存this了。

.registers使用这个指令指定方法中寄存器的总数

.locals使用这个指定表明方法中非参寄存器的总数,放在方法的第一行

工具介绍1. 反编译工具

APKToolbox 工具

AndroidKiller(smali 代码IDE)

常见问题及解决办法有一些包无法使用Apktool进行反编译,常用解决办法:需要先下载smali.jar,baksmali.jar signapk.jar,

先把APK包解压缩,然后直接使用 smali.jar  baksmali.jar 来进行解压缩1:将dex 输出为 smali文件

java -jar baksmali-2.0.3.jar classes.dex   # 把dex 文件反编译2:将修改的smali 文件 重新打包成dex 文件# 把 out 文件夹下的smali文件重新打包成classes.dex文件java -jar smali-2.0.3.jar out #给APK包签名java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk2. 脱壳工具

一些对安全性要求高的APP会采用加固工具为自己的APK加壳,表象就是你能反编译代码,反编译出来的smali代码很简单,只能看到壳的主程序代码,并没有真实的业务逻辑代码。 可以借助apktoolbox来进行检测是什么壳,而去寻找对应的脱壳工具。(由于加固这个比较专业,这里只推荐几款比较出名的脱壳工具,细的就讲不了了)3. 常用Hook 框架xposed

Cydia Substrate

Frida

支持的系统

android

android/IOS

win/mac/linux/IOS/Android

版本要求

android<=8.0

android(<=4.4)/ios(<=9.1)

android<=8.1

开发语言

Java

Java

Python+Js

是否Root

需要

需要

需要

运行

安装后重启

安装模块后需要软重启

基于脚本交互

Java/Native

Java层

Java/Native

Java/Native4. 动态调试smali代码5. 动态调试so

==特殊说明==

随着开发者对于数据安全性的重视,一般的APK都会有各种保护策略,包括代码混淆、加壳,反调试,hook检查等等策略。我们非专业安全研究人员,只能见招拆招,只要能实现我们的目的就可以了,面对一些常规的策略有以下几种应对措施。反调试调用ptrace(PTRACE_TRACEME,0,0,0) (原理一个进程只能被一个进程Ptrace)

检测TracerPid的值

检测代码的执行间隔时间

检测手机的硬件信息是否在调试器中

检测android_server的端口号

检测android_server 名称

检测在调试状态下的软件断点

通过使用Inotify对文件进行监控

检测进程列表中是否存在常见的Hook/调试的进程名称反hook检测已经安装的应用里是否包含xposed/Cydia Substrate

hook PackageManager的getInstalledApplications,把Xposed或者Substrate的包名去掉

关键函数检查调用栈里的可疑方法

hook Exception的getStackTrace,把自己的方法去掉

检测并不应该Native的native方法

hook getModifiers,把flag改成看起来不是native

通过/proc/[pid]/maps检测可疑的共享对象或者JAR

hook 打开的文件的操作,返回/dev/null或者修改的map文件

抓取实现基于框架,开发hook代码

缺陷hook的方式对APK的代码有侵入,需要对APK中的各种反调试、反hook检测手段做规避

如果遇到加壳的,分析时间会很长。如果无法脱壳,那么将无法实现抓取

四、开发工具Requests库

开源框架包括

Pyspider

Scrapy

Tornado协和实现并发访问

五、参考

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。

python移动端爬虫_移动端爬虫工具与方法介绍相关推荐

  1. 计算机网络设置中的网关是什么设备,网关是什么_网关的作用与设置方法介绍 一看就明白...

    网关是什么?对于普通的用户来说,电脑网关不是很明白的,不过接触电脑多了之后,大家也会常常会听到"网关"这个词,那么问题就来了,这个网关是什么意思呢?它又有哪些作用呢?今晚,智能手机 ...

  2. 诛仙3怎么一直服务器维护,诛仙3游戏老是掉线怎么办_诛仙3游戏掉线解决方法介绍...

    诛仙3游戏老是掉线怎么办_诛仙3游戏掉线解决方法介绍 诛仙3经常掉线但又不是网速的锅,通常玩家们会把锅甩给服务器,但是甩锅依然解决不了掉线问题,今天小编为各位玩家带来诛仙3游戏掉线怎么办解决方法,一起 ...

  3. 移动端 爬虫工具 与 方法 介绍

    From:https://www.cnblogs.com/zyfd/p/9681080.html 本文主要介绍了移动端爬虫的工具与方法,作为一个入门的大纲.没有详细介绍的也给出了本人学习过程中借鉴的资 ...

  4. python爬京东优惠券_京东抽奖爬虫LiteVersion

    京东全能工具包 JDPackage V2.3 作者接一切数据&Web&小程序开发外包服务,介绍人提供10%-20%佣金.可签合同.开正规公司发票. 作者2018.8.27留 感谢大 ...

  5. python如何爬取图片_百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://5912119.blog.51cto.com/5902119/1771391 这一篇我想写写如何爬取百度图片的爬虫, ...

  6. 网站加入代码让网页以电脑端打开_移动端网站和pc端网站的异同点

    移动端网站和pc端网站的共性: 手机网站和电脑网站一样,都是需要有一个域名,一个存放源代码的空间,一套网站运行的源代码,访客通过在手机端输入域名访问. 移动端网站和pc端网站的区别: 电脑网站对应的屏 ...

  7. python客户端修改session_python中flask的Session设置的方法介绍

    本篇文章给大家带来的内容是关于python中flask的Session设置的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是Session? cookie: 客户端浏览 ...

  8. python是动态还是静态_python之静态方法和动态方法介绍

    这篇文章主要为大家深度剖析了python之静态方法和动态方法介绍的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下# -*- coding: utf-8 -*- ""&q ...

  9. python pandas csv 写文件_Pandas读写CSV文件的方法介绍(附代码)

    本篇文章给大家带来的内容是关于Pandas读写CSV文件的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 读csv:使用pandas读取import pandas ...

最新文章

  1. Merkle山脉(Merkle Mountain Range)详解
  2. linq2db.mysql_Linq to SQlite简单示例(linq2db版)
  3. dsoframer控件注册,解注册和检查注册情况
  4. JAVA的JDK环境变量的配置JAVA_HOME;PATH;CLASSHOME
  5. append 降低数组位数_4.有序数组
  6. java质,JAVA分解质因子 - osc_r1gtal48的个人空间 - OSCHINA - 中文开源技术交流社区
  7. java XML解析防止外部实体注入
  8. android 内存占用工具,Android系统检测程序内存占用各种方法
  9. Linux+QT界面开发(含数据库)小结
  10. 虚拟机VMware下安装Linux系统,Python3.7之TensorFlow安装
  11. 我的世界手机版javaui材质包_传奇世界中变版手机版下载-传奇世界中变版手机版最新下载...
  12. 3. wordpress 固定链接
  13. 使用格式工厂将H264文件转成mp4文件
  14. 阿里云iot事业部一面面经
  15. 全国各地电信DNS服务器地址:
  16. android 虚拟基站和经纬度,android基于Gps 定位跟基站定位获取经纬度
  17. php控制梯形图,如何画梯形图? plc梯形图怎么画?如何画plc梯形图
  18. 手披云雾开鸿蒙,赞美泰山的诗句
  19. C++ -Pointer指针总结(一)
  20. 开启大功率无线充电新时代

热门文章

  1. 与其争论java和.net的差别,还不如多想点用编程技术挣钱的方式
  2. matlab scatter散点图加标记和colorbar
  3. 奥村模型计算机仿真,实验三-Okumura-Hata方法计算机仿真.doc
  4. 【JavaScript】localStorage的介绍和使用
  5. c语言中json使用实例,Lua利用cjson读写json示例分享
  6. 全球与中国非晶磁芯市场现状及未来发展趋势
  7. 如何绑定万里汇WorldFirst作为亚马逊收款账户?
  8. Android性能优化之线程池策略和对线程池的了解
  9. QT开发之旅三串口设备调试工具
  10. 医学论文讨论部分怎么写