Mitmproxy代理配置及接口加解密详细教程

Mitmproxy代理配置及接口加解密详细教程

官方网站:Event Hooks & API (mitmproxy.org)

本节目录展示:

  • 客户端下载

  • 安装证书

  • 启动服务

  • ios设备配置代理

  • 使用web抓取

  • 字符替换

  • 字符串转二进制

  • 字符串转字节

    • 实际演示

  • 解密代码

客户端下载

「方式一」

https://mitmproxy.org/downloads/

「方式二」

安装 mitmproxy

pip install mitmproxy

mitmproxy 提供了三个命令,启动模式不同:

mitmproxy 提供一个命令行界面(该命令不支持windows)。mitmdump  提供一个简单的终端输出。mitmweb  提供一个浏览器界面。

  1. mitmproxy -p 指定的端口号

  2. mitmdump -p 指定的端口号

  3. mitmweb -p 指定的端口号

常用参数

  1. -h 帮助信息

  2. -p 修改监听端口

  3. -s 加载 python 脚本

安装证书

「注意:需要先开启代理连接后进行安装」

需要配置代理进行安装,或者直接进入安装mitmproxy目录拿证书进行安装。

图片

在连接mitmproxy之后,手机或设备需要设置代理,输入 http://mitm.it/ 安装证书

http://mitm.it/

mitmproxy代理ios设备

启动服务

指定8899端口启动服务

mitmdump -p 8899

图片

ios设备配置代理

确保你的计算机和 iOS 设备连接到同一个局域网。

1、获取计算机IP

  •  
      
    1. ipconfig (Windows)

    2. ifconfig (Mac/Linux)

2、ios设备配置代理,在 iOS 设备上打开设置(Settings)应用程序。

3、点击 Wi-Fi,并找到你所连接的 Wi-Fi 网络。点击网络名称旁边的 "i" 图标以查看网络详细信息。

图片

image-20230808104200801

图片

image-20230808104232186

4、在网络详细信息页面中,向下滚动并找到 "HTTP 代理"(HTTP Proxy)选项。选择 "手动"(Manual)。

5、在 "服务器"(Server)字段中输入 mitmproxy 运行计算机的 IP 地址,并在 "端口"(Port)字段中输入 mitmproxy 的监听端口,默认为 8080。

图片

6、保存设置,并关闭设置应用程序。

7、浏览器输入http://mitm.it/进行证书的安装。

图片

8、前往设置 证书的信任设置: 设置 -> 通用-> VPN与设备管理 ->  mitmproxy,点击进行安装

图片

9、安装成功

图片

10、信任证书,通用 -> 关于本机 -> 下拉到 证书信任设置 -> 找到mitmproxy点击开关信任。

图片

现在,你的 iOS 设备将经过 mitmproxy,并且可以在 mitmproxy 上拦截和修改所有的网络请求和响应。你可以在 mitmproxy 的界面中查看和操作这些请求和响应。

安卓一般在安全-加密与凭据-用户,有时候还有去更多WLAN设置里面安装证书

图片

报错

Client TLS handshake failed. Client and mitmproxy cannot agree on a TLS version to use. You may need to adjust mitmproxy's tls_version_client_min option.

使用如下命令即可,忽略就行。目前没啥影响。

mitmdump -p 8899  --set tls_version_client_min=SSL3

使用web抓取

mitmweb -p 8899

图片

代码过滤处理

示列代码 mitmproxt_demo01.py

  1. # -*- coding: utf-8 -*-

  2. '''

  3. @Time : 2023/8/7 18:16

  4. @Email : Lvan826199@163.com

  5. @公众号 : 咖啡加剁椒

  6. @File : mitmproxy示列.py

  7. '''

  8. __author__ = "梦无矶小仔"

  9. import mitmproxy

  10. from mitmproxy import ctx,http

  11. class Counter:

  12.     def __init__(self):

  13.         pass

  14.     # 所有发出的请求数据包都会被这个方法所处理

  15.     def request(self, flow: mitmproxy.http.HTTPFlow):

  16.         # 获取请求对象

  17.         request = flow.request

  18.         # 实例化输出类

  19.         info = ctx.log.info

  20.         # 打印请求的url

  21.         info(request.url)

  22.         # 打印请求方法

  23.         info(request.method)

  24.         # 打印host头

  25.         info(request.host)

  26.         # 打印请求端口

  27.         info(str(request.port))

  28.         # 打印所有请求头部

  29.         info(str(request.headers))

  30.         # 打印cookie头

  31.         info(str(request.cookies))

  32.         print("请求的参数data----------------------")

  33.         info(str(request.data))

  34.         print("请求的参数data----------------------")

  35.     # 所有服务器响应的数据包都会被这个方法处理

  36.     def response(self, flow: mitmproxy.http.HTTPFlow):

  37.         # 获取响应对象

  38.         response = flow.response

  39.         # 实例化输出类

  40.         info = ctx.log.info

  41.         # 打印响应码

  42.         info(str(response.status_code))

  43.         # 打印所有头部

  44.         info(str(response.headers))

  45.         # 打印cookie头部

  46.         info(str(response.cookies))

  47.         # 打印响应报文内容

  48.         info(str(response.text))

  49. addons = [

  50.     Counter()

  51. ]

