Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解

目录
  • windows
  • 一、介绍说明
  • 二、安装以及配置
  • 三、mitmdump的使用
  • 夜神模拟器
  • 一、安装过程
    • 1、准备
    • 2.安装命令,在.mitmproxy目录下运行cmd
    • 3.重命名+推送至手机
    • 4.安装mitm证书到手机adb shell操作:
    • 5.查看是否成功:

**

windows

**

一、介绍说明

mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形式操作。

mitmproxy还有两个关联组件。一个是mitmdump,它是mitmproxy的命令行接口,利用它我们可以对接Python脚本,用Python实现监听后的处理。另一个是mitmweb,它是一个Web程序,通过它我们可以清楚观察mitmproxy捕获的请求。

mitmproxy的功能:

1、拦截HTTP和HTTPS请求和响应

2、保存HTTP会话并进行分析

3、模拟客户端发起请求,模拟服务器端返回响应

4、利用反向代理将流量转发给指定的服务器

5、支持Mac和linux上的透明代理

6、利用Python对HTTP请求与响应进行实时处理

mitmproxy运行与自己的PC上,在PC的8080端口运行,然后开启一个代理服务,这个服务实际上是一个HTTP/HTTPS的代理。

手机和PC在一个局域网内,设置代理是mitmproxy的代理地址,这样手机在访问互联网的时候流量数据包就会流经mitmproxy,mitmproxy再去转发这些数据包到真实的服务器,服务器返回数据包时再由mitmproxy转发回手机,这样mitmproxy就相当于起了中间人的作用,抓取到所有request和response,另外这个过程还可以对接mitmproxy,抓取到的request和response的具体内容都可以直接用python来处理,比如:得到response之后我们可以直接进行解析,然后存入数据库,这样就完成了数据的解析和存储过程。

二、安装以及配置

下载地址如下:
https://mitmproxy.org/downloads/#4.0.4/

在windows平台下安装:

输入上面的下载地址下载mitmproxy-4.0.4-windows-installer.exe,下载后直接双击安装包即可安装。

注意 :在 Windows 上不支持 mitmproxy 的控制台接口,但是可以使用 mitmdump和mitmweb。

证书配置
对于mitmproxy来说,如果想要截获HTTPS请求,就需要设置证书。mitmproxy在安装后会提供一套CA证书,只要客户端信任了mitmproxy提供的证书,就可以通过mitmproxy获取HTTPS请求的具体内容,否则mitmproxy是无法解析HTTPS请求的。

首先,运行mitmdump命令产生CA证书,并在用户目录下的.mitmproxy 目录里面找到CA证书,如下图所示。

在windows平台下
点击mitmproxy-ca.p12,就会出现导入证书的引导页,如下图所示:

然后直接点击下一步即可,如果不需要设置密码,继续点击下一步。

接下来需要选择证书的存储区域,如下图所示。

这里点击第二个选项“将所有的证书都放入下列存储”,然后点击“浏览”按钮,选择证书存储位置为 受信任的根证书颁发机构”,接着点击“确
定”按钮,然后点击“下一步”按钮。

最后,如果有安全警告弹出,直接点击“是”按钮即可。这样就完成了CA证书的配置了。

在Android平台下
在Android手机上,需要将mitmproxy-ca-cert.pem文件发送到手机上,接下来点击证书会出现一个提示窗口。

这时候输入证书名称,例如:mitmproxy,然后点击确定则完成了安装。

三、mitmdump的使用

mitmdump是mitmproxy的命令行接口,同时还可以对接Python对请求进行处理,这是相对于fiddler和Charles这些工具更加方便的地方,有了它我们可以不用手动截获和分析HTTP请求和响应,只需要写好请求与响应的处理逻辑即可。它还可以实现数据的解析、存储等工作,这些过程都可以通过Python来实现。

1、我们可以使用命令启动mitmproxy,并把截获的数据保存到文件中
命令如下:

mitmdump -w outfile

