ja-netfilter的前世今生和非对称加密的欺骗原理

文章目录

      • ja-netfilter
        • 起源
        • 官网
        • 插件
        • 插件配置文件
        • 插件的综合应用
        • 更多用法
      • 非对称加密欺骗原理
        • 非对称加密和数字证书
        • 激活过程和欺骗手段分析
        • 代码示例
          • 第一步:生成自签名证书脚本
          • 第二步:使用自签名证书对产品激活信息进行签名
        • 样例数据
          • 样例激活码(注:用于代码演示,直接粘贴到JetBrains 家 IDE 中无法完成激活!不用试,肯定提示无效,无法激活!!)
          • 样例power.conf(配合ja-netfilter使用,使得上述的激活码从无效变为有效可用状态)

ja-netfilter

起源

ja-netfilter是 Neo 搞的一个开源项目。

Neo 之前搞得开源项目IDE Eval Resetter,是通过无限试用的方式来使用 JetBrains
全家桶,该项目在2021.2.2及以下版本很好用;2021.3以下(不含)堪堪能用,需要配合一些手法;2021.3版本开始正式失效。Neo 也已经弃坑,放弃了该项目。

接着搞了 ja-netfilter 项目,它是基于java agent技术的工具,通过编写插件的方式,依靠java agent技术进行AOP(Aspect-Oriented Programming,面向切面编程),可以对Java程序(也仅对Java程序才能使用)基于规则进行拦截和修改。但实际上,主要还是用于 JetBrains 家 IDE。

官网

Neo的个人博客是 知了,可以参见其个人博客的详情介绍:ja-netfilter。

ja-netfilter 是开源项目,源码仓:https://gitee.com/ja-netfilter/ja-netfilter,码云还能用。不过,作者的GitHub已被封禁,原GitHub项目 ja-netfilter 已经成为历史。

其他,ja-netfilter的fork版本到处都是,推荐:

  1. v-JiangNan/ja-netfilter-modified
  2. qianyu1009/ja-netfilter
  3. pippo1980/ja-netfilter-all
  4. zfkun/ja-netfilter-mymap-plugin
插件
  1. url:这个插件用于禁止http(s)请求。如果待请求的URL和配置文件相匹配,则会抛出SocketTimeoutException。
  2. dns:这个插件用于禁止指定域名的DNS解析。如果域名匹配,则会抛出UnknownHostException。
  3. hideme:这个插件的功能是让别人不知道当前jvm存在ja-netfilter。
  4. mymap:这个插件实现比较粗糙,仅是在调用Map.put时,如果key符合配置文件,那么就把待put的value替换为配置文件中对应的value。这种做法很暴力,容易造成冲突,不过,目前这个插件也已经被废弃掉了。
  5. power:最核心的插件。这个插件hook了oddModPow函数,让这个函数返回自己想要的值。因为非对称加密常常使用这个函数,所以使用恰当的值来hook这个函数就能瞒天过海。其中ArgsFilter用来修改入参,ResultFilter用来修改返回结果。更多实例参见作者文章: Power插件应用:搞定YouTrack和Upsource、Power插件应用:搞定tinyMediaManager。
插件配置文件

插件目录里的配置目录里的插件、配置文件是一一对应关系。各个插件对应的配置文件为config目录中的${lower plugin name}.conf文件。

可以通过javaagent参数来指定目录,例如:-javaagent:/path/to/ja-netfilter.jar=appName 的配置、日志和插件目录将是config-appnamelogs-appnameplugins-appname

如果没有指定javaagent参数,目录默认为config、logs和plugins。

插件的综合应用

作者提到的热心大佬,主要是指:jetbra。

具体的应用举例:

  1. https://ipfs.infura-ipfs.io/ipfs/bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i/
更多用法

比如 ja-netfilter.jar 除了最常见的作为java命令的参数(或添加到JVM Options file)的用法,还支持 attach mode。

具体参见开源代码仓库:ja-netfilter/ja-netfilter。

非对称加密欺骗原理

非对称加密和数字证书

非对称加密技术简而言之就是使用私钥加密或签名,公钥验证签名或解密。数字证书则是公钥、私钥的封装形式。

非对称加密和数字证书相关详细内容,不再赘述,如有需要可查看:数字证书的制作和格式转换。

激活过程和欺骗手段分析

