添加surge crack模块
177
Surge模块/crack.js
Normal file
@@ -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();
|
||||
14
Surge模块/crack.sgmodule
Normal file
@@ -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
|
||||
@@ -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
|
||||
@@ -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();
|
||||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
BIN
imgs/Surge_1.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
imgs/Surge_2.png
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
imgs/Surge_3.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
imgs/img3.png
|
Before Width: | Height: | Size: 139 KiB |
BIN
imgs/img_1.png
|
Before Width: | Height: | Size: 163 KiB |
BIN
imgs/img_2.png
|
Before Width: | Height: | Size: 27 KiB |
29
readme.md
@@ -440,12 +440,11 @@ PD 19 说明与注意事项:<br>
|
||||
|
||||
***
|
||||
|
||||
# 利用 Surge 的 MitM 拦截功能支持激活的 macOS App
|
||||
# Surge crack 模块支持激活的 macOS App
|
||||
|
||||
<details>
|
||||
<summary>点击展开</summary>
|
||||
|
||||
|
||||
已测试支持以下App:
|
||||
|
||||
| App | 版本 | 特殊说明 |
|
||||
@@ -460,23 +459,25 @@ PD 19 说明与注意事项:<br>
|
||||
| Timemator | 3.0.3 | |
|
||||
| Multitouch | 1.27.23 | |
|
||||
|
||||
Surge可以利用拦截修改http返回值的方式破解下面的app而无需修改原始App。下面是脚本破解步骤,如果你不需要用下面的App,看到这里就可以关闭网页了。
|
||||
Surge可以利用拦截修改http返回值的方式破解上面的app而无需修改原始App.
|
||||
|
||||
Surge开启MitM和脚本功能,然后: <br>
|
||||
步骤:
|
||||
|
||||
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)
|
||||

|
||||

|
||||

|
||||
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文件所在目录中。
|
||||

|
||||
|
||||
3. 记得Https解密打开,并且信任证书,MitM域名加入*.paddleapi.com保存即可。<br>
|
||||
如果要实现五千年授权需要打开增强模式并加入新的域名: api.elpass.app<br>
|
||||

|
||||

|
||||
|
||||
4. 在App中随意输入序列号和邮箱,点击激活后秒激活。
|
||||
2️⃣.添加模块([Surge模块](https://raw.githubusercontent.com/QiuChenlyOpenSource/91QiuChen/main/Surge模块/crack.sgmodule))
|
||||
|
||||

|
||||
|
||||
3️⃣.更新外部资源
|
||||
|
||||

|
||||
|
||||
4️⃣.在App中随意输入序列号和邮箱,点击激活后秒激活
|
||||
|
||||
</details>
|
||||
|
||||
|
||||