Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Network::Send::ROla;
- use strict;
- use base qw(Network::Send::ServerType0);
- # use Globals qw($net);
- use Globals;
- use Log qw(debug);
- sub new {
- my ($class) = @_;
- my $self = $class->SUPER::new(@_);
- my %packets = (
- '0C26' => ['master_login', 'a4 Z50 x a32 a5', [qw(game_code username password_rijndael flag)]],
- '0825' => ['token_login', 'v V C Z51 a17 a15 a*', [qw(len master_version version username mac_hyphen_separated ip login_token)]],
- );
- $self->{packet_list}{$_} = $packets{$_} for keys %packets;
- my %handlers = qw(
- master_login 0C26
- token_login 0825
- );
- $self->{packet_lut}{$_} = $handlers{$_} for keys %handlers;
- return $self;
- }
- sub reconstruct_master_login {
- my ($self, $args) = @_;
- my $master = $masterServers{$config{master}};
- $net->serverDisconnect();
- $net->serverConnect($master->{OTP_ip}, $master->{OTP_port});
- if (exists $args->{password}) {
- for (Digest::MD5->new) {
- $_->add($args->{password});
- $args->{password_md5} = $_->clone->digest;
- $args->{password_md5_hex} = $_->hexdigest;
- }
- my $key = pack('C32', (0x06, 0xA9, 0x21, 0x40, 0x36, 0xB8, 0xA1, 0x5B, 0x51, 0x2E, 0x03, 0xD5, 0x34, 0x12, 0x00, 0x06, 0x06, 0xA9, 0x21, 0x40, 0x36, 0xB8, 0xA1, 0x5B, 0x51, 0x2E, 0x03, 0xD5, 0x34, 0x12, 0x00, 0x06));
- my $chain = pack('C32', (0x3D, 0xAF, 0xBA, 0x42, 0x9D, 0x9E, 0xB4, 0x30, 0xB4, 0x22, 0xDA, 0x80, 0x2C, 0x9F, 0xAC, 0x41, 0x3D, 0xAF, 0xBA, 0x42, 0x9D, 0x9E, 0xB4, 0x30, 0xB4, 0x22, 0xDA, 0x80, 0x2C, 0x9F, 0xAC, 0x41));
- my $in = pack('a32', $args->{password});
- my $rijndael = Utils::Rijndael->new;
- $rijndael->MakeKey($key, $chain, 32, 32);
- $args->{password_rijndael} = $rijndael->Encrypt($in, undef, 32, 0);
- }
- }
- sub sendTokenToServer {
- my ($self, $username, $password, $master_version, $version, $token, $length, $otp_ip, $otp_port) = @_;
- my $len = $length + 92;
- my $master = $masterServers{$config{master}};
- $net->serverDisconnect();
- $net->serverConnect($master->{ip}, $master->{port});
- my $ip = '192.168.0.2';
- my $mac = $config{macAddress} || '111111111111'; # gibberish
- my $mac_hyphen_separated = join '-', $mac =~ /(..)/g;
- my $msg = $self->reconstruct({
- switch => 'token_login',
- len => $len,
- version => $version || $self->version,
- master_version => $master_version,
- username => $username,
- mac_hyphen_separated => $mac_hyphen_separated,
- ip => pad_ip($ip),
- login_token => $token,
- });
- $self->sendToServer($msg);
- debug "Sent sendTokenLogin\n", "sendPacket", 2;
- }
- sub pad_ip {
- my $ip = shift;
- my $len = length($ip);
- return $ip . ("\x00" x (14 - $len)) . "\x17" if $len < 15;
- return $ip;
- }
- 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement