1.1 安装mitmproxy

直接使用pip安装即可

pip install mitmproxy

1.2 安装证书

运行mitmdump

mitmdump

应当看到如下输出:

Web server listening at http://127.0.0.1:8081/

Proxy server listening at http://*:8080

find /home -name mitmproxy-ca-cert.pem

找到路径

/home/yys/.mitmproxy/mitmproxy-ca-cert.pem
 

mitmproxy-ca.p12----PKCS12格式证书私钥

mitmproxy-ca.pem----PEM格式证书私钥

mitmproxy-ca-cert.cer----PEM格式证书,与mitmproxy-ca-cert.pem相同只是改变了后辍,适用于部分Android

mitmproxy-ca-cert.p12----PKCS12格式证书,适用于Windows

mitmproxy-ca-cert.pem----PEM格式证书,适用于大多数非Windows平台

mitmproxy-dhparam.pem----PEM格式秘钥文件,用于增强SSL安全性

cd /home/yys/.mitmproxy/

win10子系统路径

C:\Users\yys53\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\yys\.mitmproxy

1.2.1 linux安装证书

如果在Ubuntu 上如果遇到的是.pem的文件,必须先将其转换为.crt文件:

openssl x509 -in mitmproxy-ca-cert.pem -inform PEM -out mitmproxy-ca-cert.crt

在以下位置为额外的CA证书创建目录/usr/share/ca-certificates

sudo mkdir /usr/share/ca-certificates/extra

将CA .crt文件复制到此目录:

sudo cp  mitmproxy-ca-cert.crt /usr/share/ca-certificates/extra/mitmproxy-ca-cert.crt

让Ubuntu添加.crt文件的路径相/usr/share/ca-certificates对于/etc/ca-certificates.conf

sudo dpkg-reconfigure ca-certificates

遇到一个安装界面,直接回车就可以了,安装完成

注:如果windows安装mitmproxy-ca-cert.p12即可

1.2.2  手机或安卓模拟器配置代理

手机配置代理大同小异都在设置之中进行配置。比如我这里的路径是:

设置----无线和网络WLAN----长按wifi名----修改网络----显示高级选项----代理----手动---服务器主机名输入192.168.31.139(根据自己电脑ip修改,linux 的ip)服务器端口输入8080----保存

 

1.2.3 手机或安装模拟器安装证书

如果安卓7.0以上需要看→1.5

 

方法1:

以雷雷电模拟器为例:

首先把mitmproxy-ca-cert.pem复制到雷电模拟器

设置→安装→从sd卡安装→找到mitmproxy-ca-cert.pem安装

新版:设置→WLAN→WLAN偏爱设置→高级→安装证书→sd卡找到mitmproxy-ca-cert.pem安装

注意:小米2s只能用第一种方法,而且需要设置锁屏密码,再安装证书

以逍遥模拟器为例:

设置→WLAN→⋮→高级→安装证书→sd卡找到mitmproxy-ca-cert.pem安装

方法2(比较容易):

输入网址:mitm.it

下载进行安装:前提是已经启动mitmdump

根据抓取系统下载,如雷电模拟器就下载安卓

根据方法1引用块内的安装,下载后一般download目录

完成后在启动mitmdump的代理窗口上即可看到手机发送的所有数据包。

1.4.Python3使用mitmproxy

我们前边2.2也提到使用mitmproxy的根本目的是想要python能修改发送的数据包,及截获服务端返回的数据包。只是像2.4那样打印出所有发送的请求对我们的目的而言是没有什么用的。

python接触发送数据包的途径是在启动mitmdump启动时使用-s选项指定处理脚本,其中通过重写request方法处理请求数据包,通过重写response方法处理响应数据包。示例如下。

启动命令:

mitmdump -s example_script.py
from mitmproxy import ctx
import re

def write_text(text):

    r_list = re.compile("\\(b'cookie'.*?\\)|\\(b'Set-Cookie'.*?\\)", re.S).findall(text)
    if r_list:
        # print(r_list)
        for content in r_list:
            file = open("cookie.txt", "a", encoding="utf-8")
            file.write( content+ "\n\n")
            file.close()

