python的mitmproxy抓包
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
如果在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----保存
如果安卓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
其实每个点击后有个url,返回json结果
cookie 名字:COOKIE_LOGIN_USER
京东农场领取水滴
批量设置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
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
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
}
只获取含有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
当然,以下是完整的安装步骤:
HttpCanary证书的安装步骤
-
导出证书文件
- 在 HttpCanary 中导出证书文件
87bc53fb.0
。
- 在 HttpCanary 中导出证书文件
-
下载并准备 Magisk 模块
- 访问 AdguardCert Releases 页面 下载最新的 adguardcert 模块文件。
-
将证书导入到模块目录(可以用文件管理器,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。
- 将导出的证书文件
-
重启手机
- 重启手机确保系统能够正确加载并识别新添加的证书。
-
验证安装
- 确认证书是否成功导入到系统证书中,可以使用 HttpCanary 或其他抓包工具进行验证。
通过以上步骤,你应该能够成功将 HttpCanary 的证书导入到系统中,以便在抓包过程中使用。如果有任何进一步的问题或需要帮助,请随时告知!
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
本文作者: 永生
本文链接: https://www.yys.zone/detail/?id=210
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)