• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

安卓逆向 - mitmproxy+uiautomator2自动化

武飞扬头像
追风暴的人
帮助1

文章旨在学习和记录,若有侵权,请联系删除


前言

本期主要介绍纯python实现的一个app自动化采集方案,模拟用户操作无视反爬,当遇见风控很严格的、逆向不出来的app时,可以尝试使用。


一、uiautomator2介绍

1.简介

uiautomator2是一个python库,用于Android的UI自动化测试,其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。

GitHub地址:https://github.com/openatx/uiautomator2

2. 安装

环境要求:python 3.6 、android 4.4 、adb
首先设备连接到PC,并能够adb devices发现该设备。

2.1. 安装uiautomator2

pip install --pre uiautomator2 

2.2. 初始化电脑端

python -m uiautomator2 init

2.3. 初始化手机端

python -m uiautomator2 init --serial 'SERIAL'   # 'SERIAL' 填入设备id

最后提示success,代表uiautomator2初始化成功,手机上会安装一个名ATX的小黄车应用。

3. 使用

先简单介绍下常用操作:

import uiautomator2 as u2

# USB链接设备 
d = u2.connect_usb('123456789F')  # 设备id
# 打开应用
d.app_start(pakagename) # app包名
# 点击
d.xpath('//*[@text="主页"]').click()  # 选中并点击主页文字的对象
# 截图
d.screenshot()  
# 滑到底部
d(scrollable=True).scroll.toEnd()
...

二、weditor介绍

1. 简介

weditor是一个很好用的UI元素定位的工具。它能够提供辅助编写脚本,定位元素,调试代码等功能,是基于python的一个查看APP元素的工具。

2. 安装

pip install weditor 

3. 使用

python -m weditor

输入命令后,会自动打开链接 http://localhost:17310/# ,展示手机ui界面,可以定位元素,activity,以及控件xpath路径。
学新通

三、mitmproxy介绍

1. 简介

这是一个通过控制台形式操作的抓包程序,支持HTTP和HTTPS。
它有两个关联组件:

  • mitmdump,它是mitmproxy的命令行接口,利用它可以对接python脚本,实现监听后的处理,这也是我们本期的重点
  • mitmweb,它是一个web程序,可以通过它提供的网页接口观察mitmproxy捕获的请求

官网如下:
https://mitmproxy.org

2. 安装

电脑端:

pip install mitmproxy 

手机端:
访问链接 http://mitm.it/ 安装证书

3. 使用

这里只演示mitmdump对接python脚本,实现监听数据包的用法

  1. 手机电脑同个wifi,且设置手动代理、端口
    详情百度下mitmproxy抓包

  2. 新建拦截脚本 test_intercept.py

    from mitmproxy import http, ctx
    
    def request(flow: http.HTTPFlow):
        # 设置请求的头信息
        flow.request.headers["myheader"] = "zfbdr"
        print(flow.request.headers)
    
    def response(flow: http.HTTPFlow):
        ...
    
    
  3. 命令行运行 mitmdump -s test_intercept.py -p 8889

  4. 接着滑动手机任意app页面,命令行打印出了捕获到的请求信息,并且打印了我们print的请求头信息和设置的myheader=zfbdr键值对。
    学新通

四、某app采集数据

这边只演示app搜索接口

1. 抓包

命令行键入 mitmdump -p 8889, 因为刚刚手机设置了手动代理端口为8889,直接指定该端口抓包
学新通
成功找到搜索接口

2. 开发/注入拦截脚本

我们只需要拦截该url路径的数据包,然后进行输出/保存数据即可

# test_intercept.py
from mitmproxy import http, ctx

def request(flow: http.HTTPFlow):
    ...

def response(flow: http.HTTPFlow):
    if '/search/notes' in flow.request.url:
    	# 此处开发自己的业务保存逻辑,这边只演示下打印
        print(flow.response.text)  
        print('拦截到指定url\n')
    ...

3. 开发自动化搜索程序

此处配合weditor来定位元素,进行点击等操作,操作简单玩几把就熟悉了,下图实现了简单的自动化搜索操作代码:

# auto_test.py
class TESTAPP(object):
    def __init__(self, device):
        self.pakagename = 'xxx'
        self.d = u2.connect_usb(device)
            
    def startApp(self):
        self.d.unlock()
        self.d.app_stop(self.pakagename)

        self.d.app_start(self.pakagename)
        self.d.sleep(5)

    def search(self, keyword):
        # 点击搜索栏
        self.d.xpath('//*[@resource-id="xxx:id/cu4"]').click()
        # 点击输入框
        self.d.xpath('//*[@resource-id="xxx:id/bp_"]').click()
        time.sleep(0.1)
        # 输入关键词
        self.d.send_keys(keyword, clear=True)
        # 点击搜索
        self.d.xpath('//*[@resource-id="xxx:id/bpe"]').click()

if __name__ == "__main__":
    d = XXXhs(device="123456789F")
    d.search('2023')

4. 运行程序

  1. 注入mitmproxy脚本: mitmdump -s test_intercept.py -p 8889
  2. 另起命令行窗口:python auto_test.py

随着手机一系列自动化操作后,数据成功打印/保存。
学新通

总结

本文介绍了基于uiautomator2 mitmproxy的python自动化采集方案,功能强大,实现简单,能有效绕过绝大多数的反爬手段和一定的风险控制,可以配合群控技术批量化采集。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggfjhg
系列文章
更多 icon
同类精品
更多 icon
继续加载