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

2024-09-08 12:36

本文主要是介绍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

这篇关于ja-netfilter的前世今生和非对称加密的欺骗原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148131

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

Smarty模板执行原理

为了实现程序的业务逻辑和内容表现页面的分离从而提高开发速度,php 引入了模板引擎的概念,php 模板引擎里面最流行的可以说是smarty了,smarty因其功能强大而且速度快而被广大php web开发者所认可。本文将记录一下smarty模板引擎的工作执行原理,算是加深一下理解。 其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl