Shottr 是一款功能强大的 macOS 截图软件,虽然基础功能免费,但许多实用的高级功能(如 backdrop 背景虚化等)需要付费使用。

激活原理

通过 Charles 抓包发现,每当在 Shottr 里的 “License” 界面进行激活时,App 都会向 shottr.cc 发送一个 POST 请求来验证激活码的有效性。

通过抓包分析,不难发现:

  • 激活验证的 API 端点为:https://shottr.cc/licensing/verify.php
  • 服务器返回的 JSON 响应中包含一个关键字段 tier
  • tier 为 0 时表示未激活

image.png

既然 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 如果检测到该接口的请求,就篡改返回的消息体,使用本地的文本内容。 image.png

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

image.png

通过抓包发现,通过将 “tier” 设为1,真的可以激活 Shottr。在软件中也是显示 “Thank you for activating Shottr!”.

通过 mitmproxy 激活

至此,Shottr 的激活原理已经知道了。就是有一个问题,每次打开电脑,或者退出了 Shottr,激活时都需要打开 Charles,这个操作比较重,我不想为了一碟醋包了一盘饺子。有没有什么办法,在不打开 Charles 就能把 Shottr 给激活了呢?

调研了一番,发现方案还真的有。那就是使用 mitmproxy.mitmproxy 有三个组件分别是,mitmproxy,mitmweb,mitmdump.我们这次就是要使用 mitmdump 来进行流量劫持。

安装 mitmproxy

在 macOS 上,推荐使用 Homebrew 安装:

1
brew install mitmproxy

安装完成后,你将获得三个主要组件:

  • mitmproxy:交互式控制台界面
  • mitmweb:Web 界面
  • mitmdump:命令行工具(我们主要使用这个)

设置系统代理

启动 mitmproxy:

1
mitmproxy

默认情况下,mitmproxy 监听 8080 端口。现在需要配置系统代理:

  1. 打开 “系统偏好设置” → “网络”
  2. 选择当前使用的网络连接
  3. 点击 “高级…” → “代理”
  4. 勾选 “HTTP 代理” 和 “HTTPS 代理”
  5. 将服务器地址设置为 127.0.0.1,端口设置为 8080

image.png

安装 SSL 证书

为了拦截 HTTPS 流量,需要安装 mitmproxy 的根证书:

  1. 在浏览器中访问 mitm.it
  2. 点击 “Get mitmproxy-ca-cert.pem” 下载证书
  3. 双击下载的 .pem 文件,将其添加到钥匙串
  4. 在钥匙串访问中找到 “mitmproxy” 证书
  5. 双击证书,展开 “信任” 选项
  6. 将 “使用此证书时” 设置为 “始终信任”

image.png image.png

创建拦截脚本

创建一个名为 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

激活测试

  • 运行启动脚本:

    1
    
    ./start.sh
    
  • 打开 Shottr 应用

  • 进入 “License” 设置页面

  • 输入任意字符串作为激活码

  • 点击激活按钮 image.png

开机自动化

如果希望系统启动时自动运行破解服务,可以创建一个 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 确实好用,还是建议购买正版来支持开发者的持续开发。