Guest User

Untitled

a guest
Jul 30th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.74 KB | None | 0 0
  1. package scridbblie;
  2.  
  3. use Network::Send;
  4. use Log qw (warning message debug error);
  5. use Globals qw(%config $encryptVal $bytesSent $conState %packetDescriptions $enc_val1 $enc_val2 $char $masterServer $syncSync $accountID %timeout %talk);
  6.  
  7. Plugins::register("Encryption private", "Encrypt header", \&unload);
  8.  
  9. sub unload {
  10. warning "Unloading\n";
  11. }
  12.  
  13. sub fp {
  14. my $self = shift;
  15.       open F, "<plugins/xh.txt" or die "Xh.txt file not found";
  16.       my @keys;
  17.       @keys = <F>;
  18.       close (F);
  19.                 if (scalar @keys > 1) {
  20.       $self->cryptKeys(@keys);
  21.                 } else {
  22.                 warning "Ench plugin requires keys to work...";
  23.                 }
  24. }
  25.  
  26. sub load {
  27. my ($self, $r_message) = @_;
  28.    my $messageID = unpack("v", $$r_message);
  29.    fp($self);
  30.    if ($self->{encryption}->{crypt_key_3}) {
  31.       if (sprintf("%04X",$messageID) eq $self->{packet_lut}{map_login}) {
  32.          $self->{encryption}->{crypt_key} = $self->{encryption}->{crypt_key_1};
  33.       } elsif ($self->{net}->getState() != Network::IN_GAME) {
  34.          # Turn off keys
  35.          $self->{encryption}->{crypt_key} = 0; return;
  36.       }
  37.          
  38.       # Checking if Encryption is Activated
  39.       if ($self->{encryption}->{crypt_key} > 0) {
  40.          # Saving Last Informations for Debug Log
  41.          my $oldMID = $messageID;
  42.          my $oldKey = ($self->{encryption}->{crypt_key} >> 16) & 0x7FFF;
  43.          
  44.          # Calculating the Encryption Key
  45.          $self->{encryption}->{crypt_key} = ($self->{encryption}->{crypt_key} * $self->{encryption}->{crypt_key_3} + $self->{encryption}->{crypt_key_2}) & 0xFFFFFFFF;
  46.      
  47.          # Xoring the Message ID
  48.          $messageID = ($messageID ^ (($self->{encryption}->{crypt_key} >> 16) & 0x7FFF)) & 0xFFFF;
  49.          $$r_message = pack("v", $messageID) . substr($$r_message, 2);
  50.  
  51.          # Debug Log  
  52.          debug (sprintf("Encrypted MID : [%04X]->[%04X] / KEY : [0x%04X]->[0x%04X]\n", $oldMID, $messageID, $oldKey, ($self->{encryption}->{crypt_key} >> 16) & 0x7FFF), "sendPacket", 0) if $config{debugPacket_sent};
  53.       }
  54.    } else {
  55.       use bytes;
  56.       if ($self->{net}->getState() != Network::IN_GAME) {
  57.          $enc_val1 = 0;
  58.          $enc_val2 = 0;
  59.          return;
  60.       }
  61.  
  62.       my $messageID = unpack("v", $$r_message);
  63.       if ($enc_val1 != 0 && $enc_val2 != 0) {
  64.          # Prepare encryption
  65.          $enc_val1 = ((0x000343FD * $enc_val1) + $enc_val2)& 0xFFFFFFFF;
  66.          debug (sprintf("enc_val1 = %x", $enc_val1) . "\n", "sendPacket", 2);
  67.          # Encrypt message ID
  68.          $messageID = ($messageID ^ (($enc_val1 >> 16) & 0x7FFF)) & 0xFFFF;
  69.          $$r_message = pack("v", $messageID) . substr($$r_message, 2);
  70.       }
  71.    }
  72. }
  73.  
  74.  
  75. *Network::Send::encryptMessageID = *load;
  76. 1;
Add Comment
Please, Sign In to add comment