查看: 865|回复: 0

[Java学习] java防反编译最简单的技巧分享

发表于 2017-10-2 07:51:26
句号论坛

前言

本文主要跟大家介绍了关于java防反编译的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

示例代码:

源码使用try-catch代码包装下,如下:

  1. public class CompileForbid {
  2. public static void main(String[] args) {
  3. try {
  4. System.out.println("-------");
  5. //防止反编译的处理
  6. if (654789 == new Random().nextInt()) {
  7. throw new Exception("fewt43");
  8. }
  9. } catch (Exception ex) {
  10. ex.printStackTrace();
  11. } finally {
  12. try {
  13. //防止反编译的处理
  14. if (654789 == new Random().nextInt()) {
  15. throw new Exception("fewt43");
  16. }
  17. } catch (Exception ex) {
  18. System.out.print(ex);
  19. }
  20. }
  21. }
  22. }
复制代码

使用 jd 反编译工具翻遍后的效果,别的反编译可能会反编译出来,效果不是很好,但是简单实用

  1. public class CompileForbid
  2. {
  3. // ERROR //
  4. public static void main(java.lang.String[] args)
  5. {
  6. // Byte code:
  7. // 0: getstatic 16 java/lang/System:out Ljava/io/PrintStream;
  8. // 3: ldc 22
  9. // 5: invokevirtual 24 java/io/PrintStream:println (Ljava/lang/String;)V
  10. // 8: ldc 30
  11. // 10: new 31 java/util/Random
  12. // 13: dup
  13. // 14: invokespecial 33 java/util/Random:<init> ()V
  14. // 17: invokevirtual 34 java/util/Random:nextInt ()I
  15. // 20: if_icmpne +90 -> 110
  16. // 23: new 38 java/lang/Exception
  17. // 26: dup
  18. // 27: ldc 40
  19. // 29: invokespecial 42 java/lang/Exception:<init> (Ljava/lang/String;)V
  20. // 32: athrow
  21. // 33: astore_1
  22. // 34: aload_1
  23. // 35: invokevirtual 44 java/lang/Exception:printStackTrace ()V
  24. // 38: ldc 30
  25. // 40: new 31 java/util/Random
  26. // 43: dup
  27. // 44: invokespecial 33 java/util/Random:<init> ()V
  28. // 47: invokevirtual 34 java/util/Random:nextInt ()I
  29. // 50: if_icmpne +93 -> 143
  30. // 53: new 38 java/lang/Exception
  31. // 56: dup
  32. // 57: ldc 40
  33. // 59: invokespecial 42 java/lang/Exception:<init> (Ljava/lang/String;)V
  34. // 62: athrow
  35. // 63: astore_3
  36. // 64: getstatic 16 java/lang/System:out Ljava/io/PrintStream;
  37. // 67: aload_3
  38. // 68: invokevirtual 47 java/io/PrintStream:print (Ljava/lang/Object;)V
  39. // 71: goto +72 -> 143
  40. // 74: astore_2
  41. // 75: ldc 30
  42. // 77: new 31 java/util/Random
  43. // 80: dup
  44. // 81: invokespecial 33 java/util/Random:<init> ()V
  45. // 84: invokevirtual 34 java/util/Random:nextInt ()I
  46. // 87: if_icmpne +21 -> 108
  47. // 90: new 38 java/lang/Exception
  48. // 93: dup
  49. // 94: ldc 40
  50. // 96: invokespecial 42 java/lang/Exception:<init> (Ljava/lang/String;)V
  51. // 99: athrow
  52. // 100: astore_3
  53. // 101: getstatic 16 java/lang/System:out Ljava/io/PrintStream;
  54. // 104: aload_3
  55. // 105: invokevirtual 47 java/io/PrintStream:print (Ljava/lang/Object;)V
  56. // 108: aload_2
  57. // 109: athrow
  58. // 110: ldc 30
  59. // 112: new 31 java/util/Random
  60. // 115: dup
  61. // 116: invokespecial 33 java/util/Random:<init> ()V
  62. // 119: invokevirtual 34 java/util/Random:nextInt ()I
  63. // 122: if_icmpne +21 -> 143
  64. // 125: new 38 java/lang/Exception
  65. // 128: dup
  66. // 129: ldc 40
  67. // 131: invokespecial 42 java/lang/Exception:<init> (Ljava/lang/String;)V
  68. // 134: athrow
  69. // 135: astore_3
  70. // 136: getstatic 16 java/lang/System:out Ljava/io/PrintStream;
  71. // 139: aload_3
  72. // 140: invokevirtual 47 java/io/PrintStream:print (Ljava/lang/Object;)V
  73. // 143: return
  74. //
  75. // Exception table:
  76. // from to target type
  77. // 0 33 33 java/lang/Exception
  78. // 38 63 63 java/lang/Exception
  79. // 0 38 74 finally
  80. // 75 100 100 java/lang/Exception
  81. // 110 135 135 java/lang/Exception
  82. }
  83. }
复制代码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对程序员之家的支持。



太阳http代理AD
回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条