Smart Input Pro 高级功能,哈哈哈(附Python版本注册机)

我觉得高级功能拆得还不够细,应该这样拆

Java文件自动切换输入法
JS文件自动切换输入法
CSS文件自动切换输入法
Go文件自动切换输入法
Python文件自动切换输入法
。。。。。。。。。。。。。。。。无穷无尽生生不息

是不是一下子丰富起来了,才能卖个好价钱 :slightly_smiling_face:

注册机 Python版本

原理:
https://linux.do/t/topic/64175
https://linux.do/t/topic/202681

安装依赖

pip install cryptography pycryptodome
import base64
import random
import string
import time

from Crypto.Cipher import AES
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import (
    Encoding,
    PrivateFormat,
    PublicFormat,
    NoEncryption, load_pem_private_key, load_pem_public_key
)

smart_input_public_key_pem = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0+LewWdwP5+D7izKjBZ2
SZiwcbJroRayDLLuOu+LUJcjewYyRUIi3APfPwwQROEYBNFbqoNeWS3ltCmHypoD
C/kEzxFd+9DQqAl7eoJsWHZ9cZKZetICLttUTUZhYJpJXHfaVdvWu9JX4SuuDB4k
+vzrQOwC1qXydo89CF5zIcIuPniH4GXFJlWbLJztwsDZuHMd/5B56nhC3RXpIF6X
ftqHEKml3LnD+dzvuVCMKwIQGv9BHRCuifBQMOIenvve3XtPwxeH83evyIIU/4fY
kriFIXg1nBtJxMaXoHnw9Y7KfaS1NWHmBSLM5PfcN1Eh4PCgtQzL6RYY7bRjCau8
pQIDAQAB
-----END PUBLIC KEY-----"""

private_key_pem = """-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyH7xJSGtG2y+t
kv1qU5ws8fEmQavV1I3LRDgTrToj7uefl6Xgzapj85eSZtuEg5ustMLYhBnPPeRv
iu+jHH70IX+95ODnBsiYdzlhNDocZHMAbqTTuEjS+4mej/1+ZUiAtN2ofKN6i/fV
bDVy7vDBXUZExHIocDLgY2poRsNC9Tu3j0m7M4GKE+g6trsHEQyi/IrHh+5UeXkS
7EjihzS0WCBcbY9CvZbU3VCkei7GU7a95MordY9RN4jrsS0kVLrIjHY/NSJWwksw
dkGYCLE0FQejamw84yJgOLmaE9PZD3iY2S1VtMnsfcsvtiB31k4AOUtHXWTBDmQZ
Y85Z1KKLAgMBAAECggEAQenbd3TMecpnQMBZdUyeSMV4+rKnfzeqBtNmOuXJ0303
CggIcoE4scb0ylC0n7tB0q2LQqrTkCxziVEs7zt+wSFaT29QSD1q4nyP56f3bwU+
xySqasxRan15Rgs7f1fEdhg3w/7nUdRUsA3cU30W6z70X0MgiVVHhmBTgmXZIL/X
ovQ0Bz7TKtZzDN+EpojgsAS2IV8Vz2Crof8q999yUbhiTmwIXcSnSN4LALmxDd+K
KmUPF+foAu3cII/ZiDlzclBHYOq3z2IDZCIT7cfgSuWVtXU14N8SGkpfVR8EHftW
6Q7MD4qjIfjjM5MHNFdQ64HF4awEre9bBlms06DgYQKBgQDd1G/MYoZSVsnCSNql
PUexOdgu2qw79L9MYlMswPq7AG5lncQ8lMzlBYHs5WmHblOMyJIZFxyHK9a2sPJP
EVgiFqLY3vrZ7J2Q1q8WwjLCVGYjmpmRn+4CZ+GY+vaqNma4FzQ8bIUEcdZjGY1+
e/GGd3WVjOQ70q73nYvCQ6/IIQKBgQDNj9D9YZkQwqEFOQ89TeJ3sl14lCih8vlI
pqq9JbVuS5MrarNHkOfVC71JrOQJHPm6xapVW70DqVMr8N0xqq69ECOElpXDs/Ks
bPwsgoo6yOImWjQtc2orrZ6fS0+g6zNoJJBsk6IN+3AAV5UqxqCsoPT4icjZXDKP
nLPq0jllKwKBgQC8+hhP/vM9PBBfgh86O81Sjtu7drDZ1vQNR4piCvjOzFxAFzow
/fbbeGip/vp61KM6wTetRkIYaWFee7nBYB471BrhNHxxoKDO3gWFFuWVJb9pv2/q
XluuEv9eixYOBZBWbfYjL7PWCIDCJeejhEVK74PtZnyc9iv2aHHCilU64QKBgArG
+4INV+UVDzQi5bWlG7aC13u26Np0zrUMZ+86xuRdef3Qvk2GP2FgGDCArAP+TOmJ
64BGKwbCHeYz3qT3+elXq0UMUBXOnW6E2EPNJEoothKksA+h+XMIy0Q2wpoBOtS+
9gN7SgfJovmhneR8PXhPiAhv0OP0fYIiCRzKoM+5AoGBAMsurWbhAwdTfyZyqLGN
CtHNHF5YgfDt7IM0vwzhXF9NEdTJfWmfRA2vpnegF3Lkouwi6aevbEti8+H/lRUL
BLvn2Be7sOyZPIeuHaLVl3wi7XpqclLxkOyw5RJzsx0lKq/1q9s/WCv44ZCvIKU1
Vak4GZ72VMlpXY791VtJC7gs
-----END PRIVATE KEY-----"""

public_key_pem = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh+8SUhrRtsvrZL9alOc
LPHxJkGr1dSNy0Q4E606I+7nn5el4M2qY/OXkmbbhIObrLTC2IQZzz3kb4rvoxx+
9CF/veTg5wbImHc5YTQ6HGRzAG6k07hI0vuJno/9fmVIgLTdqHyjeov31Ww1cu7w
wV1GRMRyKHAy4GNqaEbDQvU7t49JuzOBihPoOra7BxEMovyKx4fuVHl5EuxI4oc0
tFggXG2PQr2W1N1QpHouxlO2veTKK3WPUTeI67EtJFS6yIx2PzUiVsJLMHZBmAix
NBUHo2psPOMiYDi5mhPT2Q94mNktVbTJ7H3LL7Ygd9ZOADlLR11kwQ5kGWPOWdSi
iwIDAQAB
-----END PUBLIC KEY-----"""