激活过程实际上就是使用公钥验证签名的过程。包含两个核心步骤:

  1. 验证公钥证书的可信性:确保公钥证书是由受信任的证书颁发机构(CA)签发,并且未被篡改或撤销。
  2. 使用公钥证书验证签名:利用证书中的公钥来确认签名的有效性,从而验证数据的完整性和来源的真实性。

欺骗手段分析:

  1. 验证公钥证书的可信性:使用ja-netfilter完成,通过java agent方式拦截验证函数,将x.modpow(y,z)的返回值改为fakeResult,这里即对应了power插件的配置文件power.conf里的配置内容:EQUAL,x,y,z->fakeResult
  2. 使用公钥证书验证签名:生成自签名证书,然后使用自签名证书对自定义的信息(即产品激活信息)进行签名。签名是真实有效的,就是证书不是官方证书。
代码示例
第一步:生成自签名证书脚本

generate_cert.py 完成自签名证书的生成:

import datetimefrom 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 NameOIDone_day = datetime.timedelta(days=1)
ten_day = datetime.timedelta(days=3650)
today = datetime.datetime.today()
yesterday = today - one_day
tomorrow = today + ten_dayprivate_key = rsa.generate_private_key(public_exponent=65537,key_size=4096,backend=default_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_key=private_key, algorithm=hashes.SHA256(),backend=default_backend()
)
private_bytes = private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.TraditionalOpenSSL,encryption_algorithm=serialization.NoEncryption())
public_bytes = certificate.public_bytes(encoding=serialization.Encoding.PEM)
with open("ca.key", "wb") as fout:fout.write(private_bytes)
with open("ca.crt", "wb") as fout:fout.write(public_bytes)
第二步:使用自签名证书对产品激活信息进行签名

generate_key.py 完成对自定义的信息(即产品激活信息)进行签名。并按照 power.conf 和激活码的格式组织和输出相关内容。

