Für sd.k. k. wird autorisiert
vv3.1
Für sd.k. k. wird autorisiert (v3)
Basis: widerstand gegen terroristen
ps-help/v3/doc/售卖方式与授权购买链路_v3.mdUnd das hilfszentrum_API_Oh, DOC (video iii). Ziel: Node/Python/Java das gleiche verhalten Von SDK im bezug auf die drei sprachen (wikinger, wan/python/java)
1. Wan - algorithmus (sprachübergreifende übereinstimmung)
Drei weitere sprachen für das gleiche gerät müssen erzeugt werden machineCode.
Lieutenant, fingerabdrücke.**Priorität.**Gültige werte sind in sämtlichen einheiten ungültig
fingerprint = 硬件序列号 → 系统机器 ID → hostname | os | arch(兜底)
Mit meiner landefähre fähre gemacht - priorität 1: hardware? - das ist - wir machen das mit meiner fähre - fähre fähre fähre dieselbe strecke?
| System. | Quelle. | Mach den zugriff. | Zugriff gewährt |
|---|---|---|---|
| Windows | BIOS SerialNumber | wmic bios get serialnumberDas ist eine PowerShell Get-CimInstance Win32_BIOS) |
Gewöhnlicher benutzer. |
| macOS | Hardware ist eine festplatte | system_profiler SPHardwareDataType Extraktion. Serial Number |
Gewöhnlicher benutzer. |
| Linux | B) die seriennummer | lesen /sys/class/dmi/id/product_serialherabstufung dmidecode -s system-serial-number) |
Sieht so aus. |
Priorität 2: i.t. für die systemmaschine (erstellung in der installation)
| System. | Quelle. | Mach den zugriff. | Zugriff gewährt |
|---|---|---|---|
| Windows | MachineGuid | Anmeldeformular. HKLM\SOFTWARE\Microsoft\Cryptography |
Gewöhnlicher benutzer. |
| macOS | IOPlatformUUID | ioreg -d2 -c IOPlatformPlatformDevice |
Gewöhnlicher benutzer. |
| Linux | machine-id | lesen /etc/machine-idherabstufung /var/lib/dbus/machine-id) |
Alle benutzer. |
Priorität 3: schachteln (hostname | os | Was wäre zu tun?
Hardware ist verfügbar, wenn sowohl die seriennummer als auch die systemid fehlgeschlagen sind
| Felder. | Node | Python | Java |
|---|---|---|---|
| hostname | os.hostname() |
socket.gethostname() |
InetAddress.getLocalHost().getHostName() |
| os | os.platform() |
sys.platform |
System.getProperty("os.name") |
| arch | os.arch() |
platform.machine() |
System.getProperty("os.arch") |
Bearbeitung in bearbeitung
- Alle felder entfernen den leerstreifen am ende, und alle kleinschreibung:
- Unkritische werte des filterers
To be filled by O.E.M./None/0/Default/Not Available/Not Specified(annabelle). - Die fastenkombination ist vereint
|Ganzheitlich.toLowerCase().
machineCode = 'M' + base64url( sha256( fingerprint ) ).slice(0, 32)
machineCode Mindestens 8 personen und das gesamte system ist exklusiv und sd.k. bildet einen internen lösch-stab.
2. Regeln zur autobiografie (spielsoftware/genergenera - selbstverständlich)
Zeichenkegel in einem festen gang gruppieren, abtrennen (keine notdown down werteedition Eine geisterleitungexpiryDays 0,licenseCode Leer (Leer) :
productUniqueCode \n machineCode \n edition \n expiryDays \n clientOrderId \n licenseCode \n timestamp
signature = base64url( HMAC-SHA256( licenseApiSecret, 签名串 ) );timestamp Millisekunden, plattform werden mit server zeigen ≤ fünf minuten (vor ab).
3. Die schnittstellen
Untertitel:https://www.powersoftware.app/frontApiWir sind startklar baseUrl Ist der in der tasche?
| Interface. | Route. | Neue beschwerden! | Für sd.k. eine methode. |
|---|---|---|---|
| Aktiviere jetzt. | POST /license/activate |
ohne | activate(licenseCode, machineCode) |
| Laborresultate. | POST /license/verify |
ohne | verify(licenseCode, machineCode, activationToken) |
| Machen sie sie los. | POST /license/deactivate |
Software anloggen (browser-situation) | deactivate(licenseCode, machineCode) |
| Die inneneinrichtung der software | POST /license/software/generate |
Gezeichnet Von HMAC. | generateForSoftware({...}) |
| Software interne upgrade/gebühren | POST /license/software/upgrade |
Gezeichnet Von HMAC. | upgradeForSoftware({...}) |
| Empfange die probe. | POST /license/trial/claim |
ohne | claimTrial(machineCode) |
generateForSoftware / upgradeForSoftware Ein automatik. timestamp + signature;claimTrial Das produkt wird gebraucht, um erst zu bezahlen, wenn es gebraucht wird.
4. Lokale gutscheine und bestätigungen Von gültigkeit
- In den staaten.Regal.:
licenseCode,activationToken, in einem fall Von verify, später:{ valid, edition, expiryTime, trialExpiryTime }+ zeitstempeltrialExpiryTimeist der Snapshot der Testablaufzeit (ISO8601,nullohne Ursprung aus einer Testphase) und dient als Kulanzfenster für Funktionen höherer Editionen. - **Negativ. - negativ.**Entschlüsselbare, vollständig autorisierte informationen (keine funktion, nur verlangsamt).
- Erlaubt prüfung des pflöhns 60s: überprüfen sie zunächst die pfünsterfunktionen als pfünder. Die lösung findet noch kein verfallsdatum. Falls ein programm überfällig ist Oder nicht läuft
verify. - Die streichung/erstattung/aufwertung eines dienstleistungsbereichs führt zu einer aktiven deaktivierung (bereits auf der plattform erreicht), ohne dass sd.k. einen erkennung durchlaufen muss.
5.payling Von seiten abfangen und hacken
Zahlen sie das menü. Klicken sie dann:
verifyCached(licenseCode, machineCode, activationToken)Ich kriege sie! Ich kriege sie!- Ich kriege sie nicht! "kauft sie!",
- fälsche
machineCodeSpringen sie auf die kaufseiteproductUniqueCodeDie er auch braucht.
https://www.powersoftware.app/product/license/purchase?productUniqueCode={productUniqueCode}&machineCode={machineCode}
(multilinguale stellen den pfad vor, z. B. mit sprachvornamen /en-US/product/license/purchase;productUniqueCode Regale einspeisen lassen.)
So wählt dickes einkaufsgelände:.appInternationaler stopp, v .cnNur ein paar verbindungen.
Im arc net gibt es zwei seiten, sd.k purchaseUrl() Passt! base Al: parameter und los:
powersoftware.appInternationaler sitz |
powersoftware.cnNur ein paar verbindungen. |
|
|---|---|---|
| Die zahlungsweise | Ich bezahle den paytv | Nur um eine zahlung zu leisten. |
| In land/währung | Cloudleer dann stimmt es. Code, ich kriege den dollar. | Permanent. country=CNDer yuan. |
| Sprache. | (URL:) voreinstellung (url: Accept-Language Automatische kontrolle. |
Permanent. zh-CN |
| Anwender. | International benutzer/übersee | Nutzer vom chinesischen festland |
Sd.k. standard. .appUnd keine automatischen entscheidungen. Das kunden-programm muss entscheiden, welche nachrichten gesendet werden base.
urteilsvermögen
Formel 1: sprache nach system (empfohlen)
import locale
def get_purchase_base():
sys_lang = locale.getdefaultlocale()[0] or ""
if sys_lang.startswith("zh"):
return "https://www.powersoftware.cn"
return "https://www.powersoftware.app"
function getPurchaseBase() {
const lang = process.env.LANG || "";
return lang.toLowerCase().startsWith("zh")
? "https://www.powersoftware.cn"
: "https://www.powersoftware.app";
}
String getPurchaseBase() {
return "zh".equals(Locale.getDefault().getLanguage())
? "https://www.powersoftware.cn"
: "https://www.powersoftware.app";
}
Methode 2: benutzer festlegen Die schnittstelle stellt benutzeroptionen dar, die der nutzer selbst auswählen kann.
Weg 3: der harte code - nur tote software für den hausbenutzer base="https://www.powersoftware.cn".
Einzelheiten. 语言与国家逻辑 Das ist teil 2,40.
6. Fehler enthalten
codeNotFound,revoked,expired,machineLimit,tooManyAttempts,signatureInvalid,apiSecretMissing,productNotEnabled,trialNotEnabled,trialAlreadyPurchased,trialAlreadyPurchased,trialAlreadyPurchased,trialAlreadyPurchased,machineCodeInvalid,orderAlreadyUsed,editionRequired,productNotFound,trialFirstRequired,alreadyOwned Und nicht verlieren. Netzwerk/zeitverlust sind vereint NETWORK_ERROR.
7. Die masche
ps-sdk/
node/ @mizhanchengxi/ps-license-sdk(ESM,零依赖)
python/ ps-license-sdk(py3,零依赖)
java/ com.powersoftware:sdk(Java 8+,JDK 自带 HTTP/加密)
Bietet alle drei taschen:machineCode(),sign(),LicenseClientDie sechste methode verifyCached + purchaseUrl(annabel)