Guest User

Untitled

a guest
Jul 18th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. //server sends to proxy
  2. public ByteBuffer decryptServerGame(ByteBuffer packet, boolean first) {
  3.  
  4. try {
  5.  
  6. if(first) { // first packet, server sends to proxy
  7. Cipher cii = Cipher.getInstance("Blowfish/CFB64/NoPadding");
  8. Key key = new SecretKeySpec(STATIC_KEY.getBytes("ASCII"), "Blowfish");
  9. cii.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(" ".getBytes()));
  10. ByteBuffer bb = ByteBuffer.wrap(cii.doFinal(packet.array())).order(ByteOrder.LITTLE_ENDIAN);
  11.  
  12. int len = bb.getInt(11);
  13. int junkLen = bb.getInt(15);
  14. int index = 19 + junkLen;
  15. byte[] serverIV = new byte[bb.getInt(index)];
  16. index+=4;
  17. System.arraycopy(bb.array(), index, serverIV, 0, serverIV.length);
  18. index+=serverIV.length;
  19. byte[] clientIV = new byte[bb.getInt(index)];
  20. index+=4;
  21. System.arraycopy(bb.array(), index, clientIV, 0, clientIV.length);
  22. index+=clientIV.length;
  23. int strLen = bb.getInt(index);
  24. index+=4;
  25. String p = new String(bb.array(), index, strLen);
  26. index+=strLen;
  27. strLen = bb.getInt(index);
  28. index+=4;
  29. String g = new String(bb.array(), index, strLen);
  30. index+=strLen;
  31. strLen = bb.getInt(index);
  32. index+=4;
  33. String pubKey = new String(bb.array(), index, strLen);
  34.  
  35. exchange.serverPubKey= new BigInteger(pubKey, 16);
  36. exchange.serverIV = serverIV;
  37. exchange.clientIV = clientIV;
  38. exchange.p512 = new BigInteger(p, 16);
  39. exchange.g512 = new BigInteger(g, 16);
  40. System.out.println("Client IV Len: " + clientIV.length);
  41. System.out.println("Server IV Len: " + serverIV.length);
  42. System.out.println("Key Len: " + pubKey.length());
  43.  
  44. bb.put(exchange.clientKeyPair.getPublic().getEncoded(), index, exchange.clientKeyPair.getPublic().getEncoded().length);
  45.  
  46.  
  47. cii.init(Cipher.ENCRYPT_MODE, key);
  48. return ByteBuffer.wrap(cii.doFinal(bb.array())); // encrypt it and send it back.
  49.  
  50. } else {
  51.  
  52. }
  53.  
  54.  
  55. } catch(Exception e) {
  56. e.printStackTrace();
  57. }
  58. return packet;
  59.  
  60. }
  61.  
  62. // client sends to proxy
  63. public ByteBuffer decryptClientGame(ByteBuffer packet, boolean first) {
  64. try {
  65.  
  66.  
  67. if(first) { // first packet, client sends to proxy.
  68. Cipher cii = Cipher.getInstance("Blowfish/CFB64/NoPadding");
  69. Key key = new SecretKeySpec(STATIC_KEY.getBytes("ASCII"), "Blowfish");
  70. cii.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(" ".getBytes()));
  71. ByteBuffer bb = ByteBuffer.wrap(cii.doFinal(packet.array())).order(ByteOrder.LITTLE_ENDIAN);
  72. int len = bb.getInt(7);
  73. int junkLen = bb.getInt(11);
  74. int index = 15 + junkLen;
  75. int strLen = bb.getInt(index);
  76. index+=4;
  77. String p = new String(bb.array(), index, strLen);
  78. exchange.clientPubKey= new BigInteger(p, 16);
  79. System.out.println("Client Key len: " + p.length());
  80.  
  81.  
  82. KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
  83.  
  84. DHParameterSpec dhSpec = new DHParameterSpec(exchange.p512, exchange.g512);
  85.  
  86. keyGen.initialize(dhSpec, new SecureRandom());
  87.  
  88. KeyAgreement serverKeyAgree = KeyAgreement.getInstance("DH");
  89. KeyAgreement clientKeyAgree = KeyAgreement.getInstance("DH");
  90.  
  91. keyGen = KeyPairGenerator.getInstance("DH"); // new instance, just incase.
  92.  
  93. exchange.serverKeyPair = keyGen.generateKeyPair();
  94. exchange.clientKeyPair = keyGen.generateKeyPair();
  95.  
  96.  
  97. KeyFactory k = KeyFactory.getInstance("DH");
  98. serverKeyAgree.init(exchange.serverKeyPair.getPrivate());
  99. clientKeyAgree.init(exchange.clientKeyPair.getPrivate());
  100.  
  101. serverKeyAgree.doPhase(new SecretKeySpec(exchange.serverPubKey.toByteArray(), "DH"), true);
  102. clientKeyAgree.doPhase(new SecretKeySpec(exchange.clientPubKey.toByteArray(), "DH"), true);
  103. exchange.serverSecretKey = serverKeyAgree.generateSecret("DH");
  104. exchange.clientSecretKey = clientKeyAgree.generateSecret("DH");
  105.  
  106. // replacing the key in the packet, with the new one.
  107. bb.put(exchange.serverKeyPair.getPublic().getEncoded(), index, exchange.serverKeyPair.getPublic().getEncoded().length);
  108.  
  109.  
  110.  
  111. cii.init(Cipher.ENCRYPT_MODE, key);
  112. return ByteBuffer.wrap(cii.doFinal(bb.array()));
  113.  
  114. } else {
  115.  
  116. }
  117.  
  118.  
  119. } catch(Exception e) {
  120. e.printStackTrace();
  121. }
  122. return packet;
  123. }
Add Comment
Please, Sign In to add comment