package Win32::LSA; use base qw/Win32::API::Interface/; use strict; use warnings; __PACKAGE__->generate( "Advapi32.dll", "LogonUserA", "PPPIIP", "I", "logon_user" ); __PACKAGE__->generate( "Advapi32.dll", "ImpersonateLoggedOnUser", "P", "I", "impersonate_as" ); __PACKAGE__->generate( "Advapi32.dll", "RevertToSelf", "", "I", "revert" ); 1; use Win32 (); my $token = "\0" x 4; print "######LOGIN-INFOS######\n"; print 'Domain: '; chomp(my $domain = ); print 'User: '; chomp(my $user = ); my $password=&getpassword(); my $lsa = Win32::LSA->new; #my $rc = $lsa->logon_user( $ENV{USER}, $ENV{DOMAIN}, $ENV{PASS}, 5, 0, $token); my $rc = $lsa->logon_user( $user, $domain, $password, 5, 0, $token); die Win32::FormatMessage( Win32::GetLastError ) unless $rc; print "Logon success:\n"; $rc = $lsa->impersonate_as( $token ); die Win32::FormatMessage( Win32::GetLastError ) unless $rc; print "Impersonate success.\n"; # hier dein code $rc = $lsa->revert; die Win32::FormatMessage( Win32::GetLastError ) unless $rc; sub getpassword { #---------------------------------------------------- # getpassword # Passwort eingabe ohne das diese in der Comandozeile angezeigt wird #---------------------------------------------------- use Term::ReadKey; print 'Password: '; ReadMode 'noecho'; my $password = ReadLine; ReadMode 'normal'; chomp $password; return $password; }