Shottr 是一款功能强大的 macOS 截图软件,虽然基础功能免费,但许多实用的高级功能(如 backdrop 背景虚化等)需要付费使用。
激活原理#
通过 Charles 抓包发现,每当在 Shottr 里的 “License” 界面进行激活时,App 都会向 shottr.cc
发送一个 POST 请求来验证激活码的有效性。
通过抓包分析,不难发现:
- 激活验证的 API 端点为:
https://shottr.cc/licensing/verify.php
- 服务器返回的 JSON 响应中包含一个关键字段
tier
- 当
tier
为 0 时表示未激活

既然 0 表示未激活,那设置为 1 是不是就能激活呢?
基于这个原理,只需要拦截这个 API 请求,并返回一个包含 "tier": "1"
的虚假响应即可实现激活。
通过 Charles 激活#
通过 Charles 内置的 Map Local 功能,将接口返回数据映射到本地的文本文件。
在 home 目录,准备以下文件
1
2
3
4
5
6
7
8
9
| ➜ .shottr pwd
/Users/jack/.shottr
➜ .shottr cat verify.txt
{
"tier": "1",
"explanation": "",
"hash": "123059245fec1e5a71fbab509b6052f9c1cf6a9d08780c11f0f7aafd56c2f757b42"
}
➜ .shottr
|
打开 Charles 的 Map Local 功能,选中请求的接口,并将接口映射到本地文本文件。这是告诉 Charles 如果检测到该接口的请求,就篡改返回的消息体,使用本地的文本内容。

开启该功能后,重启 Shottr,在 License 中输入任意字符串,点击激活:


通过抓包发现,通过将 “tier” 设为1,真的可以激活 Shottr。在软件中也是显示 “Thank you for activating Shottr!”.
通过 mitmproxy 激活#
至此,Shottr 的激活原理已经知道了。就是有一个问题,每次打开电脑,或者退出了 Shottr,激活时都需要打开 Charles,这个操作比较重,我不想为了一碟醋包了一盘饺子。有没有什么办法,在不打开 Charles 就能把 Shottr 给激活了呢?
调研了一番,发现方案还真的有。那就是使用 mitmproxy.mitmproxy 有三个组件分别是,mitmproxy,mitmweb,mitmdump.我们这次就是要使用 mitmdump 来进行流量劫持。
安装 mitmproxy#
在 macOS 上,推荐使用 Homebrew 安装:
安装完成后,你将获得三个主要组件:
mitmproxy
:交互式控制台界面mitmweb
:Web 界面mitmdump
:命令行工具(我们主要使用这个)
设置系统代理#
启动 mitmproxy:
默认情况下,mitmproxy 监听 8080 端口。现在需要配置系统代理:
- 打开 “系统偏好设置” → “网络”
- 选择当前使用的网络连接
- 点击 “高级…” → “代理”
- 勾选 “HTTP 代理” 和 “HTTPS 代理”
- 将服务器地址设置为
127.0.0.1
,端口设置为 8080

安装 SSL 证书#
为了拦截 HTTPS 流量,需要安装 mitmproxy 的根证书:
- 在浏览器中访问
mitm.it
- 点击 “Get mitmproxy-ca-cert.pem” 下载证书
- 双击下载的
.pem
文件,将其添加到钥匙串 - 在钥匙串访问中找到 “mitmproxy” 证书
- 双击证书,展开 “信任” 选项
- 将 “使用此证书时” 设置为 “始终信任”

创建拦截脚本#
创建一个名为 verify.py 的 Python 脚本,用于精准控制 mitmproxy 流量:
1
2
3
4
5
6
7
8
9
10
11
12
13
| from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if flow.request.pretty_url == "https://shottr.cc/licensing/verify.php":
flow.response = http.Response.make(
200, # status code
b'''{
"tier": "1",
"explanation": "",
"hash": "123059245fec1e5a71fbab509b6052f9c1cf6a9d08780c11f0f7aafd56c2f757b42"
}''',
{"Content-Type": "application/json"}
)
|
启动后台破解#
为了方便管理,创建一个启动脚本 start.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SCRIPT="$SCRIPT_DIR/shottr_crack.py"
LOGFILE="$SCRIPT_DIR/mitmdump.log"
PIDFILE="$SCRIPT_DIR/mitmdump.pid"
# 检查是否已经运行
if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") 2>/dev/null; then
echo "❌ mitmproxy 已在运行中 (PID: $(cat $PIDFILE))"
exit 1
fi
# 启动 mitmdump
echo "🚀 正在启动 Shottr 破解服务..."
nohup mitmdump -s "$SCRIPT" --listen-port 8080 > "$LOGFILE" 2>&1 &
# 保存进程 ID
echo $! > "$PIDFILE"
echo "✅ 服务已启动 (PID: $(cat $PIDFILE))"
echo "📝 日志文件: $LOGFILE"
echo "🔧 请确保系统代理已设置为 127.0.0.1:8080"
|
创建停止脚本 stop.sh
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PIDFILE="$SCRIPT_DIR/mitmdump.pid"
if [ -f "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
if kill -0 "$PID" 2>/dev/null; then
kill "$PID"
rm "$PIDFILE"
echo "✅ Shottr 破解服务已停止"
else
echo "❌ 进程不存在"
rm "$PIDFILE"
fi
else
echo "❌ PID 文件不存在,服务可能未运行"
fi
|
激活测试#
运行启动脚本:
打开 Shottr 应用
进入 “License” 设置页面
输入任意字符串作为激活码
点击激活按钮

开机自动化#
如果希望系统启动时自动运行破解服务,可以创建一个 Launch Agent:
创建文件 ~/Library/LaunchAgents/com.shottr.crack.plist
:
xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.shottr.crack</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/your/start.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
|
注意这里的路径,需要改成你本地脚本所在的路径
加载服务:
1
| launchctl load ~/Library/LaunchAgents/com.shottr.crack.plist
|
通过 mitmproxy,我们成功实现了 Shottr 的自动化激活,相比 Charles 等商业代理软件,这个方案更加轻量、自动化程度更高。不过最重要的是,如果你觉得 Shottr 确实好用,还是建议购买正版来支持开发者的持续开发。