Brandan

Untitled

Jul 1st, 2012
162
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. class JavaFDS {
  5.  
  6. byte[] message5 = new byte[20];
  7.  
  8. private String password;
  9. private byte[] result;
  10. private byte[] receiveData;
  11. private String message;
  12. private DatagramSocket clientSocket;
  13. private InetAddress IPAdress;
  14. private int port;
  15. private DatagramPacket sendPacket,receivePacket;
  16.    
  17.     public void connectFDS(String password, int port) throws Exception
  18.     {
  19.         this.password = password;
  20.         message = password;
  21.         this.port = port;
  22.         encrypt2();
  23.        
  24.         clientSocket = new DatagramSocket();
  25.         IPAdress = InetAddress.getByName("loopback");
  26.         receiveData = new byte[1024];
  27.        
  28.         sendPacket = new DatagramPacket(result,result.length,IPAdress,port);
  29.         clientSocket.send(sendPacket);
  30.         //receivePacket = new DatagramPacket(receiveData,receiveData.length);
  31.         //clientSocket.receive(receivePacket);
  32.         //decrypt2();
  33.         //Connection1.sendMsg("PRIVMSG " + Connection1.chan + " " + message);
  34.         //System.out.println(byteToInt(receiveData[1]));
  35.         return;
  36.     }
  37.     public void sendMsg(String message) throws Exception
  38.     {
  39.         this.message = message;
  40.         encrypt2();
  41.        
  42.         receiveData = new byte[1024];
  43.         sendPacket = new DatagramPacket(result,result.length,IPAdress,port);
  44.         clientSocket.send(sendPacket);
  45.         //receivePacket = new DatagramPacket(receiveData,receiveData.length);
  46.         //clientSocket.receive(receivePacket);
  47.         //modifiedSentence = new String(receivePacket.getData());
  48.         //System.out.println(byteToInt(receiveData[1]));
  49.         //decrypt2();
  50.         //decrypt2();
  51.         //shutdown();
  52.         //return this.message;
  53.         return;
  54.     }
  55.     public void shutdown() throws Exception
  56.     {
  57.         clientSocket.close();
  58.     }
  59.  
  60.  
  61. // ****************
  62. // Internal functions
  63. // ****************
  64.    
  65.  
  66. // Encrypt the variable "message" and stock the encryption into the variable "result"
  67.  
  68. private void decrypt2() throws Exception {
  69.     int l=1023;
  70.     while(byteToInt(receiveData[l])==0)
  71.         l--;
  72.     //System.out.println(l);
  73.     while (l%4 != 0)
  74.             l++;
  75.     byte[] dmessage = new byte[l+1];
  76.     for(int i=0;i<l+1;i++)
  77.         dmessage[i] = receiveData[i];
  78.    
  79.     //System.out.println(dmessage[0]);
  80.    
  81.     byte ESI;
  82.         byte[] ECX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
  83.         byte[] EDX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
  84.         byte[] EBX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01};
  85.         byte[] EAX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
  86.        
  87.         String shortpass;
  88.         if (password.length()>=8)
  89.             shortpass = password.substring(0,8);
  90.         else
  91.             return;
  92.         byte[] bpass = new byte[8];
  93.         bpass = shortpass.getBytes();
  94.    
  95.     for(int i=4;i<l+1;i++)
  96.     {
  97.         EDX[3] = dmessage[i];
  98.         mov(ECX,EAX);
  99.         ECX[3] = (byte) (ECX[3] & (byte)0x07);
  100.         ECX[0]=(byte)0x00;
  101.         ECX[1]=(byte)0x00;
  102.         ECX[2]=(byte)0x00;
  103.         ESI = ECX[3];
  104.         ECX[3] = bpass[byteToInt(ECX[3])];
  105.         ECX[3] = (byte)(ECX[3] ^ EDX[3]);
  106.         EDX[3] = ECX[3];
  107.         bpass[(int)ESI] = ECX[3];
  108.         EDX[3] = (byte)(EDX[3] + ~EAX[3] + (byte)0x01);
  109.         EDX[3] = (byte)(EDX[3] + (byte)0x32);
  110.         dmessage[i] = EDX[3];
  111.         add(EAX,EBX);      
  112.     }
  113.    
  114.     for(int i=0;i<l+1;i++)
  115.     {
  116.         if(byteToInt(dmessage[i]) == 10)
  117.             dmessage[i]=(byte)0x20;
  118.             }
  119.        
  120.     byte[] dmessage2 = new byte[l+1-8];
  121.     for(int i=0;i<l+1-8;i++)
  122.         dmessage2[i] = dmessage[i+8];
  123.        
  124.     byte[] dmessage3 = new byte[l+1-11];
  125.     for(int i=0;i<l+1-11;i++)
  126.         dmessage3[i] = dmessage2[i];
  127.     String tze = new String( dmessage3 , "Cp1252" );
  128.     this.message=tze;
  129.     //System.out.println(message);
  130.    
  131.    
  132. }
  133.  
  134. private void encrypt2() throws Exception
  135.     {
  136.         int l = this.message.length();
  137.         byte[] bmessage = new byte[l];
  138.         bmessage = this.message.getBytes();
  139.        
  140.         String shortpass;
  141.         if (password.length()>=8)
  142.             shortpass = password.substring(0,8);
  143.         else
  144.             return;
  145.         byte[] bpass = new byte[8];
  146.         bpass = shortpass.getBytes();
  147.        
  148.         l=l+9;
  149.         while (l%4 != 0)
  150.             l++;
  151.         result = new byte[l];
  152.        
  153.         // Initialisation
  154.        
  155.         for(int i=0;i<l;i++)
  156.         {
  157.             if(i<8)
  158.             {
  159.                 result[i]=(byte)0x00;
  160.             }
  161.             else if(i>7 && i<8+this.message.length())
  162.             {
  163.                 result[i]=bmessage[i-8];
  164.             }
  165.             else
  166.             {
  167.                 result[i] = (byte)0x00;
  168.             }
  169.         }
  170.        
  171.         // Encryption
  172.        
  173.         byte ESI;
  174.         byte[] ECX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
  175.         byte[] EDX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
  176.         byte[] EBX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01};
  177.         byte[] EAX = {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
  178.        
  179.         for(int i=4;i<this.message.length()+9;i++)
  180.         {
  181.             EAX[3] = result[i];
  182.             mov(EDX,ECX);
  183.             EDX[3] = (byte) (EDX[3] & (byte)0x07);
  184.             EDX[0]=(byte)0x00;
  185.             EDX[1]=(byte)0x00;
  186.             EDX[2]=(byte)0x00;
  187.             add(EAX,ECX);
  188.             EAX[3] = (byte)(EAX[3] + ~(byte)0x32 + (byte)0x01);
  189.             ESI = EDX[3];
  190.             EDX[3] = bpass[(int)EDX[3]];
  191.             EAX[3] = (byte)(EAX[3] ^ EDX[3]);
  192.             result[i] = EAX[3];
  193.             EDX[3] = (byte)(EDX[3] ^ EAX[3]);
  194.             bpass[(int)ESI] = EDX[3];
  195.             add(ECX,EBX);  
  196.         }
  197.        
  198.        
  199.         int rrr;
  200.         if((this.message.length()+4+1)%4 == 0)
  201.             rrr = (this.message.length()+4+1)/4;
  202.             else
  203.             rrr = (this.message.length()+4+1)/4+1;
  204.         //if((this.message.length())%4 != 0)
  205.         //rrr--;
  206.         for(int i=0;i<rrr;i++)
  207.         {
  208.             ECX[0] = result[3];
  209.             ECX[1] = result[2];
  210.             ECX[2] = result[1];
  211.             ECX[3] = result[0];
  212.            
  213.             mov(EAX,ECX);
  214.            
  215.             EAX[3] = (byte)((byte)(EAX[0] >> 7) & (byte)0x00 + 1);
  216.             EAX[0] = (byte)0x00;
  217.             EAX[1] = (byte)0x00;
  218.             EAX[2] = (byte)0x00;
  219.                        
  220.             shl(ECX);
  221.        
  222.             add(EAX,ECX);      
  223.            
  224.             ECX[0] = result[4*i+7];
  225.             ECX[1] = result[4*i+6];
  226.             ECX[2] = result[4*i+5];
  227.             ECX[3] = result[4*i+4];
  228.            
  229.             add(EAX,ECX);
  230.            
  231.             result[3] = EAX[0];
  232.             result[2] = EAX[1];
  233.             result[1] = EAX[2];
  234.             result[0] = EAX[3];
  235.         }
  236.     }
  237.    
  238. // Convert a signed byte to an integer.
  239.    
  240. private int byteToInt(byte bIn){
  241. if((bIn > 127) || (bIn < -128))
  242.     return 0;
  243. else
  244. {
  245.     if(bIn >= 0)
  246.         return (int)bIn;
  247.     else{
  248.         return (-(-(int)bIn) & 0xff);
  249.     }
  250. }
  251. }
  252.  
  253. // Replace the first registry by the second one.
  254.  
  255. private void mov(byte[] reg1, byte[] reg2)
  256. {
  257.     reg1[0] = reg2[0];
  258.     reg1[1] = reg2[1];
  259.     reg1[2] = reg2[2];
  260.     reg1[3] = reg2[3];
  261. }
  262.  
  263. // Add the second registry to the first one and stock the result into the first registry.
  264.  
  265. private void add(byte[] reg1, byte[] reg2)
  266. {
  267.     byte temp = (byte)0x00;
  268.     byte temp2 = (byte)0x00;
  269.            
  270.     if(byteToInt(reg1[3])+byteToInt(reg2[3]) > 255)
  271.         temp = (byte)0x01;
  272.     reg1[3] = (byte)(reg1[3] + reg2[3]);
  273.    
  274.     if(byteToInt(reg1[2])+byteToInt(reg2[2])+temp > 255)
  275.         temp2 = (byte)0x01;
  276.     reg1[2] = (byte)(reg1[2] + reg2[2] + temp);
  277.    
  278.     if(byteToInt(reg1[1])+byteToInt(reg2[1])+temp2 > 255)
  279.         temp = (byte)0x01;
  280.     else
  281.         temp = (byte)0x00;
  282.     reg1[1] = (byte)(reg1[1] + reg2[1] +temp2);
  283.     reg1[0] = (byte)(reg1[0] + reg2[0] +temp);
  284. }
  285.  
  286. // Multiply the registry by 2.
  287.  
  288. private void shl(byte []reg)
  289. {
  290.     byte temp = (byte)0x00;
  291.     byte temp2 = (byte)0x00;
  292.            
  293.     if((int)reg[3] < 0)
  294.         temp = (byte)0x01;
  295.     reg[3] = (byte)(reg[3] << 1);
  296.    
  297.     if((int)reg[2] < 0)
  298.         temp2 = (byte)0x01;
  299.     reg[2] = (byte)(reg[2] << 1);
  300.     reg[2] = (byte)(reg[2] + temp);
  301.    
  302.     if((int)reg[1] < 0)
  303.         temp = (byte)0x01;
  304.     else
  305.         temp= (byte)0x00;
  306.     reg[1] = (byte)(reg[1] << 1);
  307.     reg[1] = (byte)(reg[1] + temp2);
  308.     reg[0] = (byte)(reg[0] << 1);
  309.     reg[0] = (byte)(reg[0] + temp);
  310. }
  311.    
  312. }
RAW Paste Data