Smart Input插件激活原理【仅支持windows】

那个每次重启IDE确实都要重新输入激活码,但是不重要,我可以一直不重启,
但我的意思就是每次激活的时候,自己生成的验证码,虽然显示激活了,也能看到光标会自动变色,但实际打字的时候还是原来的输入法,不会切换
换成在线生成的那个,激活了才是真的激活了,能自动切输入法
我测试是这样的

我在研究一下吧,我看他是调用了dll,可能这里面做了校验 :thinking:

:woman:t6:niubi

期待最新进展

public class SmartInputTransformer implements MyTransformer {
    @Override
    public String getHookClassName() {
        return "com/xxxtai/smartinputintellij/model/LicenseInfo";
    }

    @Override
    public byte[] transform(ClassLoader loader, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, String className, byte[] classBytes, int order) throws Exception {

        ClassNode classNode = new ClassNode();
        ClassReader classReader = new ClassReader(classBytes);
        classReader.accept(classNode, 0);

        for (MethodNode method : classNode.methods) {
            if ("enableLicense".equals(method.name)) {
                InsnList insnList = new InsnList();
                insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); 
                insnList.add(new VarInsnNode(Opcodes.ALOAD, 1)); 
                insnList.add(new FieldInsnNode(Opcodes.PUTFIELD, "com/xxxtai/smartinputintellij/model/LicenseInfo", "license", "Ljava/lang/String;")); // this.license = $1
                insnList.add(new LdcInsnNode("1737809108000")); 
                insnList.add(new MethodInsnNode(
                        Opcodes.INVOKESTATIC,
                        "java/lang/Long",
                        "valueOf",
                        "(Ljava/lang/String;)Ljava/lang/Long;",
                        false)); 
                insnList.add(new VarInsnNode(Opcodes.ALOAD, 0)); 
                insnList.add(new InsnNode(Opcodes.SWAP)); 
                insnList.add(new FieldInsnNode(Opcodes.PUTFIELD, "com/xxxtai/smartinputintellij/model/LicenseInfo", "expireTimestamp", "Ljava/lang/Long;")); // this.expireTimestamp = Long.valueOf("1737809108000")
                insnList.add(new InsnNode(Opcodes.ICONST_1)); 
                insnList.add(new InsnNode(Opcodes.IRETURN)); 
                method.instructions.insertBefore(method.instructions.getFirst(), insnList);
            }
        }

        ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
        classNode.accept(classWriter);
        return classWriter.toByteArray();
    }
}

能激活的demo,直接爆破 :sweat_smile:

这串是签名,是对 iv 和 cipherText 拼接的base64进行 SHA256withRSA 签名的

1 个赞

大佬:cow:,dll用的什么反编译的

IDA_Pro
没私钥签不了名,除非暴力修改dll替换公钥

我想如果动不了dll,是不是可以用ja-netfilter的native插件做一些事呢?

1 个赞

大佬牛逼,不过这个小小插件居然收费估计要被骂死!果然是国人做的,就知道收割韭菜!吃相难看

已经卸载了,正好也遇到了bug,不知道为啥我光标在大写字母中间切换到微信,然后微信聊天框的输入法被切成了大写

为啥我goland没出现过你们说的激活码界面?一直在用

由于切换输入法是在dll完成的,每次切换输入法操作都会校验license,估计native插件也无用武之地

2 个赞

恩,重要逻辑也在dll里确实native无力处理。

直接替换dll里面密钥对

1 个赞

666666真是潇洒

1 个赞

更新了 @dcos @buslngq @urzeye @rookie_l

1 个赞

不愧是破解一哥

????

天空飘来五个字: “哥们真不会破解”