def gen_keypair():
    # 生成私钥
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
    )
    # 从私钥导出公钥
    public_key = private_key.public_key()
    # 将私钥保存到文件
    pem = private_key.private_bytes(
        encoding=Encoding.PEM,
        format=PrivateFormat.PKCS8,
        encryption_algorithm=NoEncryption()
    )
    # with open('private_key.pem', 'wb') as f:
    #     f.write(pem)
    # 将公钥保存到文件
    pem = public_key.public_bytes(
        encoding=Encoding.PEM,
        format=PublicFormat.SubjectPublicKeyInfo
    )
    # with open('public_key.pem', 'wb') as f:
    #     f.write(pem)


def power_conf():
    smart_input_public_key = load_pem_public_key(smart_input_public_key_pem.encode(encoding='utf-8'))
    smart_input_n = smart_input_public_key.public_numbers().n
    public_key = load_pem_public_key(public_key_pem.encode(encoding='utf-8'))
    n = public_key.public_numbers().n
    print(';SmartInputPro start')
    print('[Args]')
    print(f'EQUAL,65537,{smart_input_n}->65537,{n}')
    print(';SmartInputPro end')


class Keygen:
    def __init__(self, expire_time, username, uuid):
        self.expire_time = expire_time
        self.username = username
        self.uuid = uuid

    def generate_license(self):
        t = time.strptime(self.expire_time, '%Y-%m-%d %H:%M:%S')
        expire_timestamp = int(time.mktime(t))
        pad = self.pad_username(self.username)
        license_str = f'{expire_timestamp}IJ@@@{pad}{self.uuid}'
        aes_key = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
        aes_iv = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16))
        return self.encrypt(aes_key, aes_iv, license_str)

    @staticmethod
    def pad_username(username):
        username_len = len(username)
        padding_len = 40 - username_len
        if padding_len <= 0:
            return username
        else:
            return username + '@' * padding_len

    @staticmethod
    def encrypt(aes_key, aes_iv, plaintext):
        cipher = AES.new(aes_key.encode(encoding='utf-8'), AES.MODE_CBC, aes_iv.encode(encoding='utf-8'))
        x = 16 - len(plaintext) % 16
        if x > 0:
            # 填充
            plaintext = plaintext + x * chr(x)
        cipher_bytes = cipher.encrypt(plaintext.encode(encoding='utf-8'))
        iv_and_cipher = aes_iv.encode(encoding='utf-8') + cipher_bytes
        iv_and_cipher_b64_bytes = base64.b64encode(iv_and_cipher)
        len_str = f'{len(iv_and_cipher_b64_bytes):06X}'
        encrypted_str = aes_key + len_str + iv_and_cipher_b64_bytes.decode(encoding='utf-8')
        # 使用私钥进行签名
        private_key = load_pem_private_key(private_key_pem.encode(encoding='utf-8'), None)
        signature = private_key.sign(
            iv_and_cipher_b64_bytes,
            padding.PKCS1v15(),
            hashes.SHA256()
        )
        signature_base64 = base64.b64encode(signature).decode(encoding='utf-8')
        return encrypted_str + signature_base64


