那是一个属于“AI 狂欢”的短暂月份。因为能免费薅到 gpt5.4,各家公益站都起来了。
早期:简单粗暴的野蛮生长
最开始大家干得都很糙:直接上 codex 注册机,通过模拟请求批量跑号,用临时邮箱接码。拿到 `auth` 文件后,往 CPA 里一塞直接反代出来。那会儿全靠最基础的 HTTP 请求去处理,验证步骤直接走 API 提交验证码。简单、粗暴、高效。
风控升级:CF 盾与赛博大善人
但好日子没多久,Codex 那边就反应过来了,直接在 API 端设了卡。针对那些无环境直接走 API 的请求,只要你用的是“万人骑”的烂代理,或者拿不出正经的域名邮箱,迎面就是死死卡住的 CF 盾和强制手机验证。
这一手确实拍死了绝大多数跟风的白嫖党。不过俗话说得好,大清都替咱们交过钱了,拿回点属于自己的东西算什么?既然老路被堵了,我们就换条道。
为了绕过限制,我们盯上了动态家宽代理池和临时邮箱。这得感谢 Cloudflare 这位赛博大善人提供的邮箱托管服务——只需把自己的域名托管上去,就能零成本搞出域名邮箱,同时利用 Worker 跑个收发服务。
伪代码
# 1. 初始化纯底层协议会话
session = requests.Session(impersonate="chrome131")
session.headers.update(_build_client_hints(sec_ch_ua, full_version_list))
# 2. 授权入口,获取Device ID
oauth = generate_oauth_url()
session.get(oauth.auth_url)
device_id = session.cookies.get("oai-did")
# 3. 自动发包注册
# 【阶段 A】提交注册邮箱
token_1 = build_sentinel_token(session, device_id, flow="authorize_continue")
session.post(".../authorize/continue",
headers={"openai-sentinel-token": token_1},
data={'username': email})
# 【阶段 B】提交账户密码
token_2 = build_sentinel_token(session, device_id, flow="signup_password")
session.post(".../user/register",
headers={"openai-sentinel-token": token_2},
data={'password': password})
# 【阶段 C】触发发信并秒填邮箱验证码
session.get(".../email-otp/send")
code = get_oai_code(dev_token, email) # 无模型物理提取
token_3 = build_sentinel_token(session, device_id, flow="email_otp_verification")
session.post(".../email-otp/validate",
headers={"openai-sentinel-token": token_3},
data={'code': code})
# 【阶段 D】填充虚构名字与生日资料
token_4 = build_sentinel_token(session, device_id, flow="create_account")
session.post(".../create_account",
headers={"openai-sentinel-token": token_4},
data={'name': "Alex Smith", 'birthdate': "1994-06-15"})
# 4. 协议层拦截重定向,手动拽取最终 Auth Code
# 这里模拟浏览器的一步步跳转,但绝不去渲染页面,只要协议头 Location!
url = continue_url
while True:
resp = session.get(url, allow_redirects=False) # 必须禁用自动跳转
next_url = resp.headers.get("Location")
if "code=" in next_url:
final_callback_url = next_url
break
url = next_url
# 5. 回交拦截到的数据
token_json = submit_callback_url(callback_url=final_callback_url)
print(token_json)
凛冬降临:401 与指纹追杀
就在大家都换上新装备,以为狂欢还能接着奏乐接着舞的时候,OpenAI 祭出了大杀器:过期打击。
他们开始查底层特征了。注册 IP 和使用 IP 不一致?短期内请求指纹对不上?直接通过这些手段让 token 失效,满屏的 `401` 报错贴脸输出。
但封号永远没有我们注册得快,狂欢还在强行续命。
终极武器:物理直连的覆灭
为了应对愈发变态的风控,我们全面升级了注册机,抛弃纯 API,改用 Python + 原生 Playwright 搞物理直连流程。
为了彻底抹掉机器味,我们在指纹抹除上下了血本:
- 全面挂载 `playwright-stealth` 插件,启动即销毁特征源,把原本容易被识别的 `webdriver` 机器特征彻底抹平。
- 配合启动参数 `--disable-blink-features=AutomationControlled`,让浏览器的底层签名跟真人玩家无异。
- 挂载海外 ISP 住宅及纯净代理,强行保障注册网络环境的高质量。
伪代码
def intercept_callback(route, request):
global final_code_url
if "localhost/auth/callback" in request.url:
final_code_url = request.url
route.abort()
else:
route.continue_()
# 1. 启动浏览器与防风控环境
browser = chromium.launch(proxy={"server": "IP:PORT", "username": "xxx", "password": "xxx"})
page = browser.new_page()
Stealth().apply_stealth_sync(page)
page.route("**/*", intercept_callback)
# 2. 自动化前台操作
page.goto(oauth_url)
page.fill("input[name='email']", email)
page.fill("input[name='password']", password)
page.keyboard.press("Enter")
# 3. 提取并填入验证码
code = poll_email_code(email)
page.type("input.otp", code)
page.fill("input[name='fullname']", "Alex Smith")
page.keyboard.press("Enter")
# 4. 阻塞等待底层拦截结果
while not final_code_url:
sleep(1)
# 5. 脱离浏览器,直接从底层换取 Token
token_json = exchange_token_via_http(final_code_url)
print(token_json)
我们以为这套高配物理连招天衣无缝。 但是现实很骨感——现在的结局是:封号还是一样的快,但是架不住我注册的快呀。