import base64from 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_parameters=True):"""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# 用于存储证书内容的字符串
certificate_content = ""# 用于标记是否已经开始读取证书内容
reading_certificate = False# 打开源文件并逐行读取
with open('ca.crt', 'r', encoding='utf-8') as file:for line in file:# 去掉行尾的换行符line = line.strip()# 检查是否是证书开始标记if line == "-----BEGIN CERTIFICATE-----":reading_certificate = Truecontinue# 检查是否是证书结束标记if line == "-----END CERTIFICATE-----":reading_certificate = Falsebreak# 如果已经在读取证书内容if reading_certificate:certificate_content += line# 输出结果
#print(certificate_content)certBase64 = certificate_contentcert = x509.load_der_x509_certificate(base64.b64decode(certBase64))
public_key = cert.public_key()
sign = int.from_bytes(cert.signature, byteorder="big", )
#print(f"sign:{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)), byteorder='big', signed=False)
#print(f"result:{r}")# 模幂运算指数
modIndex = '65537'# jetbrains内置root证书的公钥的模
rootCertVersion1 = '860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353'
rootCertVersion2 = '24156627931985958051017183040835577271803742470193804806479316178045088981962804168393398987646446251087541768081971475544151551235525470790716604369379805327668466429966167642117961353233058515180243264560201783520956161510523416923017697354365782825500659342029196527776056976223174394946371372849906309277537461992299774200098515526818746947230488275456663264920440977381968978227273889068919338259949793686590492904029279861913225794809675826299753284990778166519152326723946780528965868736869495336993456735232755342913885746267768375682771655854436236934171901662660193080235109535758464079136573948168636773471'# 通用参数替换
commonArgsStr = 'EQUAL,65537,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281->3,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281'power = '[Result]' + "\n" + '; Suit 230914' + "\n"
power += 'EQUAL,' + str(sign) + ',' + modIndex + ',' + rootCertVersion1 + '->' + str(r) + "\n"
power += 'EQUAL,' + str(sign) + ',' + modIndex + ',' + rootCertVersion2 + '->' + str(r) + "\n"
power += "\n"
power += '[Args]' + "\n"
power += commonArgsStr
print(power)# 打开文件
with open('power.conf', 'w', encoding='utf-8') as file:# 写入字符串file.write(power)print("已写入文件 power.conf")licenseId = 'FV8EM46DQYC5AW9'
licensePart = '{"licenseId":"FV8EM46DQYC5AW9","licenseeName":"lixiaobai","licenseeType":"PERSONAL","assigneeName":"","assigneeEmail":"","licenseRestriction":"","checkConcurrentUse":false,"products":[{"code":"GO","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RS0","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"DM","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"CL","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RSU","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RSC","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"PC","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"DS","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RD","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RC","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RSF","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"RM","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"II","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"DPN","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"DB","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"DC","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"PS","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"RSV","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"WS","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":false},{"code":"PSI","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"PCWMP","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"RS","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"DP","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"PDB","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true},{"code":"PRR","fallbackDate":"2026-09-14","paidUpTo":"2026-09-14","extended":true}],"metadata":"0220240702PSAX000005X","hash":"12345678/0-541816629","gracePeriodDays":7,"autoProlongated":false,"isAutoProlongated":false,"trial":false,"aiAllowed":true}'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),padding=padding.PKCS1v15(),algorithm=hashes.SHA1(),)result = licenseId + "-" + licensePartBase64.decode('utf-8') + "-" + sig_results.decode('utf-8') + "-" + certBase64print(result)# 打开文件
with open('activeCode.txt', 'w', encoding='utf-8') as file:# 写入字符串file.write(result)print("已写入文件 activeCode.txt")
样例数据
样例激活码(注:用于代码演示,直接粘贴到JetBrains 家 IDE 中无法完成激活!不用试,肯定提示无效,无法激活!!)

cat activeCode.txt

FV8EM46DQYC5AW9-eyJsaWNlbnNlSWQiOiJGVjhFTTQ2RFFZQzVBVzkiLCJsaWNlbnNlZU5hbWUiOiJsaXhpYW9iYWkiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IkdPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUlMwIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiRE0iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTVSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJEUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJEIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSU0YiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlJNIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiSUkiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJEUE4iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRDIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUFMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSU1YiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IldTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUlMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IkRQIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQREIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBSUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wLTU0MTgxNjYyOSIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJ0cmlhbCI6ZmFsc2UsImFpQWxsb3dlZCI6dHJ1ZX0=-CxBboTr/RToiStkK85rwyDLAPlEu1TVOBMY3qjdPUwYzOYeKurq6gmU/DDOdE7T3uyg3cW9R1kQO/Ix+tDylfJ5beSj3oBM0wfhEUyHSAXudV97C1iieui8C9281oWTsKAddmn7OeMW7TUj89pU06tPqTo87BxtUIsa0ynxqK+AyxmsJzDeGtqApR/V0VsB2Vr6M9Jb16pIYmE65q6xBLJzEL0i+G1H6nhyub7ZoEA7vMIfJ+icPlg3k7m8XN9F9tM+GXCIP+sUM9jd4MjAxJTi8s4jL7OL0HV9kFbACdc7rWbnEezqdPkPbryjgP/kNa9sbD51P0aSTHjDMHIm4n9AFMTU+ChCEWv1dJy5McTWKIpaBHG8DCk9fdcmUGlzp9sjZkBI8SOnzvb5kCDHgmlxYv6e4KlRAQ40dZHW4r2tju2TMb9732GCSjUO2BsFr4bJ3S0YGiNM3cCVzkV8gRsAuren8D1/9u4m0pM+QVPGRa9/uyxhGV8IA4FKnfiqjbv2V2mrXLJdf8hBALNav66NMdu/fIvbO1XO4Svigxd60QNV+l9a0hPI3lOIMPlB88DIuiqMBqnx+ogqqJwvXTca0zLnzUNML5DwXPRvg6aD80CCDLsZqxUI4/EEuraL+hUnH1+gj8QujsBBszBJel9wfR1iPmiFzWVAJwTceCz0=-MIIExTCCAq2gAwIBAgIUBs+4guJBU9l/V2106XwNv6iXjKQwDQYJKoZIhvcNAQELBQAwGDEWMBQGA1UEAwwNSmV0UHJvZmlsZSBDQTAeFw0yNDA5MDIxNjI0MjVaFw0zNDA5MDExNjI0MjVaMCExHzAdBgNVBAMMFk1vWXVuby1mcm9tLTIwMjItMDctMjUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCWBnjmAIP7ydXqWdoQBy64eCcLTx+6l6mPLoz1VlE4pT8Jb0T28NQCEhYLqMyDttmN3VP0rLsIS33rppX7u7vcz0IAv8wECs6tYJZ6DE1HcAovgvrF4OFcOj396vnOUsEIZ152yTa3/sOsTtkVlguJwvslP2RfbOh9jScvYSfsgGsItgFByB0HM/ks3OI5nCaEwogExH4/7+ftvxEdKp++IXF+z/4deD0qhjtmtgup6tsqkO1BGzq7+CmkmUCmes2+81hWm/ke6wWgBjjQx5ir5uitdpm/WTyZb5STmp3UxjvptaB26PexR3nTL8yUXewcKF7S6oekxqYqUcUDxItr4M675D4ri5jYOQmN/138AuImISMz4ZhvphnlYrJHwsUYZDQJph7hjk2SdT8KYzNutE3t22fP0prDMEE77LhiqzsehdPlw36fF4hSiQM3gUt9zSTeNISAMWnOSqfGw/JUR7ajpSJ/hyv9ZrKhzVoTQMW07M7E9ehn/JQvfSvmNvP5u3TSpPBIfhqH2Y+INpm22D9V2SMu9fqIqEdqxYbPJDusrdUBdSuz6KA3DmGEhPV7AuzFXg3ElNBeKMjHYZUkbSP54lDF1m79bFKcZK2ls7XjwohVaekdDQg0bosH9WuDKzpe7mpoy0IOfRvnkkI4X7yV10dkCGRlZ4WpC4/ldwIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQB1YYemhs7q941wKYPLJCu2vsKft+T/WnJ+r7QGe0pCQwfJDtvuLHtO+T/6DqylbQjAJlOOXMRjDPGzf/2S1UggQwNYy+c2syqtC0k6kN9Ja1soZQEO0E34GcztID+N7SSaxmTiUnzAucmZQpfP9sDIqFrBdBwovfypXLDcw9GrsfQIknrBMaVcEeaDxtviY2bkTmU/c5HnEPsnVa2XHmF8rwPqYU63cqsT8qtxm9w8LxPlwZqM4Jmv29KG5pZiooq1AN0nMHouYdJDgp+iQXFKo2w7VXzcysyzIEa4tdzqycEvXfXRRDUHftsyriYzynqWaC9XquY5C8L6B5OY4RTJlBXlgj9UP3CeAChfBpTy1NqeX4Zo8hJ5KlrfvEHIFcXtfxjIj+YzBIFONw0Lc+PPZOFsFidGgZaA6RcmUv1g+tPjsSKc7+vzNSUfN8MojjzZb3yDyJ6dG2kgBO4jEAXWSBnWah1l9kI18sPD5Vp2Zj/eNajdY7jcAqqtWqbJo7DjfbUC0AEtYkfr94APZPx9h5nvld340JbwDX1VqhDLIspnrKf58tIR2V1V8YgzwNnUB4vgVdkSa5DcwLK/gLi3cs8J1ONBqPQN9e2s9Iq+xqiGB7A9/lUaVYaBP9sMJZwDyXU3kvEkSJ8aXlAfaGe6Z4xr/UuDHvez+gQY4mpttw==
样例power.conf(配合ja-netfilter使用,使得上述的激活码从无效变为有效可用状态)

该配置文件仅针对上述的激活码的特征进行匹配生效,并修改公钥证书返回值为自定义证书值,从而,可见效果:使得上述的激活码从无效变为有效可用状态。

根据Base64解码其激活信息可知:其适用于 JetBrains 全家桶,并且fallbackDate设置为2026-09-14,这意味着拥有所使用版本的永久回退许可。这指的是在某些特定条件下,比如当订阅或许可服务过期或出现问题时,仍然有权继续使用该软件的一个永久许可版本作为备用方案。换言之,即使在到期之后,仍然可以正常使用该软件到期日期前的最新版本,只是不能接收软件更新和使用软件新版本了。

cat power.conf

[Result]
; Suit 230914
EQUAL,478872602894883353672665988376265439992743923062550654710440347521963438695342878296302849820798027411923838144378757355524835351430687175017111976969540278813906397983473000489580719117654512258063922927212911761341055453386052338720120347611768639665360231158010929669757330371301496841705365455394317353737083038494533745854656861466179231476371398359059893319611384162397706771896316842051974946682307732438850527967679271631967825907072313381435175797230816995713545425149027065534801254917043442295018099090871148236882805803542027308103867260722355817427842686220752175462409821585653882319804239010301551935453545151529737765863223285999802584548168783205638165907957953679169959773327693215769081651652928195200971448521235147926809539944428157223473473293519189074500653563102862536923545902858812521387229036425932785214194712344530514638167350996754546086665081426374529733973340000022168788004264744528011327169476238263159983640095928301171060400515065090021354103722791412774090121459056211586987722294362447255745738728359754250314974464371914043996512723322528482675463254224459989418045745190830880234630913335965894140128377150418751804984201788654709089831591851652220814025534543194091641411727334496704488172983,65537,860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193881650827793131163609825731838418267337700459500477583810421422394603927462721
EQUAL,478872602894883353672665988376265439992743923062550654710440347521963438695342878296302849820798027411923838144378757355524835351430687175017111976969540278813906397983473000489580719117654512258063922927212911761341055453386052338720120347611768639665360231158010929669757330371301496841705365455394317353737083038494533745854656861466179231476371398359059893319611384162397706771896316842051974946682307732438850527967679271631967825907072313381435175797230816995713545425149027065534801254917043442295018099090871148236882805803542027308103867260722355817427842686220752175462409821585653882319804239010301551935453545151529737765863223285999802584548168783205638165907957953679169959773327693215769081651652928195200971448521235147926809539944428157223473473293519189074500653563102862536923545902858812521387229036425932785214194712344530514638167350996754546086665081426374529733973340000022168788004264744528011327169476238263159983640095928301171060400515065090021354103722791412774090121459056211586987722294362447255745738728359754250314974464371914043996512723322528482675463254224459989418045745190830880234630913335965894140128377150418751804984201788654709089831591851652220814025534543194091641411727334496704488172983,65537,24156627931985958051017183040835577271803742470193804806479316178045088981962804168393398987646446251087541768081971475544151551235525470790716604369379805327668466429966167642117961353233058515180243264560201783520956161510523416923017697354365782825500659342029196527776056976223174394946371372849906309277537461992299774200098515526818746947230488275456663264920440977381968978227273889068919338259949793686590492904029279861913225794809675826299753284990778166519152326723946780528965868736869495336993456735232755342913885746267768375682771655854436236934171901662660193080235109535758464079136573948168636773471->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193881650827793131163609825731838418267337700459500477583810421422394603927462721[Args]
EQUAL,65537,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281->3,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go 和 java 技术选型思考

背景&#xff1a; go和java我这边自身都在使用&#xff0c;感受比较深&#xff0c;java使用了有7年多&#xff0c;go也就是今年开始的&#xff0c;公司需要所以就学了使用&#xff0c;发现这两个语言都很好&#xff0c;需要根据场景选择&#xff0c;我写下我这边的看法。 关于…

计算机网络27——Linux1

1、虚拟机网络前方路径内容&#xff1a;用户名机器名&#xff1a;/$ $表示普通用户&#xff0c;#表示root用户 2、Linux不分盘&#xff0c;都是绝对路径 /表示根目录&#xff0c;表示计算机文件夹下 ~是当前用户的家&#xff0c;表示home文件夹下自己的文件夹 3、bin文件夹…

Linux编译运行cpp源文件

安装build-essential包 打开Linux虚拟机后&#xff0c;打开terminal&#xff0c;输入以下指令&#xff0c;通过 apt 包管理器安装 build-essential 包&#xff0c;这个包包含了编译软件所需的基本工具和库。 sudo apt install build-essential 编写源代码 打开Text Editor…

MASt3R:从3D的角度来实现图像匹配(更新中)

Abstract 图像匹配是 3D 视觉中所有性能最佳算法和pipeline的核心组件。 然而&#xff0c;尽管匹配从根本上来说是一个 3D 问题&#xff0c;与相机姿态和场景几何结构有内在联系&#xff0c;但它通常被视为一个 2D 问题。因为匹配的目标是建立 2D 像素字段之间的对应关系&#…

STM32的GPIO使用

一、使用流程 1.使用RCC开启GPIO时钟 2.使用GPIO_Init 函数初始化GPIO 3.使用输出或输入函数控制GPIO口 二、RCC的常用函数 函数内容可通过这两个文件进行查看&#xff1a; RCC常用函数如下&#xff1a; void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalS…

我与Linux的爱恋:yum和vim以及gcc的使用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 ​1.Linux软件包管理器yum2.Linux开发工具3.Linux编译器 vimvim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集vim操作总结批量化注释批量化去注释简…

Windows自动化应用程序已启动/未启动,有进程无进程情况-拽起应用程序

问题分析: 应用程序能够自动登录, 可以打开后自动登录情况 我的处理方案是: 先通过 pywinauto打开应用程序, 然后,关闭前台 然后通过WinAppDriver去再次连接, 把应用置于前台 从而继续后面的元素定位 # 需要启动Hworkfrom pywinauto.application import Application# 启动Appli…

2024国赛数学建模A题B题C题D题E题思路资料模型

开始在本帖实时更新2024国赛数学建模赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续更新参考思路

写作积累之《三国演义》经典语录、第 1 集 《桃园三结义》(上)

前言 1994 年电视剧《三国演义》&#xff0c;由王扶林执导&#xff0c;中国古典名著巨献&#xff0c;八十四集电视连续剧 它作为一部经典的历史题材影视作品&#xff0c;不仅展现了三国时期的波澜壮阔、英雄辈出&#xff0c;更传递了许多对现代社会和个人成长都具有深远的启示…

Qt多语种开发教程

Qt作为跨平台的开发工具&#xff0c;早已应用到各行各业的软件开发中。 今天讲讲&#xff0c;Qt开发的正序怎么做多语言开发。就是说&#xff0c;你设置中文&#xff0c;就中文显示&#xff1b;设置英语就英文显示&#xff0c;设置繁体就繁体显示&#xff0c;设置发育就显示法语…

中国剩余定理和扩展中国剩余定理(模板)

给你一元线性同余方程组&#xff0c;如下&#xff1a; 其中&#xff0c;当 , , ... , 两两互质的话就是中国剩余定理 &#xff0c; 不互质的话就是扩展中国剩余定理。 给出中国剩余定理的计算过程和扩展中国剩余定理的推理过程&#xff1a; #include<bits/stdc.h> us…

让效率飞升的秘密武器

在当今高度竞争和信息密集的工作环境中&#xff0c;开发者的工作效率不仅仅取决于个人的编程能力&#xff0c;还依赖于所选择的编程工具。无论是智能的代码编辑器、强大的版本控制系统&#xff0c;还是自动化脚本和协作工具&#xff0c;它们都扮演着不可或缺的角色。如何正确选…

【秋招笔试】9.07滴滴秋招第一场改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集…

box64 安装

ARM运行x86程序 docker安装 box64 安装方法 docker run --name a001 -itd --networkhost -v /www/wwwroot/docker/Box64/f:/f ubuntu:22.04 /bin/bash docker exec -it a001 bash cd /home //创建目录qq547176052 mkdir -p qq547176052 cd /home/qq547176052 apt update apt …

WHAT - React 函数与 useMemo vs useCallback

目录 一、介绍useMemo 与 useCallback 的区别示例代码useMemo 示例useCallback 示例 总结 二、当一个函数被作为依赖项useMemo 和 useCallback 的适用情况选择使用 useCallback 或 useMemo总结实际例子 一、介绍 在 React 中&#xff0c;useMemo 和 useCallback 是两个用于性能…

新品上市丨科学级新款制冷相机sM4040A/sM4040B

sM4040B科学级显微制冷相机 特性 sM4040B搭载了 GSENSE4040BSI 3.2 英寸图像传感器&#xff0c;针对传感器固有的热噪声&#xff0c;专门设计了高效制冷模块&#xff0c;使得相机传感器的工作温度比环境温度低达 35-40 度。针对制冷相机常见的低温结雾现象设计了防结雾机制&a…

Notepad++ 下载安装教程

目录 1.下教程 2.安装教程 1.下教程 Downloads | Notepad (notepad-plus-plus.org) 进入下载地址后选择最新版点击连接 点击链接后&#xff0c;向下滑动&#xff0c;下载适合自己电脑版本的安装包 这里大家没有梯子可能打不开页面&#xff0c;可以直接从本文开头下载。 2.安…

阿里Java开发社会招聘面试题及参考答案

写一下修改库存的 SQL 语句 假设有一个商品库存表名为 product_inventory,包含字段 product_id(商品 ID)、quantity(库存数量)。 以下是一个简单的 SQL 语句示例,用于减少库存(假设购买一件商品): UPDATE product_inventory SET quantity = quantity - 1 WHERE produc…

实践reflex:以AI Chat APP为例

reflex demo 手册&#xff1a;Intro 以AI Chat APP为例 Interactive Tutorial: AI Chat App This tutorial will walk you through building an AI chat app with Reflex. This app is fairly complex, but dont worry - well break it down into small steps. You can find…

el-table 封装表格(完整代码-实时更新)

最新更新时间&#xff1a; 2024年9月6号 1. 添加行内编辑、表头搜索 <template><!-- 简单表格、多层表头、页码、没有合并列行 --><div class"maintenPublictable"element-loading-background"rgba(255,255,255,0.5)"><!--cell-sty…