Mar*_*tin 11 java apt annotations
我从apt工具页面读到,可以创建AnnotationProcessors来生成新的派生文件(源文件,类文件,部署描述符等).我正在寻找这样做的例子.
我需要在编译时对所有带注释的字符串进行编码,以便读取类文件不允许读取静态字符串:
基本代码:
String message = (@Obfuscated "a string that should not be readable in class file");
Run Code Online (Sandbox Code Playgroud)
应该重新修改为:
String message = new ObfuscatedString(new long[] {0x86DD4DBB5166C13DL, 0x4C79B1CDC313AE09L, 0x1A353051DAF6463BL}).toString();
Run Code Online (Sandbox Code Playgroud)
基于ObfuscatedString.obfuscate(String)TrueLicense框架的静态方法,处理器可以生成代码以替换带注释的字符串.实际上,这个方法生成字符串"new ObfuscatedString([numeric_code]).toString()".在运行时,ObfuscatedString的toString()方法能够返回在数字代码中编码的字符串.
关于如何编写AnnotationProcessor的process()方法来编辑带注释的代码的任何想法?
提前致谢,
你可以有
String message = Obfuscated.decode("a string that should not be readable in class file");
Run Code Online (Sandbox Code Playgroud)
它可以正常编译,但是编译后您有一个工具可以检查字节码,例如使用 ObjectWeb 的 ASM,更改字符串文字,使其看起来像
String message = Obfuscated.decode("\u86DD\u4DBB\u5166\uC13D\u4C79\uB1CD\uC313\uAE09\u1A35\u3051\uDAF6\u463B");
Run Code Online (Sandbox Code Playgroud)
为了更容易地识别需要更改的字符串,您可以为其添加前缀,并且可以确保在代码混淆后该前缀确实出现。
String s = "Obfuscate: a string that should not be readable in class file";
// later
String message = Obfuscated.decode(s);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2647 次 |
| 最近记录: |