安卓逆向python爬虫

charles抓不到app某一请求包

2020-07-24  本文已影响0人  苦海飘摇

前言

工作中遇到了某个app抓不到登录请求的数据包,但是其他请求能抓到。
网上了解到charles能抓TCP的http和https请求包,因此怀疑他是走的socket通信。
Flutter强制不使用系统代理,导致APP使用Fiddler或Charles这类代理抓包软件默认情况下无法抓取请求Flutter类型App的抓包

模拟socket请求

基于socket实现的http请求代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Descr : 基于socket实现http请求
# @Atten : 
# @Author: luqin
# @File  : socket_http.py
# @Vers  : 1.0
# @Time  : 2020-07-24 15:20
import time
import socket
import select

# 定义一个Request类 对socket对象进行二次封装
class Request(object):
    def __init__(self, sock, info):
        self.sock = sock
        self.info = info

    def fileno(self):
        return self.sock.fileno()

class Lou(object):
    def __init__(self):
        self.sock_list = []
        self.conn_list = []

    def add_request(self, req_info):
        sk = socket.socket()
        sk.setblocking(False)
        try:
            sk.connect((req_info['host'], req_info['port']))
        except BlockingIOError as e:
            pass
        obj = Request(sk, req_info)
        self.conn_list.append(obj)
        self.sock_list.append(obj)

    def run(self):
        while True:
            # 只要列表中的对象有fileno方法就可以作为select的参数
            r, w, e = select.select(self.sock_list, self.conn_list, [], 0.05)
            for obj in w:
                data = "GET %s HTTP/1.1\r\nhost:%s\r\n\r\n" % (obj.info["path"], obj.info["host"])
                obj.sock.send(data.encode("utf-8"))
                self.conn_list.remove(obj)
            for obj in r:
                response = obj.sock.recv(8192)
                print(obj.info["host"], response)
                self.sock_list.remove(obj)
                # obj.info["callback"](response)
            if not self.sock_list:
                break
# def done(response):
#     filename = str(time.time()).split('.')[1]
#     with open("%s.html" % filename, "wb") as f:
#         f.write(response)

url_list = [
    {"host": "www.baidu.com", "port": 80, "path": "/"},  # , "callback": done},
    {"host": "cn.bing.com", "port": 80, "path": "/"},  # , "callback": done},
]
l = Lou()
for req_info in url_list:
    l.add_request(req_info)
l.run()

请求结果

run

该代码可以直接运行,可以自己用charles抓包试试,是抓不到任何包的。接下来用wireshark抓包结果如下:


wireshark

用wireshark抓手机包

mac启动热点方法

\color{red}{注意:}\color{#fbbc05}{mac使用的是网线可以开热点,如果mac使用的是无线网络请使用usb共享网络}

电脑打开热点,手机连接电脑的热点。

wireshark重设捕获接口

点击wireshark的红色方框停止捕获,选择捕获接口,勾选手机使用的网络,如下图:


i重设捕获接口
上一篇 下一篇

猜你喜欢

热点阅读