通过脚本启动

 mitmweb -p 8899 -s .\mitmproxy_demo01.py

加解密

python 在 「Windows」下使用AES时要安装的是pycryptodome 模块

pip install pycryptodome 

python 在 「Linux」下使用AES时要安装的是pycrypto模块

pip install pycrypto 

字符替换

aaa = '151691566822749_NEW_RDA_LOADOKaRgN'

图片

这会SOH对应的是ACCIC码1

  1. # 所以可以这样进行替换

  2. repl_aaa = aaa.replace(chr(1), " ")

字符串转二进制

  1. string = "Hello World"

  2. binary = " ".join(format(ord(char), '08b') for char in string)

  3. print(binary)

运行这段代码,它将输出 01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100,这就是 "Hello World" 的二进制表示。

在这个示例中,format(ord(char), '08b') 将每个字符转换为 8 位的二进制字符串,然后使用 join() 函数以空格分隔每个字符的二进制表示,最终得到一个包含整个字符串二进制表示的字符串。

字符串转字节

在 Python 中,可以使用字符串的 encode() 方法将字符串转换为字节(bytes)类型的数据。你可以指定一个字符编码来确定字节表示中的字符编码方式。

下面是一个示例代码,演示如何将字符串转换为字节:

  1. string = "Hello World"

  2. bytes_data = string.encode('utf-8')

  3. print(bytes_data)

运行这段代码,它将输出 b'Hello World',这就是字符串 "Hello World" 的字节表示。

在这个示例中,encode() 方法将字符串使用 UTF-8 编码方式转换为字节类型的数据。默认情况下,Python 使用 UTF-8 作为字符编码方式。你可以根据具体的需求选择其他字符编码方式,例如 "utf-16"、"latin-1" 等。

需要注意的是,字节类型的数据表示为以 b 开头的字符串,表示它是字节数据而不是普通的字符串。

实际演示
  1. aaa = '151691566822749_NEW_RDA_LOADOKaRgNxBJEpvYo1FdZQu9d85ExmqB97SpGUPvMmSYZXIauvSu9IgrpJSK5PAs4DMMNONB2daybYwrdCjCWKUOPUb1KTPyiHYfo9EVg5jMXkDMT7xebOYk0x0loFWsSEKguYmVe5U2jAc5EDPn8nIBLTxGXSeL/S6ZbXJhEszrI1FJ/CYxjZfQKVQhMENxsN8O/yhK2AgXQe4CDQT3+sxlLCFw5XcG4IGoD8kyyHbpulwjOQW98orOf2DBZkHjxFqjFo6G/7SVZ3wr0ER05uAopJpc8XBJSTfhNAzKT2JwatMG7beFxUzrBeuNJp7MHKJUUYjfUNeqhGF1dKaya1HdOxfUoWuCMUV0XMroNItipbLj0ZX5ZfftN/eskoZjDvYDvU0Oyt6xC7RZVIOLbyOlmWQ8Pl7NHzqFeVUqViVyGIaA8HsivAw+lStBo+W6qDCbkgAAg6Z+8fsiSjgDSgpLJSwBqO75HzRUDRHhHc9/Wqqdeq2pE6PnlrJ6XWrXooBwg0bbecb50d88e230df396fb6a53532280;'

  2. binary = aaa.encode('utf-8')

  3. print(binary)

输出

b'1\x015\x011691566822749\x01_NEW_RDA_LOADOK\x01aRgNxBJEpvYo1FdZQu9d85ExmqB97SpGUPvMmSYZXIauvSu9IgrpJSK5PAs4DMMNONB2daybYwrdCjCWKUOPUb1KTPyiHYfo9EVg5jMXkDMT7xebOYk0x0loFWsSEKguYmVe5U2jAc5EDPn8nIBLTxGXSeL/S6ZbXJhEszrI1FJ/CYxjZfQKVQhMENxsN8O/yhK2AgXQe4CDQT3+sxlLCFw5XcG4IGoD8kyyHbpulwjOQW98orOf2DBZkHjxFqjFo6G/7SVZ3wr0ER05uAopJpc8XBJSTfhNAzKT2JwatMG7beFxUzrBeuNJp7MHKJUUYjfUNeqhGF1dKaya1HdOxfUoWuCMUV0XMroNItipbLj0ZX5ZfftN/eskoZjDvYDvU0Oyt6xC7RZVIOLbyOlmWQ8Pl7NHzqFeVUqViVyGIaA8HsivAw+lStBo+W6qDCbkgAAg6Z+8fsiSjgDSgpLJSwBqO75HzRUDRHhHc9/Wqqdeq2pE6PnlrJ6XWrXooBwg\x01\x010bbecb50d88e230df396fb6a53532280\x01;'

这里看起来没什么,但是实际的加解密都要通过这个手段去进行一系列的操作,可以说这一步是基操。

解密代码

涉及相关机密,无法展示,这一块接口方面如果是加密,会有对应的secret秘钥。

这一块如果你做接口了需要进行解密,你可以找对应的开发给你提供秘钥。

这个秘钥就像我们django的settings.py文件中的SECRET_KEY字段。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值