# 所有发出的请求数据包都会被这个方法所处理
# 所谓的处理,我们这里只是打印一下一些项;当然可以修改这些项的值直接给这些项赋值即可
def request(flow):
    # 获取请求对象
    request = flow.request
    # 实例化输出类
    info = ctx.log.info
    # 打印请求的url
    info(request.url)
    # 打印请求方法
    info(request.method)
    # 打印host头
    info(request.host)
    # 打印请求端口
    info(str(request.port))
    # 打印所有请求头部,可以获取cookie如京东淘宝的
    info(str(request.headers))
    # 打印cookie头
    info(str(request.cookies))
    # 自定义保存cookie
    write_text(str(request.headers))

# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):
    # 获取响应对象
    response = flow.response
    # 实例化输出类
    info = ctx.log.info
    # 打印响应码
    info(str(response.status_code))
    # 打印所有头部包括cookie
    info(str(response.headers))
    # 打印cookie头部, ,可以获取cookie如天翼云的
    info(str(response.cookies))
    # 打印响应报文内容
    info(str(response.text))
    # 自定义保存cookie
    write_text(str(response.headers))

    

1.5小米手机无法通过Charles抓取Https的数据怎么办?https的数据一直显示unknown

当你发现这个问题的时候,就不要再费力去设置charles以及换各种姿势去装证书了,这些都是徒劳的,因为从Android 7.0开始系统默认不信任用户证书,因此即时你安装成功,证书对APP来说也是无效的。

解决办法(发现会有一些bug,快手不能访问去赚钱)

既然知道了原因,那就总是有解决办法的,我们只要把代理软件的证书安装成系统证书就可以了
以fiddler证书为例:
1、先将mitmproxy证书下载下来,默认名称为:mitmproxy-ca-cert.pem
2、使用OpenSSL将cer文件转换成crt文件:

openssl x509 -in mitmproxy-ca-cert.pem -inform PEM -out mitmproxy-ca-cert.crt

3、根据证书获取证书hash值,得到类似 269953fb 字符串:

openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.crt

4、将mitmproxy-ca-cert.crt重命名为 269953fb.0

mv mitmproxy-ca-cert.crt 269953fb.0

5、将证书复制到手机 /system/etc/security/cacerts/目录
(手机必须root)
以adb方式为例:
1.

adb root

2.

adb remount

3.

adb push 269953fb.0 /sdcard/

4.

adb shell

5.

mv /sdcard/269953fb.0 /system/etc/security/cacerts/

6.

chmod 644 /system/etc/security/cacerts/

7.reboot重启设备
(PS : remount of /system failed :Read -only file 问题:
解决办法1、adb disable -verity 2、adb reboot 然后在执行上面adb命令)

重启完成就能在系统证书中看到fiddler证书了,

https://blog.csdn.net/u013630017/article/details/97750343

https://blog.csdn.net/Loucius/article/details/104944735

2.1 获取cookie和点击url

其实每个点击后有个url,返回json结果

2.1.1 天翼云

cookie 名字:COOKIE_LOGIN_USER

2.1.2 京东

京东农场领取水滴

批量设置cookie(谷歌浏览器可以不用path,但是phantomjs需要)

cookie = {}
a = (b'cookie', b'')

for i in a[1].decode("utf-8").split(";"):
    # print(i.split("="))
    cookie["name"] = i.split("=")[0].strip()
    cookie["value"] = i.split("=")[1].strip()
    cookie['path'] = "/"
    cookie['domain'] = ".m.jd.com"
    print("self.driver.add_cookie(cookie_dict="+str(cookie)+")")

1.url

https://api.m.jd.com/client.action?functionId=gotNewUserTaskForFarm&body=%7B%22version%22%3A10%2C%22channel%22%3A1%7D&appid=wh5

2.返回成功json

其中addEnergy: 128是领取水滴128