def main():
    # 获取控制台输入
    print('请输入系统信息: ', end='')
    sys_info = input()
    split = sys_info.split(';')
    uuid, username = split[0], split[1]
    gen_lic = Keygen('2099-12-31 00:00:00', username, uuid).generate_license()
    print('----------- power.conf 配置 -----------')
    power_conf()
    print()
    print('----------- 激活码(填入时注意末尾不要换行) -----------')
    print(gen_lic)


if __name__ == '__main__':
    main()

复制系统信息,运行脚本,填入系统信息

ja-netfilter 的 url 插件配置

PREFIX,https://xiaolvpuzi.cn

ja-netfilter 的 power 插件配置

激活成功

80 Likes

自动切输入法,挺新颖的。以前还真没关注过。

2 Likes

不是说免费了吗

12 Likes

是哪个神人想出来的赚钱小妙招

4 Likes

按耐不住那寂寞的心 :slightly_smiling_face:

3 Likes

这个应该好破解把

2 Likes

不怎么好破,dll里校验license的,需要暴力替换公钥,你可以翻看以前的贴子

1 Like

Smart Input 还能用一段时间

5 Likes

哈哈哈哈,之前突然收费被喷惨了。吃相难看

2 Likes

啊?这也能拆开?

2 Likes

这种我现在觉得gpt写一个也很容易了。。。

2 Likes

那就破了它 :joy:

2 Likes

弄个永久激活的注入进去,是不是就可以

这个说明的地址有吗?我去看看

https://xiaolvpuzi.cn/docs/smart-input-pro-doc.html#/other/user-benefits

2 Likes

我记得有其它免费的工具呀?我还用过一段时间


找到了:

3 Likes

之前有个佬的贴子,你可以看一下,是把jar包里的dll的公钥替换了实现的。这个插件工作原理是jni通过dll调用操作系统输入法接口实现的,每次切换都会校验一下license

IMG_2129
用上了

2 Likes

主要还是用vim模式的自动切换, 竟然收费了
image

1 Like

旧版本支持vim模式下切换吗

1 Like