squareTest是一款非常优秀的java单元测试生成插件,众所周知,idea的插件基本都是用java写的,那么对于java程序员来说就可以非常容易对其进行逆向研究,通过修改反编译后的字节码来达成间接修改源码的目的,例如跳过激活步骤…(当然有能力还是尽量支持正版)
squaretest官方购买地址
本文研究使用版本是最新的 squareTest 1.8.7
1.反编译插件jar包
idea 插件默认存放目录为 C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea 你的idea版本\plugins
SquareTest的jar包为
1
| C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea2023.3\plugins\Squaretest\lib\instrumented-TestStarter-1.8.7.jar
|
解压后,用IDEA 打开项目
可以看到,代码是有混淆的。
2.定位激活代码
从UI界面入手
全局搜索校验按钮Validate and Save
然后一步步查找调用,最终定位到公钥位置在com.squaretest.c包的q对象下
既然找到了公钥的存放地址,那么生成一个公钥替换即可完成激活。
3 生成公钥替
验签算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public static void main(String[] args) throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keys = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keys.getPublic(); System.out.println("公钥:"+Base64.getEncoder().encodeToString(publicKey.getEncoded())); PrivateKey privateKey = keys.getPrivate(); System.out.println("私钥:"+Base64.getEncoder().encodeToString(privateKey.getEncoded())); Signature sig = Signature.getInstance("SHA256withDSA", "SUN"); sig.initSign(privateKey); String clearText = "SQT1-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n" + "SQT1-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n" + "SQT1-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"; sig.update(clearText.getBytes(StandardCharsets.UTF_8)); byte[] signature = sig.sign(); System.out.println("签名:"+Base64.getEncoder().encodeToString(signature)); sig.initVerify(publicKey); sig.update(clearText.getBytes(StandardCharsets.UTF_8)); boolean verify = sig.verify(signature); System.out.println("校验:"+verify); }
运行结果: 公钥:MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IBBQACggEACWm771QQO2uUh4tC9Y4xTQ9UN+ip/11Lpm6iCdPbRStnnonjaz2Liktweg/cISaQctMzpS24KecCHlGE9JJI41hT9bL9tSDr7pJuYdjLBa9oHiTf7fo8xcYL79W0yIEGT0RfI90g/ruTgBraQKgKqkq8lxA0EeafN+F8bLs5JCyjOsqya05K7k1NH9yFwwOJq3BaDk1ZdtOBYPHW3bVu9jY18kqiFnhPFfpEEKt0nvduDRO7gsAWwwPX8pN4AJcXqQ/JWVeye7FsUiL9AeybOvslHpO7vR43JnNLzopkyByu9AWABgw7gb6YXIcm2CTh0DnHXKUGJvQwbS5w5RrEDA== 私钥:MIICXQIBADCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6NHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veBB8CHQCjGsN7Jath4Gc9aKWF9AvXVy30UD0ug7/PPFXG 签名:MDwCHD/aj6q/ajidBmVUCISdbwhaL+LVWLdFQUeNe1ICHDa2cW0hXXWUyiIGp+eDdj6z3W44mbxz5pNYofU= 校验:true
|
4.替换class文件
替换q.class文件中的公钥变量,可以使用jclasslib
插件即可
找到公钥穿对应的字符串常量,点击编辑,替换为上述方法生成的公钥,保存退出。
将修改过的class替换回jar包后,重启idea。进入激活页面,输入激活码即可完成激活
1 2 3 4 5 6
| --- BEGIN SQUARETEST LICENSE --- SQT1-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA SQT1-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA SQT1-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA MDwCHD/aj6q/ajidBmVUCISdbwhaL+LVWLdFQUeNe1ICHDa2cW0hXXWUyiIGp+eDdj6z3W44mbxz5pNYofU= --- END SQUARETEST LICENSE ---
|