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

 

From:https://www.cnblogs.com/zyfd/p/9681080.html

 

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

 

 

 

一、抓包模拟

 

 

基本原理(中间人攻击)

 

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

 

工具介绍

 

 Fiddlercharlesanyproxy
手机安装证书需要需要需要
支持抓取http/websocket/https(单向认证)http/websocket/https(单向认证)http/websocket/https(单向认证)
支持平台win/mac/linux(受限)win/mac/linuxwin/mac/linux
脚本开发Jscript.net未知js

 

具体的报文走向如下

 

 

手机上的配置方法(以Fiddler为例,其它类似)

 

  1. 准备工作:手机与PC在同一个局域网内(可以连同一个WIFI,或者电脑插入移动WIFI)
  2. 配置步骤见下:

参考链接: https://blog.csdn.net/gld824125233/article/details/52588275

 

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

 

1、单向双向 https

 

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

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

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

 

2、ssl pinning

 

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

解决办法:手机安装 xposed 和 Justtrustme 插件(https://github.com/Fuzion24/JustTrustMe)

 

 

抓取实现

 

抓到报文后,就可以模拟请求了。请求发送的几种方式:

  • 抓包工具里面提供了发送功能,Fiddler 中的 Composer 标签里提供了此功能。

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

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

缺陷

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

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

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

 

 

 

二、模拟点击

 

 

 

基本原理(基于UIautomator)

 

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

Appium官网介绍:
https://appium.io/docs/cn/about-appium/intro/,
https://github.com/appium/appium

Macaca:  https://macacajs.com/

 

 

工具介绍

 

 AppiumMacaca
支持平台需要需要
脚本语言PC/ios/android/hybrid(h5、native混合)PC/ios/android/hybrid
备注支持Android所有版本Android支持API>17
底层框架UIAutoation(IOS)/UIAUtomator+Selendroid(Android)XCUITest(IOS)/UIAUTOMATOR(Android)
稳定性一般更好
开源JS基金项目,社区活跃阿里开源,未来未知

 

市面上常见的UI自动化测试工具以及优缺点

以上主流工具的优点跟缺点

 

 

Airtest

AirtestIDE官方文档AirtestIDE官方文档:https://airtest.netease.com/docs/cn/index.html

关于Airtest的使用探索:https://www.jianshu.com/p/32d08455e86f

 

Airtest 网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
  另外,Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。

 

相较于以上工具来说,Airtest有以下优点和缺点:

 

 

抓取实现

 

 

1. 程序基本架构

 

 

 

2. 框架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 webdriverdesired_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()

 

缺陷

  1. 获取效率低

    • 定位元素需要时间

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

  2. 获取的数据有限

    • 只能获取到界面上可视控件的信息

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

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

 

 

 

三、APK逆向

 

 

基本原理

 

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

一般的操作步骤如下:

  1. 逆向 APK

  2. 分析 smali 代码

  3. 通过 hook 框架向 APK 中注入代码,修改逻辑

需要的基础

  • smali语法

  • APK反编译

  • 静态、动态调试

  • 常用HOOK框架

  • 反调试、反HOOK应对策略

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

 

关键字

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

数据类型

B  ---  byte
C  ---  char
D  ---  double (64 bits)
F  ---  float
I  ---  int
J  ---  long (64 bits)
S  ---  short
V  ---  void   只能用于返回值类型
Z  ---  Boolean
Lxxx/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       使用这个指令表明方法中非参寄存器的总数,放在方法的第一行

网址参考
https://bbs.pediy.com/thread-151769.htm

 

 

工具介绍

 

26 款优秀的 Android 逆向工程工具( 注意看下面评论 ):https://www.freebuf.com/sectool/111532.html

 

1. 反编译工具 

 

APKToolbox 工具

 

AndroidKiller(smali 代码IDE)

 

 

常见问题及解决办法

  • 有一些包无法使用Apktool进行反编译,常用解决办法:

需要先下载 smali.jar, baksmali.jar, signapk.jar,
先把APK包解压缩,然后直接使用 smali.jar  baksmali.jar 来进行解压缩
1:将dex 输出为 smali文件# 把dex 文件反编译java -jar baksmali-2.0.3.jar classes.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.apk

 

 

2. 脱壳工具 

 

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

  • https://github.com/DrizzleRisk/drizzleDumper     某数字公司壳

  • https://github.com/DrizzleRisk                        其它几个脱壳工具

  • https://github.com/zyq8709/DexHunter             很久没更新了

  • https://github.com/F8LEFT/FUPK3                  需要修改 android 源码

 

 

3. 常用 Hook 框架

 

 xposedCydia SubstrateFrida
支持的系统androidandroid/IOSwin/mac/linux/IOS/Android
版本要求android<=8.0android(<=4.4)/ios(<=9.1)android<=8.1
开发语言JavaJavaPython+Js
是否Root需要需要需要
运行安装后重启安装模块后需要软重启基于脚本交互
Java/NativeJava层Java/NativeJava/Native

Xposed:
        API介绍:https://api.xposed.info/reference/packages.html
        开发者论坛:(https://forum.xda-developers.com/xposed)

Cydia Substrate:
        官网:http://www.cydiasubstrate.com/
        文档:http://www.cydiasubstrate.com/id/264d6581-a762-4343-9605-729ef12ff0af/

Frida:
        官网:https://www.frida.re/

 

4. 动态调试smali代码

需要安装 smaliidea,具体教程
http://blog.csdn.net/linchaolong/article/details/51146492

 

5. 动态调试so

使用 IDA 工具包,具体教程:
http://blog.csdn.net/jiangwei0910410003/article/details/51500328

 

==特殊说明==

随着开发者对于数据安全性的重视,一般的 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 协程 实现并发访问

 

 

 

五、参考

 

  • Smali 语法:https://www.jianshu.com/p/ba9b374346dd

  • IDA 使用介绍:http://blog.csdn.net/jiangwei0910410003/article/details/51500328

  • 反反调试:http://blog.csdn.net/feibabeibei_beibei/article/details/60956307

  • 反反 hook: http://gnaixx.cc/2016/09/03/android-anti-hooking/

  • Fiddler 小白入门: http://blog.csdn.net/gld824125233/article/details/52588275

  • 浅析 HTTPS 中间人攻击与证书校验:http://blog.csdn.net/zhangmiaoping23/article/details/79228637

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“芯痛”之下阿里苦心研发NPU AI芯片究竟哪款PU更厉害?

来源&#xff1a;OFweek人工智能网4月19日&#xff0c;有消息称&#xff0c;阿里巴巴达摩院正在研发一款神经网络芯片——Ali-NPU&#xff0c;主要运用于图像视频分析、机器学习等AI推理计算。按照设计&#xff0c;这款芯片性能将是目前市面上主流CPU、GPU架构AI芯片的10倍&…

(转)Windows 批处理实现 定时打开IE 延时一段时间后 关闭IE

要求实现一个定时器&#xff1a;如题 1、首先建立一个bat文件 内容如下&#xff1a; echo offrem 关闭回显命令 cd C:\Program Files\Internet Explorer\rem 改变当前目录到IE所在目录 start iexplore.exe "http://192.168.0.106:29101/LoadMemoryDB?typeMT&commande…

POE API 驱动 OpenAI API 依赖服务

本文主要是介绍了如何利用 POE 提供的 API 服务来驱动原来依赖 OpenAI 的 API 服务 AIGC 的大模型已经火了很久&#xff0c;但是众所周知的原因 OpenAI 的服务订阅对于大陆用户很不友好。而另一个 AIGC 聚合平台 POE 则对大陆用户比较友好&#xff0c;招行的 VISA 和 Master 卡…

深度分析:基站+光通信+手机都用到了哪些美国芯片?有何替代?

来源&#xff1a;21ic电子网摘要&#xff1a;2016年3月8日&#xff0c;美国商务部由于中兴通讯涉嫌违反美国对伊朗的出口管制政策&#xff0c;中兴实行禁运。丨事件&#xff1a;2018年04月16日&#xff0c;美国商务部发布对中兴通讯出口权限禁令&#xff0c;禁止美国企业向其出…

AirtestIDE 教程 — 5分钟上手自动化测试

AirtestIDE 教程 — 5分钟上手自动化测试&#xff1a;&#xff1a;http://airtest.netease.com/tutorial/Tutorial.html AirtestIDE 官方文档&#xff1a;http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html AirtestProject 官方文档&#xff1a;https://air…

全面超越 Appium,使用 Airtest 超快速开发 App 爬虫

From&#xff1a;https://segmentfault.com/a/1190000017982620 https://www.kingname.info/2019/01/19/use-airtest 在 Airtest 中如何正确使用无线模式控制手机&#xff1a;https://juejin.im/post/5c4f12b0e51d453f45614bbb 使用 python poco 夜神模拟器 进行 自动化测…

Nature:“解构”母爱

来源&#xff1a;生物360一篇论文报告称&#xff0c;小鼠下丘脑视前区相当于一个集成中心&#xff0c;汇集育儿行为相关的大量信息。具体而言&#xff0c;研究人员发现视前区表达甘丙肽的神经元会协调育儿行为的运动、动机、激素和社会因素。相关成果近日 发表 于《自然》。育儿…

重磅!不止是芯片!半导体全产业链分析

来源&#xff1a;杨明辉电子&#xff08;ID&#xff1a;gh_e6a65dbbbff9&#xff09;作者&#xff1a;光大电子团队周期性波动向上&#xff0c;市场规模超4000亿美元半导体是电子产品的核心&#xff0c;信息产业的基石。半导体行业因具有下游应用广泛、生产技术工序多、产品种类…

adb(Android debug bridge)命令

From&#xff1a;https://www.cnblogs.com/huanyou/p/5133737.html ADB 用法大全&#xff1a; github 地址&#xff1a;https://github.com/mzlogin/awesome-adb adb 官网链接&#xff08; 国内想访问&#xff0c;你懂得&#xff01;&#xff01;&#xff01; &#xff09;&am…

预计2024年全球医疗AI市场超100亿美元

来源&#xff1a;新浪医药摘要&#xff1a;随着人们对这些技术所带来的好处日益了解&#xff0c;AI在医疗领域的应用正越来越广泛&#xff0c;例如药物研发和医学影像学等方面。高昂的初始资本需求和维护维修费用以及AI可能扰乱行业并导致大规模失业的担忧&#xff0c;阻碍了AI…

分享自己写的一个贪吃蛇的游戏(Linux)

作者: dave_cn 发表于 2010-07-18 21:20 原文链接 阅读: 148 评论: 2转载请注明出处。http://www.cnblogs.com/dave_cn/本程序需要ncurses库&#xff0c;ubuntu下安装ncurses可以执行下面命令&#xff1a;sudo apt-get install libncurses5-dev 关于ncurses的用法&#xff0c;读…

Linux 的 diff 命令

读懂 diff&#xff1a;http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html 菜鸟教程&#xff1a;https://www.runoob.com/linux/linux-comm-diff.html diff 命令详解&#xff1a;https://www.cnblogs.com/wf-linux/p/9488257.htmlhttp://man.linuxde.net/diffhttp…

机器人大潮中暗藏多少伪命题

来源&#xff1a;中国青年报摘要&#xff1a;伴随着巨大的产业浪潮&#xff0c;一种担忧在人群中弥漫&#xff0c;即机器人的“步伐”如此之快&#xff0c;未来究竟会否抢走人类的饭碗&#xff0c;和人类之间爆发一场就业战争&#xff0c;进而夺走人类的一切&#xff1f;2018 R…

哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?

原文来源&#xff1a;arXiv作者&#xff1a;Samuel G. Finlayson、Isaac S. Kohane、Andrew L. Beam「雷克世界」编译&#xff1a;EVA对抗样本的发现引起了人们对深度学习系统的实际部署的关注。在本文中&#xff0c;我们认为&#xff0c;就货币激励和技术脆弱性&#xff08;mo…

Git 详解 和 廖雪峰 Git 教程

转载&#xff1a;廖雪峰 git 教程&#xff1a;https://www.liaoxuefeng.com/wiki/896043488029600 GitHub 秘籍&#xff1a;https://github.com/tiimgreen/github-cheat-sheet/blob/master/README.zh-cn.md Git Community Book 中文版&#xff1a;http://gitbook.liuhui998.c…

ASP.NET MVC: 构建不带 Web 窗体的 Web 应用程序(转载)

我 从事专业开发迄今为止已有 15 年&#xff0c;在此之前&#xff0c;我利用业余时间从事开发至少也有 10 年了。与我这一代的大多数人一样&#xff0c;我是从 8 位计算机起步&#xff0c;然后转用 PC 平台的。随着计算机的复杂性日益增加&#xff0c;我编写的应用程序涵盖了从…

2018人工智能前沿报告:深度学习的应用和价值

来源&#xff1a; 199IT互联网数据中心摘要&#xff1a;报告重点强调了前沿AI技术的应用范围之广&#xff0c;以及经济潜力之盛&#xff0c;也提到了发展中的一些局限和挑战。报告包含400个应用案例&#xff0c;横跨19个行业的9种业务功能。报告重点强调了前沿AI技术的应用范围…

跟我学Telerik公司的RadControls控件(四)

朋友们、同行们通过前面《跟我学Telerik公司的RadControls控件》系列三篇的学习&#xff0c;你一定会内心有一种涌动&#xff0c;有种相见&#xff08;RadControls&#xff09;恨晚的感觉。那就和晓军一起加入学习RadControls控件的行列&#xff0c;为IT的朋友提供更加明了化的…

puppeteer( Nodejs 版 selenium )快速入门

From&#xff1a;https://www.cnblogs.com/CyLee/p/9310839.html puppeteer 官网&#xff1a;https://pptr.dev/ Puppeteer 中文文档 &#xff08;与官方同步更新&#xff09;&#xff1a;https://segmentfault.com/a/1190000015913821 Puppeteer 中文文档 &#xff1a;https…

硅谷人眼中的2018年十大前沿科技预测

来源&#xff1a; 和米资本近日&#xff0c;由斯坦福大学的顶级学术研究团队、美国国防部高级研究计划局、硅谷最具创新力和影响力的创业公司以及和米资本一起精心策划&#xff0c;共同探讨技术将如何重新塑造行业和社会等问题&#xff0c;分析预测了2018年全球十大前沿科技的未…