diff --git a/Surge模块/crack.js b/Surge模块/crack.js new file mode 100644 index 0000000..2e29b17 --- /dev/null +++ b/Surge模块/crack.js @@ -0,0 +1,177 @@ +const hostname = ['v3.paddleapi.com','api.elpass.app','api.gumroad.com', + 'amazonaws.com' + // '/.*?\.execute-api.*\.amazonaws\.com/' + ] +const url = $request.url; +const domain = url.split('/')[2]; +const path = url.split(domain)[1]?.split('?')[0]; + +const handleRequest = () => { + if (domain === hostname[0]) { + // /3.2/license/ + if (path.endsWith('activate')) { + paddleActivate(); + } else if (path.endsWith('verify')) { + paddleVerify(); + } + } else if (domain === hostname[1]) { + // /device/ + if (path.endsWith('init')) { + elpassInit(); + } else if (path.endsWith('activate-with-key')) { + elpassActiveWithKey(); + } else if (path.endsWith('management')) { + elpassManagement(); + } + } else if (domain === hostname[2]) { + // /v2/licenses/ + if (path.endsWith('verify')) { + MediaMate(); + } + } else if (domain.endsWith(hostname[3])) { // hostname[3].test(domain) + // /default/ + if (['meddle-activate','meddle-authenticate','meddle-deactivate'].some(end => path.endsWith(end))) { + MacUpdater(); + } + } + + $done({}); +} + +// paddle +const paddleActivate = () => { + let body = $request.body.split("&"); + let product_id = ""; + for (let k of body) { + if (k.indexOf("product_id") != -1) { + product_id = k.split("=")[1]; + } + } + + $done({ + response: { + body: JSON.stringify({ + success: true, + response: { + product_id: product_id, + activation_id: "QiuChenly", + type: "personal", + expires: 1, + expiry_date: 1999999999999, + }, + }), + }, + }); +}; + +const paddleVerify = () => { + let body = JSON.stringify({ + success: true, + response: { + type: "personal", + expires: 1, + expiry_date: 1999999999999, + }, + }); + $done({ + response: { + body, + }, + }); +}; + +// elpass +const elpassInit = () => { + let body = JSON.stringify({ + code: 0, + subscriptionBillingPeriod: null, + subscriptionEndDate: 99999502400, //5100年授权 + subscriptionSource: null, + autoRenew: true, + trial: false, + }); + $done({ + response: { + body, + }, + }); +}; + +const elpassActiveWithKey = () => { + let body = JSON.stringify({ + code: 0, + license: "没有密钥 这个注入伪造信息是没有用的", + }); + $done({ + response: { + body, + }, + }); +}; + +const elpassManagement = () => { + let body = JSON.stringify({ + email: "QiuChenly@52pojie.com", + subscriptionBillingPeriod: null, + subscriptionEndDate: 99999502400, + subscriptionSource: null, + autoRenew: true, + trial: false, + }); + $done({ + response: { + body, + }, + }); +}; +// MediaMate +const MediaMate = () => { + let body = JSON.stringify({ + success: true, + uses: -999, + purchase: { + sellerId: "123", + productId: "", + productName: "", + permalink: "https://www.baidu.com", + productPermalink: "https://www.baidu.com", + email: "qiuchenly@outlook.com", + price: 100, + gumroadFee: 0, + currency: "usd", + quantity: 1, + discoverFeeCharged: false, + canContact: false, + referrer: "nmsl", + orderNumber: 1234, + saleId: "1", + saleTimestamp: "2099-07-16T19:00:00Z", + licenseKey: "我测你吗", + refunded: false, + disputed: false, + disputeWon: false, + id: "1234", + createdAt: "2023-07-16T19:00:00Z", + }, + }); + $done({ + response: { + headers: { + "Content-Type": "application/json; charset=utf-8", + }, + body, + }, + }); +}; + +// MacUpdater +const MacUpdater = () => { + let body = "success"; + $done({ + response: { + body, + }, + }); +}; + +handleRequest(); diff --git a/Surge模块/crack.sgmodule b/Surge模块/crack.sgmodule new file mode 100644 index 0000000..71312db --- /dev/null +++ b/Surge模块/crack.sgmodule @@ -0,0 +1,14 @@ +#!name=91QiuChen crack +#!desc=https://github.com/QiuChenlyOpenSource/91QiuChen + +[Script] +Paddle = type=http-request,pattern=^https:\/\/v3\.paddleapi\.com\/3.2\/license\/.*, script-path=https://raw.githubusercontent.com/QiuChenlyOpenSource/91QiuChen/main/Surge模块/crack.js, requires-body=true, timeout=10, script-update-interval=604800 + +elpass = type=http-request,pattern=^https:\/\/api.elpass.app\/device\/.*, script-path=https://raw.githubusercontent.com/QiuChenlyOpenSource/91QiuChen/main/Surge模块/crack.js, requires-body=true, timeout=10, script-update-interval=604800 + +MediaMate = type=http-request,pattern=^https:\/\/api\.gumroad\.com\/v2\/licenses\/verify.*, script-path=https://raw.githubusercontent.com/QiuChenlyOpenSource/91QiuChen/main/Surge模块/crack.js, requires-body=true, timeout=10, script-update-interval=604800 + +MacUpdater = type=http-request,pattern=^https:\/\/.*?\.execute-api.*\.amazonaws\.com\/default\/.*, script-path=https://raw.githubusercontent.com/QiuChenlyOpenSource/91QiuChen/main/Surge模块/crack.js, requires-body=true, timeout=10, script-update-interval=604800 + +[MITM] +hostname = %APPEND% v3.paddleapi.com, api.elpass.app, api.gumroad.com, .*?.execute-api.*.amazonaws.com diff --git a/Surge激活脚本/Surge脚本配置例子.conf b/Surge激活脚本/Surge脚本配置例子.conf deleted file mode 100644 index 945ba8f..0000000 --- a/Surge激活脚本/Surge脚本配置例子.conf +++ /dev/null @@ -1,11 +0,0 @@ -[Script] -Paddle1 = type=http-request,pattern=^https://v3.paddleapi.com/3.2/license/verify,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js -Paddle2 = type=http-request,pattern=^https://v3.paddleapi.com/3.2/license/activate,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js - -elpass = type=http-request,pattern=^https://api.elpass.app/device/management,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js -elpass1 = type=http-request,pattern=^https://api.elpass.app/device/init,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js -elpass2 = type=http-request,pattern=^https://api.elpass.app/device/activate-with-key,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js - -MacUpdater = type=http-request,pattern=https://.*?.execute-api.*.amazonaws.com/default/meddle-activate,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js -MacUpdaterDeac = type=http-request,pattern=https://.*?.execute-api.*.amazonaws.com/default/meddle-deactivate,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js -MacUpdaterAuthorization = type=http-request,pattern=https://.*?.execute-api.*.amazonaws.com/default/meddle-authenticate,requires-body=1,max-size=0,debug=1,script-path=paddle_act.js \ No newline at end of file diff --git a/Surge激活脚本/paddle_act.js b/Surge激活脚本/paddle_act.js deleted file mode 100644 index e370f6a..0000000 --- a/Surge激活脚本/paddle_act.js +++ /dev/null @@ -1,122 +0,0 @@ -let url = $request.url; - -let paddleActivate = () => { - if (url !== "https://v3.paddleapi.com/3.2/license/activate") return; - let body = $request.body.split("&"); - let product_id = ""; - for (let k of body) { - if (k.indexOf("product_id") != -1) { - product_id = k.split("=")[1]; - } - } - - $done({ - response: { - body: JSON.stringify({ - success: true, - response: { - product_id: product_id, - activation_id: "QiuChenly", - type: "personal", - expires: 1, - expiry_date: 1999999999999, - }, - }), - }, - }); -}; - -let paddleVerify = () => { - if (url !== "https://v3.paddleapi.com/3.2/license/verify") return; - let body = JSON.stringify({ - success: true, - response: { - type: "personal", - expires: 1, - expiry_date: 1999999999999, - }, - }); - $done({ - response: { - body, - }, - }); -}; - -let elpassManagement = () => { - if (url !== "https://api.elpass.app/device/management") return; - let body = JSON.stringify({ - email: "QiuChenly@52pojie.com", - subscriptionBillingPeriod: null, - subscriptionEndDate: 99999502400, - subscriptionSource: null, - autoRenew: true, - trial: false, - }); - $done({ - response: { - body, - }, - }); -}; - -let elpassInit = () => { - if (url !== "https://api.elpass.app/device/init") return; - let body = JSON.stringify({ - code: 0, - subscriptionBillingPeriod: null, - subscriptionEndDate: 99999502400, //5100年授权 - subscriptionSource: null, - autoRenew: true, - trial: false, - }); - $done({ - response: { - body, - }, - }); -}; - -let elpassActiveWithKey = () => { - if (url !== "https://api.elpass.app/device/activate-with-key") return; - let body = JSON.stringify({ - code: 0, - license: "没有密钥 这个注入伪造信息是没有用的", - }); - $done({ - response: { - body, - }, - }); -}; - -paddleActivate(); -paddleVerify(); - -//这里可以用通用有效授权信息伪造下发即可伪造出真实激活状态 -elpassManagement(); -elpassInit(); -elpassActiveWithKey(); - -let MacUpdater = () => { - if ( - url.indexOf( - "execute-api.eu-central-1.amazonaws.com/default/meddle-activate" - ) === -1 && - url.indexOf( - "execute-api.eu-central-1.amazonaws.com/default/meddle-deactivate" - ) === -1 && - url.indexOf( - "execute-api.eu-central-1.amazonaws.com/default/meddle-authenticate" - ) === -1 - ) - return; - let body = "success"; - $done({ - response: { - body, - }, - }); -}; - -MacUpdater(); diff --git a/imgs/img.png b/imgs/Surge.png similarity index 100% rename from imgs/img.png rename to imgs/Surge.png diff --git a/imgs/Surge_1.png b/imgs/Surge_1.png new file mode 100644 index 0000000..0e03642 Binary files /dev/null and b/imgs/Surge_1.png differ diff --git a/imgs/Surge_2.png b/imgs/Surge_2.png new file mode 100644 index 0000000..a2b5c38 Binary files /dev/null and b/imgs/Surge_2.png differ diff --git a/imgs/Surge_3.png b/imgs/Surge_3.png new file mode 100644 index 0000000..7c56296 Binary files /dev/null and b/imgs/Surge_3.png differ diff --git a/imgs/img3.png b/imgs/img3.png deleted file mode 100644 index c93bd58..0000000 Binary files a/imgs/img3.png and /dev/null differ diff --git a/imgs/img_1.png b/imgs/img_1.png deleted file mode 100644 index 76cb264..0000000 Binary files a/imgs/img_1.png and /dev/null differ diff --git a/imgs/img_2.png b/imgs/img_2.png deleted file mode 100644 index 09b8b3e..0000000 Binary files a/imgs/img_2.png and /dev/null differ diff --git a/readme.md b/readme.md index d5d4a4f..dc4208b 100644 --- a/readme.md +++ b/readme.md @@ -440,12 +440,11 @@ PD 19 说明与注意事项:
*** -# 利用 Surge 的 MitM 拦截功能支持激活的 macOS App +# Surge crack 模块支持激活的 macOS App
点击展开 - 已测试支持以下App: | App | 版本 | 特殊说明 | @@ -460,23 +459,25 @@ PD 19 说明与注意事项:
| Timemator | 3.0.3 | | | Multitouch | 1.27.23 | | -Surge可以利用拦截修改http返回值的方式破解下面的app而无需修改原始App。下面是脚本破解步骤,如果你不需要用下面的App,看到这里就可以关闭网页了。 +Surge可以利用拦截修改http返回值的方式破解上面的app而无需修改原始App. -Surge开启MitM和脚本功能,然后:
+步骤: -1. 在你的配置文件中加入例子中提供文件中的Script字段信息: - [Surge脚本配置例子.conf](Surge%E6%BF%80%E6%B4%BB%E8%84%9A%E6%9C%AC%2FSurge%E8%84%9A%E6%9C%AC%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90.conf) - ![img.png](imgs/img.png) - ![img_1.png](imgs/img_1.png) - ![img_1.png](imgs/img_2.png) +1️⃣.Surge开启MitM和脚本功能,打开HTTPS解密 -2. [paddle_act.js](Surge%E6%BF%80%E6%B4%BB%E8%84%9A%E6%9C%AC%2Fpaddle_act.js)这个文件一定要复制到conf文件所在目录中。 +![Surge.png](imgs/Surge.png) -3. 记得Https解密打开,并且信任证书,MitM域名加入*.paddleapi.com保存即可。
- 如果要实现五千年授权需要打开增强模式并加入新的域名: api.elpass.app
- ![img.png](imgs/img3.png) +![Surge_1.png](imgs/Surge_1.png) -4. 在App中随意输入序列号和邮箱,点击激活后秒激活。 +2️⃣.添加模块([Surge模块](https://raw.githubusercontent.com/QiuChenlyOpenSource/91QiuChen/main/Surge模块/crack.sgmodule)) + +![Surge_2.png](imgs/Surge_2.png) + +3️⃣.更新外部资源 + +![Surge_3.png](imgs/Surge_3.png) + +4️⃣.在App中随意输入序列号和邮箱,点击激活后秒激活