直奔主题
看了一篇大佬用注册机方式激活的文章,奈何我已经清空了试用授权,激活码不好找,多少有点局限性
https://linux.do/t/topic/64175
那就用 ja 写个插件吧
/**
* @author yelochick
*/
public class SmartInputTransformer implements MyTransformer {
@Override
public String getHookClassName() {
return "com/xxxtai/smartinputintellij/model/LicenseInfo";
}
@Override
public byte[] transform(String className, byte[] classBytes, int order) throws Exception {
ClassReader reader = new ClassReader(classBytes);
ClassNode node = new ClassNode(ASM5);
reader.accept(node, 0);
for (MethodNode m : node.methods) {
if ("enableLicense".equals(m.name)) {
InsnList list = new InsnList();
list.add(new LdcInsnNode(""));
list.add(new VarInsnNode(ALOAD, 1));
list.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false));
LabelNode labelNode = new LabelNode();
list.add(new JumpInsnNode(IFNE, labelNode));
list.add(new VarInsnNode(ALOAD, 0));
list.add(new VarInsnNode(ALOAD, 1));
list.add(new FieldInsnNode(PUTFIELD, "com/xxxtai/smartinputintellij/model/LicenseInfo", "license", "Ljava/lang/String;"));
list.add(new VarInsnNode(ALOAD, 0));
list.add(new LdcInsnNode(4102415999000L));
list.add(new MethodInsnNode(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false));
list.add(new FieldInsnNode(PUTFIELD, "com/xxxtai/smartinputintellij/model/LicenseInfo", "expireTimestamp", "Ljava/lang/Long;"));
list.add(new InsnNode(ICONST_1));
list.add(new InsnNode(IRETURN));
list.add(labelNode);
m.instructions.insert(list);
} else if ("isOffline".equals(m.name)) {
m.instructions.clear();
InsnList list = new InsnList();
list.add(new InsnNode(ICONST_1));
list.add(new InsnNode(IRETURN));
m.instructions.insert(list);
}
}
SafeClassWriter writer = new SafeClassWriter(null, null, ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
node.accept(writer);
return writer.toByteArray();
}
}
- 任意激活码激活
- 屏蔽了在线激活(跳浏览器让扫码付款)
写到最后
思考一下,你的 ctrl + 空格 值不值 59.9(一台PC哦)?
20240427 更新
经过一天的反编译DLL,得知License是有签名的,切换输入法都会验证License签名,但由于没有私钥,所以无法自行生成License,这也是意料之中,目前没有更好的办法。
目前官方开放免费了,能用则用吧。