其中outfile的名称任意,截获的数据都会被保存到此文件中。

还可以指定一个脚本来处理截获的数据,使用-s参数即可

mitmdump -s script.py

这里指定了当前处理脚本为script.py,它需要放置在当前命令执行的目录下。
我们可以在脚本里写入如下的代码:

def request(flow) :
      flow.request.headers['User-Agent'] = 'MitmProxy'
      print(flow.request.headers)

我们定义了 一个request ()方法,参数为 flow ,它其实是一个 HTTP Flow 对象,通过 request 属性即可获取到当前请求对象 。然后打印输出了请求的请求头,将请求头的 User-Agent 改成了MitmProxy。运行之后在手机端访问 http: //httpbin.org get 。

手机端返回结果的 Headers 实际上就是请求的 Headers, User-Agent 被修改成了 mitmproxy ,PC控制台输出了修改后Headers 内容,其 User-Agent 的内容正是 mitmproxy。所以,通过这上面三行代码我们就可以完成对请求的改写。

print()方法输出结果可以呈现在 PC 端控制台上,可以方便地进行调试。

2、日志的输出
mitmdump提供了专门的日志输出功能,可以设定不同级别以不同颜色输出结果,我们可以把脚本修改成以下内容:

from mitmproxy import ctx
def request(flow):
     flow .request . headers['User-Agent'] ='mitmProxy'
     ctx.log.info(str(flow.request.headers))
     ctx.log.warn(str(flow.request.headers))
     ctx.log.error(str(flow.request.headers))

在这里调用了ctx模块,它有一个log功能,调用不同的输出方法就可以输出不同颜色的结果,以方便我们做调试。例如:info()方法输出的内容是白色的,warn()方法输出的内容是黄色的,error()方法输出的内容是红色的。

不同的颜色对应不同级别的输出,我们可以将不同的结果合理划分级别输出,以更直观方便地查看调试信息。

3、request的使用
我们在上面也实现了request()方法并且对Headers进行了修改。下面我们介绍下request其他常用的一些功能,如下:

from mitmproxy import ctx
def request(flow):
    request = flow.request
    info = ctx.log.info
    info(request.url)
    info(str(request.headers))
    info(str(request.cookies))
    info(request.host)
    info(request.method)
    info(str(request.port))
    info(request.scheme)

在手机上打开百度,就可以看到pc端控制台输出了一系列的请求,在这里我们找到第一个请求。控制台打印输出了request的一些常见的属性,如URL、headers、cookies、host、method、scheme即请求链接、请求头、请求cookies、请求host、请求方法、请求端口、请求协议这些内容。

同时我们还可以对任意属性进行修改,就像最初修改headers一样,直接赋值即可,例如把请求的URL修改了,如下:‘

def request(flow):
    url ='https://httpbin.org/get'
    flow.request.url = url

我们只需要用简单的脚本就可以成功把请求修改为其他的站点,通过这种方式修改和伪造请求就变得很容易。

通过这个例子我们也可以知道,有时候URL虽然是正确的,但是内容并非是正确的,我们需要进一步提高自己的安全防范意识。

所以我们能很容易地获取和修改request的任意内容,比如:可以用修改cookies、添加代理的方式来规避反爬。

4、响应的使用
对于爬虫来说,我们会更加关心响应的内容,因为response body才是爬取的结果。对于响应来说,mitmdump也提供了对应的处理接口,就是response()方法。

from mitmproxy import ctx
def response(flow):
    response = flow.response
    info = ctx.log.info
    inf(str(response.status_code))
    info(str(response.headers))
    info(str(response.cookies))
    info(str(response .text))

在这里打印输出了响应的状态码status_code、响应头headers、cookies、响应体text这几个属性,其中最重要的是text属性也就是网页的源代码。

通过response()方法获取每个请求的响应内容,然后再进行响应的信息提取和存储,我们就可以完成数据爬取啦!

**

夜神模拟器

**

说明:

Android证书分为“用户证书”和“系统证书”两种,在设置->安全->"查看安全证书"列表中,可以看到“系统”和“用户”两个列表。用户通过浏览器下载安装或者通过WLAN高级设置安装的证书均为用户证书。 安装为系统证书有什么好处呢?
(1)安装用户证书必须要设置开机密码,而且设置后就不能取消,除非先删掉所有的用户证书。如果安装为系统证书就不需要设置开机密码,自动化操作时更方便。
(2)Android 7以上版本APP默认不信任用户证书,只信任系统证书,安装为用户证书,对APP的HTTPS抓包会失败。安装为全局证书才能被所有APP信任,方可进行HTTPS抓包。

默认情况下,针对 Android 7.0+ (API level 24+) 的应用不再信任用户或管理员添加的CA证书来进行安全连接。(之前我们其实是将安全证书安装到安卓手机上作为用户信任安全证书,新版本如果APP开启了设置我们的代理请求会被认为是不安全的。)
Android的系统证书的存储位置是/system/etc/security/cacerts,证书文件必须是PEM格式,而且文件命名必须符合系统证书规范

一、安装过程

1、准备

1、准备一台已经 root的手机
2、准备mitmproxy证书文件
Windows 或者Linux 在mitmdump第一次运行会在用户目录生成对应的文件。
目录位于:C:\Users\Administrator.mitmproxy

查看电脑是否成功连接到手机

adb devices -l #显示所有已连接的设备详细信息:127.0.0.1:62001

未连接则运行如下命令连接
adb connect 127.0.0.1:62001 #默认端口 

2.安装命令,在.mitmproxy目录下运行cmd

#PEM或者DER格式均可
#如果是PEM格式:
In: openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -noout
out: c8750f0d
# 如果是DER格式:
In: openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer -noout
out: c8750f0d

若报错:无法定位序数4540于动态链接库LIBEAY32.dll上
1、程序依赖于libeay32.dll动态链接库时:

创建脚本:
@echo 开始注册
copy libeay32.dll %windir%\system32\
regsvr32 %windir%\system32\libeay32.dll /s
@echo libeay32.dll注册成功
@pause

2、程序不依赖于libeay32.dll动态链接库时:(无法定位序数一般情况下是不依赖)
找到系统目录下的该库文件将其改个名,例如win32下:
在系统盘的windows的system32下把libeay32.dll改成libeay32_old.dll,就OK了。
3、如果程序依赖于该动态库,而且该库已经损坏,则需要重新下载

3.重命名+推送至手机

# window重命名 为符合android规范名称
ren mitmproxy-ca-cert.pem c8750f0d.0
# 或 linux重命名
cp mitmproxy-ca-cert.pem c8750f0d.0
#传入手机
adb push c8750f0d.0 /sdcard

4.安装mitm证书到手机adb shell操作:

#获取手机的root权限
adb shell
su
#挂载系统目录为可写
mount -o rw,remount /
mv /sdcard/c8750f0d.0  /system/etc/security/cacerts
#修改证书权限
chmod 644 /system/etc/security/cacerts/c8750f0d.0

如果顺利,至此已经完成安装!

注:在执行mv /sdcard/c8750f0d.0 /system/etc/security/cacerts时
有的会出现Unable to chmod /system/etc/security/cacerts/c8750f0d.0: No such file or directory,这个问题是system文件为只读,需要将其挂载为可读写
一般的解决方法是 mount -o rw,remount /system
修改system读写权限,然后再进行复制操作
如果修改了之后还是提示Read-only file system,
还有方法 adb root adb disable-verity adb reboot #手机会重启,不用关闭cmd窗口,手机可能需要拔掉数据写重新连接
adb root adb shell mount -o rw,remount /system #再次进行修改 然后就可以进行复制操作了。
(我是遇到了这种情况,这个方法可行) 复制完之后输入reboot重启

5.查看是否成功:

手机的设置——安全——凭据存储——信任的凭据(信任的CA证书)