{

code: "0",

farmUserPro: {},

totalEnergy: 1,

treeState: 1,

createTime: 1571618733000,

treeEnergy: 1730,

treeTotalEnergy: 6000,

shareCode: "9bcb0b1ddca24f86b7d5363d861d6863",

winTimes: 5,

nickName: "颠覆宇宙为英语",

imageUrl: "http://storage.360buyimg.com/i.imageUpload/6a645f3765306339613434653037366331353539323539363030323330_mid.jpg",

couponKey: "vender_BA#57868c27ae5e4828b47dd6b114c3dafb",

couponId: "86429371021",

couponEndTime: 1575647999000,

type: "xiaomaifen4",

simpleName: "小麦粉",

name: "4斤小麦粉",

goodsImage: "https://m.360buyimg.com/babel/jfs/t1/155449/1/14537/222847/6001722fE8cd878d9/e3c383411dce0272.jpg",

skuId: "66283118277",

lastLoginDate: 1613863028000,

newOldState: 2,

oldMarkComplete: 1,

commonState: 31,

prizeLevel: 2

todayGotWaterGoalTask: {},

canPop: false

statisticsTimes: null,

addEnergy: 128,

sysTime: 1613863094672,

message: null,

type: 2

}

农场浇水

1.url

https://api.m.jd.com/client.action?functionId=waterGoodForFarm&body=%7B%22type%22%3A%22%22%2C%22version%22%3A10%2C%22channel%22%3A1%7D&appid=wh5

2.返回成功json

其中totalEnergy: 109剩余水滴数

{

code: "0",

totalEnergy: 109,

statisticsTimes: null,

totalWaterTimes: 21,

sysTime: 1613863291160,

finished: false,

message: null,

waterStatus: 0,

sendAmount: 10,

showExchangeGuidance: false,

treeEnergy: 1750

}

2.3 对专门项目进行过滤

只获取含有titledTagName的文字,如获取京东的商品信息,

from mitmproxy import ctx
# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):
    # 获取响应对象
    response = flow.response
    
    if "tiledTagName" in str(response.text):
        print(str(response.text))
    else:
        return

    

终端命令运行 这个-q只能显示print输出的文字

mitmdump -s get_text.py -q

2.4. 安卓10以上通过magisk将用户证书变系统证书

当然,以下是完整的安装步骤:

HttpCanary证书的安装步骤

  1. 导出证书文件

    • 在 HttpCanary 中导出证书文件 87bc53fb.0
  2. 下载并准备 Magisk 模块

  3. 将证书导入到模块目录(可以用文件管理器,re,mt等)

    • 将导出的证书文件 87bc53fb.0 拷贝到 /data/adb/modules/aguardcert/system/etc/security/cacerts 目录下。
    • 使用命令 chmod 644 /data/adb/modules/aguardcert/system/etc/security/cacerts/87bc53fb.0 给予证书正确的权限644。
  4. 重启手机

    • 重启手机确保系统能够正确加载并识别新添加的证书。
  5. 验证安装

    • 确认证书是否成功导入到系统证书中,可以使用 HttpCanary 或其他抓包工具进行验证。

通过以上步骤,你应该能够成功将 HttpCanary 的证书导入到系统中,以便在抓包过程中使用。如果有任何进一步的问题或需要帮助,请随时告知!

2.5报错解决

yys@i13500:~/.mitmproxy$ mitmdump
(trapped) error reading bcrypt version
Traceback (most recent call last):
File "/home/yys/.local/lib/python3.10/site-packages/passlib/handlers/bcrypt.py", line 620, in _load_backend_mixin
version = _bcrypt.about.version
AttributeError: module 'bcrypt' has no attribute 'about'
[16:24:28.308] HTTP(S) proxy listening at *:8080.

这个错误是由于bcrypt库的某些版本与passlib库的兼容性问题导致的。bcrypt库的最新版本中缺少__about__属性,而passlib库依赖于这个属性。

解决方法

降级bcrypt版本

你可以降级bcrypt库到一个较旧的版本,以确保它具有__about__属性。例如,降级到bcrypt==3.2.0

pip install bcrypt==3.2.0