关键点源码仓https://gitee.com/ja-netfilter/ja-netfilter, 码云还能用, 作者的github已被封禁pow插件的代码很少基本原理是通过java agnet代理来替换RSA中模幂运算的结果来伪造验签并配合其他插件去掉联网激活。当前分析是基于https://jetbra.in网站大佬的power配置结合RSA以及证书的相关知识反推出激活过程完全逆向分析出验证过程我并不会。power插件配置如下, 只看第一个配置即可理论上只有第一个配置即可完成激活EQUAL,x,y,z-fakeResult对于这里的情况就是x.modpow(y,z)fakeResult, 就是匹配x,y,z三个参数, 并替换模幂运算结果为fakeResult, x:证书的签名密文y:指数zjetbrains内置root证书的公钥的模fakeResult证书签名sh256摘要后的明文ASN.1格式再进行填充。jetbrains的验证主要就是证书的验签主要就是5里的内容但是还有一点需要特别注意4096位证书的签名域大概会有2000多位但是2048位证书要短的多jetbrains内置应该会对这个长度校验因为2048位证书生成的密钥激活不成功基本流程下面是生成一个可用证书的代码。相关证书配置可参考cryptography文档import datetime from cryptography import x509 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.x509.oid import NameOID one_day datetime.timedelta(days1) ten_day datetime.timedelta(days3650) today datetime.datetime.today() yesterday today - one_day tomorrow today ten_day private_key rsa.generate_private_key( public_exponent65537, key_size4096, backenddefault_backend() ) public_key private_key.public_key() builder x509.CertificateBuilder() builder builder.subject_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, MoYuno-from-2022-07-25), ])) builder builder.issuer_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, JetProfile CA), ])) builder builder.not_valid_before(yesterday) builder builder.not_valid_after(tomorrow) builder builder.serial_number(x509.random_serial_number()) builder builder.public_key(public_key) certificate builder.sign( private_keyprivate_key, algorithmhashes.SHA256(), backenddefault_backend() ) private_bytes private_key.private_bytes( encodingserialization.Encoding.PEM, formatserialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithmserialization.NoEncryption()) public_bytes certificate.public_bytes( encodingserialization.Encoding.PEM) with open(ca.key, wb) as fout: fout.write(private_bytes) with open(ca.crt, wb) as fout: fout.write(public_bytes)2.下面为生成key代码将第一、第二行输出替换到power配置第三行即为激活key, ca.key为保存证书私钥的文件。import base64 from Crypto.Hash import SHA1, SHA256 from Crypto.PublicKey import RSA from Crypto.Signature import pkcs1_15 from Crypto.Util.asn1 import DerSequence, DerObjectId, DerNull, DerOctetString from Crypto.Util.number import ceil_div from cryptography import x509 from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import padding # noinspection PyTypeChecker def pkcs15_encode(msg_hash, emLen, with_hash_parametersTrue): Implement the EMSA-PKCS1-V1_5-ENCODE function, as defined :param msg_hash: hash object :param emLen: int :param with_hash_parameters: bool :return: An emLen byte long string that encodes the hash. digestAlgo DerSequence([DerObjectId(msg_hash.oid).encode()]) if with_hash_parameters: digestAlgo.append(DerNull().encode()) digest DerOctetString(msg_hash.digest()) digestInfo DerSequence([ digestAlgo.encode(), digest.encode() ]).encode() # We need at least 11 bytes for the remaining data: 3 fixed bytes and # at least 8 bytes of padding). if emLen len(digestInfo) 11: raise TypeError(Selected hash algorithm has a too long digest (%d bytes). % len(digest)) PS b\xFF * (emLen - len(digestInfo) - 3) return b\x00\x01 PS b\x00 digestInfo certBase64 MIIFTDCCAzSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIyMDcyNTIzMTcwOVoXDTMyMDcyMzIzMTcwOVowHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDDx3gz77KvezmZJhwkF/10Q3vESk96tK6wJ00CSKkLybRDeQVOlHX3QAnPL7BjwCTzHqErsuyPuiZ6YTAVE/n7hLhIbh3lCEBbxpa2hpIdIvUimr70iSrH9ZBWmnn5Fxy4r/r0tbxr34zpQzu4uWLiEqmOiDfRNZzj9FBaJ/gKsuhF7zNAbFHsClYntim5furDRITBra28nu0hfQIEBSHGPS2EKWTbKk2ifBLzMEDp99zIGEe/hrLpgBhdwGVD7VJsoeTXnvcgpt91kiM918GWThO1L3eKU6W2mGZQv1bRyps7Fo61NElNWtJqqZ3KKyxJGyR1QpdOHd9flAesvYwb/lvc4uqYiKqwvvn4iHPQlLtZDbzj0ICbKtVKSWgSprh0T5ZQGGNWXN4OMHtg9EuXvbagLshTEDkLKLzEBqSNpNmMmyzwyNO9/voQmHLjiWLdjVIYndjl15GA9Dw5mVYqzKPMLEpHzg6ldkKJkGAxNBhCMUsmbEypT6r7wsdTvgEwFnP8ToOsAb12lSLxoR2bOT3xJ3WIfbyjvlBnauXfdu6SFF/82QFrLtQyddPvCHEiJTI0NmSYhjQObFohXMVVoXjGbXvuqgJNbc5UK06pCGQ2jKw4j6k1kw2g4fEYBd1fvEzb1/tizpP8dEI0365xh0C1dpQjUj3uyRywIDAQABo4GZMIGWMEgGA1UdIwRBMDAFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwCQYDVR0TBAIwADATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwHQYDVR0OBBYEFCTaESKW9YVBwJNH6DEjTPTAhAL/MA0GCSqGSIb3DQEBCwUAA4ICAQA29wUDKatiQe1S0qfId1dRWnYznrHE0Cx41HUaeI5hvdZrFbDIP6syb/S9oAXST6w4pfgh80jk1xVLB7NT5kFCAI7mpd8dK8ZK67tagYg41TdLGfSHqKlljln5ElqUEN21fba5CVZplE286jy973XFOFbWZUpJC/5onCCAh8pK8AqpN7k3ovR6bfAga41UWdTnGeiyw9XOj30ryebseTKaDfjQxsxEmyuA8YYCu9lgb58cvVrvc99So8KdOBaxHnxeEfiUqvPA8Y0QG7lc5elZYQ6cbiIqqsb/k9XSgB2Gk4CjuacBSxCAfd06NlJvZSDFSR1HTKhQfPLIQY1OpBCNrKRWnQT4/IORL6F36gI9lTKioX8mzQ2bvXn4sXA3jrpRnGM2WemQvMPvstfSDKfcUdKjwX3rZ2jMwREkx/thtF3Huvsc8suOyzto1faD8mV0m4guq85fb4c9ki6cinz3QM2k6otVvh67gK116RZ7I8P/urTWvK7IOdwOE7UVqtpEe6TKvNhr1rzeaxUMdPcD0kY7fhBpuPwEQAXk0uiVRXbpaPD4HWuapJm31jC7zBp/BamRI25v26P5qMUQF/P7eE4Ah/X0Rtf2Qvr2p9kbfqalT8EiqOsvRiTvlMG1hdo33JdcwsxC05BWvZ7Af0FgJ3TtFlw cert x509.load_der_x509_certificate(base64.b64decode(certBase64)) public_key cert.public_key() sign int.from_bytes(cert.signature, byteorderbig, ) print(fsign:{sign}) modBits public_key.key_size digest_cert SHA256.new(cert.tbs_certificate_bytes) r int.from_bytes(pkcs15_encode(digest_cert, ceil_div(modBits, 8)), byteorderbig, signedFalse) print(fresult:{r}) licenseId ZCB571FZHV licensePart {licenseId: ZCB571FZHV, licenseeName: MoYuno, assigneeName: , assigneeEmail: , licenseRestriction: , checkConcurrentUse: false, products: [{code: PDB, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PSI, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PPC, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PCWMP, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PPS, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PRB, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: II, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: false}, {code: PGO, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PSW, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}, {code: PWS, fallbackDate: 2030-12-31, paidUpTo: 2030-12-31, extended: true}], metadata: 0120220701PSAN000005, hash: TRIAL:-594988122, gracePeriodDays: 7, autoProlongated: false, isAutoProlongated: false} digest SHA1.new(licensePart.encode(utf-8)) with open(ca.key) as prifile: private_key RSA.import_key(prifile.read()) # 使用私钥对HASH值进行签名 signature pkcs1_15.new(private_key).sign(digest) sig_results base64.b64encode(signature) licensePartBase64 base64.b64encode(bytes(licensePart.encode(utf-8))) public_key.verify( base64.b64decode(sig_results), base64.b64decode(licensePartBase64), paddingpadding.PKCS1v15(), algorithmhashes.SHA1(), ) result licenseId - licensePartBase64.decode(utf-8) - sig_results.decode(utf-8) - certBase64 print(result)3. power配置[Result] EQUAL,299213640480477532232613356963433702031002251045851034447586414483519966756292278486543340805051010387298654019573363272008360784689022119017890774114551027339708503004045350343586644811618864305881845465533648400689567858742575422559970141004668011335270078334407666830207988469779150466837407714233763706094062000639780603973844773087781508392275584101394349697501544157473450756019949199684259212935405319499144363514324449339190870632316321795482940183529552098938554099062136011084894473851845239116184148986281123972659644878799379380261449920696338120543502812544746767898798943314889294194101292036595639371186775347484567397344395184405355790360065442444860205472364733334389986946974705941726087707844500957983916062459453221933893215161372392731381189453820187891087273544552705596167883641667321388071603600011784878991949691982964403655253904545535007628440853843739961414609377533977442694446499647779793529580697861112506950060413115797629255454796936312507751116190662225936971532934134905675293377129487625260335951037389915705838362760349227579537971722730753029711967720727791938130994188333268180862035329802322328559778203266156173042101769378930210077375824223343237114381772298569863055041850568390194480790793,65537,860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353-318722192814072420255051486424751093316639480300104913447336878443589449454210649673103885478209704083523592136974872692256949901790098146747813747513234032576280815595614623516956051676752843723885519412797835152092382458312290266623637293806331365202883272920472321799097915264928774754171135798217171938075848076440975276473054696713336468688836503122809896637886565076617134099112670858067082379667308215297024989721141941660918192775821494335783836395321362716372197589622526143900711227732230251547104116816289175235575260990538582103634061228532944098302762709462928939888305145389509516864805808866026189277284700290907474006876170465114626654694468466246856140842641912133180748045497155737804083059779472389155277986803935382074826206481815048765341524301493557917563746423276231338434739478617711506720968341490144649564514808033262844172021163464543459293501487707465530569959221543828223077585158051427043739840192522107156508758536346979207081138068801961441973846373289822631673950736885015172866780839739761406960775901220530140854128286200514700850333647730991461035253130188733192937288004421015203840881096035559598936398420913391938754244023727569806903169334133860640827422059392463411340233235255642615386704.keyVAE9B0CRYZ-eyJsaWNlbnNlSWQiOiAiVkFFOUIwQ1JZWiIsICJsaWNlbnNlZU5hbWUiOiAiTW9ZdW5vIiwgImFzc2lnbmVlTmFtZSI6ICIiLCAiYXNzaWduZWVFbWFpbCI6ICIiLCAibGljZW5zZVJlc3RyaWN0aW9uIjogIiIsICJjaGVja0NvbmN1cnJlbnRVc2UiOiBmYWxzZSwgInByb2R1Y3RzIjogW3siY29kZSI6ICJQU0kiLCAiZmFsbGJhY2tEYXRlIjogIjIwMzAtMTItMzEiLCAicGFpZFVwVG8iOiAiMjAzMC0xMi0zMSIsICJleHRlbmRlZCI6IHRydWV9LCB7ImNvZGUiOiAiUEMiLCAiZmFsbGJhY2tEYXRlIjogIjIwMzAtMTItMzEiLCAicGFpZFVwVG8iOiAiMjAzMC0xMi0zMSIsICJleHRlbmRlZCI6IGZhbHNlfSwgeyJjb2RlIjogIlBQQyIsICJmYWxsYmFja0RhdGUiOiAiMjAzMC0xMi0zMSIsICJwYWlkVXBUbyI6ICIyMDMwLTEyLTMxIiwgImV4dGVuZGVkIjogdHJ1ZX0sIHsiY29kZSI6ICJQQ1dNUCIsICJmYWxsYmFja0RhdGUiOiAiMjAzMC0xMi0zMSIsICJwYWlkVXBUbyI6ICIyMDMwLTEyLTMxIiwgImV4dGVuZGVkIjogdHJ1ZX0sIHsiY29kZSI6ICJQV1MiLCAiZmFsbGJhY2tEYXRlIjogIjIwMzAtMTItMzEiLCAicGFpZFVwVG8iOiAiMjAzMC0xMi0zMSIsICJleHRlbmRlZCI6IHRydWV9XSwgIm1ldGFkYXRhIjogIjAxMjAyMjA3MDFQU0FOMDAwMDA1IiwgImhhc2giOiAiVFJJQUw6MTMxNzYyODYxMCIsICJncmFjZVBlcmlvZERheXMiOiA3LCAiYXV0b1Byb2xvbmdhdGVkIjogZmFsc2UsICJpc0F1dG9Qcm9sb25nYXRlZCI6IGZhbHNlfQ-MkDyzvbXWknbzvzkgq9VbTnXNnLqFj7MLYVYsMc75aGcTMKmEsSN2mSvgbyC4NHbJI4jxwo85c2KOP6OrBAxDrFnJCgc/OSOf4T56nMARLpisMly90p68/6sU7b2f0xCuIY6Gs97pDtPIc12lRnrVQv2Sycz3W0pYMBxQkIGNtsXMDdPShPDT7TD1zicTDV6lhwuDIhP6LYLUVWSfDN6DczQRDmUGm1KzNSlFBdoYGUXYCkYKffo7hukCW6ZKdfJLywLwJnabpd6tQDb6kc5gpEhNh6GzVZXKYvA5PyRlt8RjBT7w0Jim96JH48VyD/GGa0e8V2Nw6U/uG73LdmPEg2hGF7eKvC0zU4rpQvj0hUJcvm1rVQPWDJcEAIs3i95Xl56yyAa3JHQ7zOjegQLeYv/uuPgKqHHpf7X7irvRtAQMC1KFNl8wLQJFLp/JGSQ4kVBUpxMuV0o/LDUKn3qs/DwIl7gq24igtEMwluv0AwKvOUQkGFMgaCqA61GgbJqUaBXleo/GAII727GHlAoLv4XJdISfY9x6iuH96lfTEr2qgdGIKxIz3pT7jhgh1qmBdSGyB3pJo4cKV530XvuoAZl5scCgz6xQMSmWV8bx6nmVKTn0V0qOdaeggIjotjL9mtWlVEguIAPpKJxbBMhZRbrMo0-MIIExTCCAq2gAwIBAgIUZKjG0XIFJFl/6PfqfOCE4LyPxVowDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNSmV0UHJvZmlsZSBDQTAeFw0yMjA3MjgwMTQzNThaFw0zMjA3MjYwMTQzNThaMCExHzAdBgNVBAMMFk1vWXVuby1mcm9tLTIwMjItMDctMjUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDhykmyOmP3Geexl39gcTGwuvLUyZxjhuFLutWBud3b10U1yRiz87NUk/NCAId3Qr8qiqwW3Kqe1FpDWG4HUWbIdNYtaRalMAkCSaLXe6QCymtJOpTgbSYwrql8nJJxZ8OLBbyFMdURsWAJFT4DDIZ9J62xSKeTBbSNwfm5vIeKkoHrqHTlQWP1pXkgEE5D91EQ1UcOzkCdNyW9rphQpk9ZfD/0QBxS06zgngh53UeJSAFGKWyPlQrhwfOp8AEcwkwFI20T5UzsQFZ5jjgpfg2GlNiMuvM48bXFybMB0yFes54ukKPnmgOb8BQ7fKuSgB2ZTOGQT1YcAI8/zJECcXYaLOnaQ7UA8WKyXY9bPHxXykW/xHIrHK11hnmgMY0rnVKVeVkeDsiVT/E7KvjburWiDCm5yAeoG7hZXIoCm3rwzG2w6lzVIM1/J1XN4e8BWS6ZUKuMaPwX5nOmWFLl7FgTPEC9JQasSFhSdeWHiHT3jJD3SDxG2fVJkGE8WvFFFI90NPmYELnAU7byEqiuJYapkawIlNARWYgGTi8JMxN8jB2yGofBb/scG/JEWmTWMoPrwmfVxKfC5M72iob8hZf9NCmJ33iKCotIyIT5NkUKeGw1CrQxCH/MJqb0CCtwVnSm8crNc/Lf/ufnBOHIeD4wM2YlW8g1XTHQIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQBJV9PB17o4P64v2gC6RBSeAIbePx4YyVXo/uRbALf/MBs70kgLXcQPGS8KTWHKntKUHyZezprMBG2X8NO1EUtKNhA4enFA6zZP9qCzxfHsdZKG/nVgrvD34xmPovhWpTaQgQwtfruXESWEtVMyk0qQxaMf5VtpFw/3CUXljCpmGi1nNuQerFBhp63lpUv3qpyG9Hz0iRpO77xC0VhnCCQ3yB1DoIJZ6g976cxdsFTFCqsEGVrclolkkiFRURFqBkF4K9v/N39rc4JL42uvGMMD/gZBFVYhPuIsAgIwrp42qSmDbr0VnVZFozpEE7ljQv8W4C6BxcDKbQX1ejrmxsXtYu1M/ot7ljT4XXAeuqUkYb6lykwTbuc0hqFsVLB4Vry3rZbK1IVTFHQCrl7Kj8feT5WgsWYelMK1N/n/X5sK1Y7d8ZrdcbUJIet11zoDaHDKyvUDow5h4WQmfkZSD1FYk3ddBdRmEWl8D7vZ/SKuwHS5yhR7OIOiFHl4WoTQsihaNPadFDJ9PdUKAu9YE8CFrSoECO6QsQihl0iD889woqLnMwJIB5Mi7oSy43yIWK4oB5RI/uObqqOEiD/J3bmM/dOKxcf6Z9M8lTBPR3L6QKPpSag3hBAsoofY8S2unKa/e5mfjOp1ox8JcjlgKWt/V9NH9CQ5.2022.2由于默认启用jdk17需额外添加--add-opensjava.base/jdk.internal.org.objectweb.asmALL-UNNAMED --add-opensjava.base/jdk.internal.org.objectweb.asm.treeALL-UNNAMED6.结果