其下应该有mitmproxy项

到此这篇关于Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解的文章就介绍到这了,更多相关mitmproxy安装使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python代理工具mitmproxy使用指南

    前言 mitmproxy 是 man-in-the-middle proxy 的简称,译为中间人代理工具,可以用来拦截.修改.保存 HTTP/HTTPS 请求.以命令行终端形式呈现,操作上类似于Vim,同时提供了 mitmweb 插件,是类似于 Chrome 浏览器开发者模式的可视化工具. 它是基于Python开发的开源工具,最重要的是它提供了Python API,你完全可以通过Python代码来控制请求和响应,这是其它工具所不能做到的,这点也是我喜欢这个工具的原因之一. 安装 sudo pip

  • 使用Python实现windows下的抓包与解析

    系统环境:windows7,选择windows系统是因为我对自己平时日常机器上的流量比较感兴趣 python环境:python2.7 ,这里不选择python3的原因,是因为接下来要用到的scapy包在python3中安装较于python2要麻烦得多.如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程. 需要的python包:scapy和dpkt 抓包代码: from scapy.sendrecv import sniff from scapy.u

  • python如何利用Mitmproxy抓包

    一.使用 安装 pip install mitmproxy mitmproxy 是具有控制台界面的交互式,支持SSL的拦截代理 mitmdump是mitmproxy的命令行版本.想想tcpdump为HTTP mitmweb 是一个基于web的界面,适用于mitmproxy mitmproxy(mac).mitmdump.mitmweb(win) 这三个命令中的任意一个即可 mitmweb -s mitm.py 命令行启动默认端口8080 mitmweb -p 8888 -s mitm.py 指定

  • 详解安装mitmproxy以及遇到的坑和简单用法

    mitmproxy 是一款工具,也可以说是 python 的一个包,在命令行操作的工具. MITM 即中间人攻击(Man-in-the-middle attack) 使用这个工具可以在命令行上进行抓包,还可以对所抓到的包进行脚本处理,非常有用. 安装 mitmproxy 安装这个我们必须先安装了 pip. pip 在安装了 python之后自带的,如果你安装了 python 就可以忽略了,如何安装这里就不说了,只说安装 mitmproxy 打开命令行,输入 pip install mitmpro

  • Mac下使用mitmproxy抓包HTTPS数据方法详解

    在Mac上常用的抓包软件是Charles,网上关于Charles的教程很多,这里介绍另一个抓包神器mitmproxy.mitmproxy是一款可交互式的命令行抓包工具,它除了可以抓包查看http/https请求,还有一个很强大的功能是拦截并修改request或者response,后面我会用实际例子演示如何修改知乎的回答:) 安装 mitmproxy官网介绍了用以下命令来安装 pip install mitmproxy 我在实际安装过程中遇到了一些坑,首先是OSXElCapitan及以上的系统版本

  • Python3自定义http/https请求拦截mitmproxy脚本实例

    脚本内容 代码如下: from mitmproxy import http, ctx from multiprocessing import Lock class Filter: def __init__(self, filter_info): self.log_info = "" self.mutex = Lock() self.filter_info = filter_info self.response_file = None self.switch_on = False sel

  • Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解

    目录 windows 一.介绍说明 二.安装以及配置 三.mitmdump的使用 夜神模拟器 一.安装过程 1.准备 2.安装命令,在.mitmproxy目录下运行cmd 3.重命名+推送至手机 4.安装mitm证书到手机adb shell操作: 5.查看是否成功: ** windows ** 一.介绍说明 mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler.Charles的功能,只不过它是一个控制台的形式操作. mitmproxy还有两个关联组件.一个是mitmd

  • windows下python 3.9 Numpy scipy和matlabplot的安装教程详解

    学习python过程中想使用python的matlabplot绘图功能,遇到了一大批问题,然后一路过关斩将,最终安装成功,实为不易,发帖留念. 1 首先打开cmd win+r 2 pip安装 pip3 install --user numpy scipy matplotlib –user 选项可以设置只安装在当前的用户下,而不是写入到系统目录.默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以: pip3 install numpy scipy matplotlib -i https://

  • Python抓包程序mitmproxy安装和使用过程图解

    一.介绍说明 mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler.Charles的功能,只不过它是一个控制台的形式操作. mitmproxy还有两个关联组件.一个是mitmdump,它是mitmproxy的命令行接口,利用它我们可以对接Python脚本,用Python实现监听后的处理.另一个是mitmweb,它是一个Web程序,通过它我们可以清楚观察mitmproxy捕获的请求. mitmproxy的功能: 1.拦截HTTP和HTTPS请求和响应 2.保存HTTP会

  • 抓包工具Fiddler的使用方法详解(Fiddler中文教程)

    Fiddler简介 Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler可以也可以让你检查所有的HTTP通讯,设置断点,以及Fiddle所有的"进出"的数据(我一般用来抓包) Fiddler还包含一个简单却功能强大的基于JScript .NET事件脚本子系统,它可以支持众多的HTTP调试任务. Fiddler官方网站提供了大量的帮助文档和视频教程,这是学习Fiddler的最好资料 Fiddler_官方网站 Fid

  • Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)

    为什么,这么简单的一个python,我还要特意来写一篇文章呢? 是因为留念下,在使用了Anaconda2和Anaconda3的基础上,现在需安装python3.6.0来做数据分析. 关于数据分析工程师的,相关博客,我会陆续更新发布. Python 3.6.1的下载 https://www.python.org/或者到我们下载http://www.jb51.net/softs/597875.html 点击download选择你下载的版本.毫不犹豫选择最新的.进入以后有很多可选的.windows下有

  • Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解

    <strong><span style="color:#FF0000;">安装环境</span></strong> 谷歌云实例 Windows Server 2016 Apache Apache/2.4.25 (win64-VC14) PHP php-5.6.30 (VC11 x64 Thread Safe) PERL ActivePerl-5.24 (Win64) OpenSSL openssl-1.0.2j-win64 VC14 Mi

  • windows系统下,如何在C#程序中自动安装字体

    1.1.使用代码安装字体 注意:安装字体时,需要windows的管理员权限. [DllImport("kernel32.dll", SetLastError = true)] public static extern int WriteProfileString(string lpszSection, string lpszKeyName, string lpszString); [DllImport("gdi32")] public static extern i

  • Linux上搭载Nginx负载均衡配置使用案例详解

    目录 1,这里我们来说下很重要的负载均衡, 那么什么是负载均衡呢? 2, 负载均衡的种类 3, 这里我们只来说Nginx(其他的大家有兴趣可以自行查阅相关文档) 4, 创建两台Nginx服务器 5, 搭建Nginx 搭建Keepalived:(Keepalived需要依赖openssl) 1,这里我们来说下很重要的负载均衡, 那么什么是负载均衡呢? 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担.在此

  • 微信小程序组件之srcoll-view的详解

    微信小程序组件之srcoll-view的详解 今天记录一下scroll-view学习中遇到的问题及解决办法,希望能对其他同学有所帮助. 首先展示一下想达到的效果.↓ vertical scroll实现上下滚动,horizontal实现左右滚动. 先附上wxml的代码. <view class="container"> <view> <text>vertical scroll</text> <scroll-view scroll-y

  • 微信小程序支付及退款流程详解

    首先说明一下,微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可.我在后端使用的是php,当然在这篇博客里我不打算贴一堆代码来说明支付的具体实现,而主要会侧重于整个支付的流程和一些细节方面的东西.所以使用其他后端语言的朋友有需要也是可以看一下的.很多时候开发的需求和相应问题的解决真的要跳出语言语法层面,去从系统和流程的角度考虑.好的,也不说什么废话了.进入正题. 一. 支付 支付主要分为几个步骤: 前端携带支付需要的数据(商品id,购

随机推荐