在某OA中遇到了某些class文件被加密,但是在loadClass时会解密并定义class,调用的时候使用反射去调用,所以没办法调试。不过在调试时看到了这个OA解密方式,所以写了这个测试demo,并且解密后的jar能用于调试。
思路很简单,就是新建一个jar,遍历原jar包中的entry:
- 如果entry是目录,直接不做更改放到新jar
- 如果entry是.class且class内容的十六进制前四字节不为"CAFEBABE",那么就是被加密过的数据,使用对应的解密方式解密.class内容,然后put到新jar
- 如果entry是.class且class内容的十六进制前四字节为"CAFEBABE",直接put到新jar
- 其他内容直接put到新jar
具体操作可以看代码,很简单。如果知道怎么解密class,直接替换加密部分,其他地方套用就行了。项目中代码某些依赖没有加进去,代码无法直接运行,只能当个模板用。