Attention! You have been hacked! Follow the instructions… äh, nein :D

Es macht immer wieder Spaß Emails von Amateuren zu bekommen. Auf den ersten Blick ist das nur die übliche „Wir haben Deinen PC übernommen und Deinen Pornokonsum gefilmt“ Mail, auf den zweiten übrigens auch 😉

Attention! You have been hacked! Follow the instructions… äh, nein 😀

Bei der Email unten ist nicht so wichtig was drinsteht, sondern an wen die Betrüger die Mail geschickt haben 😉 Die ging an eine Adresse, die Sie von der Mailingliste Full-Disclosure erscrapt haben ( scraping nennt man das, wenn man z.B. Email Adressen aus einem großen Umfang an Webseiten rauskratzt ). Auf der Liste schreiben i.d.R. nur Cybersicherheitsexperten, sowie und ein Rudel Journalisten und Admins die das mitlesen.
Wenn der möchtegern Scammer tatsächlich allen von denen so eine Mail geschickt hat, dann kann der jetzt vermutlich nicht mehr ruhig schlafen, weil er damit genug Leute ans Bein gepinkelt hat, die echt was draufhaben 😀 Daher, lieber indischer Scammer, entschuldige Dich lieber, sonst finden wir Dich schneller als Dir lieb ist 🙂
Jetzt kommt von Euch natürlich, das war aber doch ein VPN…. nein, wars nicht:
$ host 61.221.83.139
139.83.221.61.in-addr.arpa domain name pointer m.antnex.com.tw.
139.83.221.61.in-addr.arpa domain name pointer vpn.antnex.com.tw.
139.83.221.61.in-addr.arpa domain name pointer antnex.com.tw.
139.83.221.61.in-addr.arpa domain name pointer mail.antnex.com.tw.

Der Mailserver macht auch das VPN für die gehackte Firma:
Not shown: 1191 filtered tcp ports (no-response)
PORT STATE SERVICE
25/tcp open smtp
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
1194/tcp open openvpn
Und jetzt viel Vergnügen mit dem Schwachsinn dieser offensichtlich mit einem Baukasten zusammengesetzten, sooooo gefährlichen, Betrugs-Email:
Return-path: <support@antnex.com.tw>
Envelope-to: fulldisclosure@XXXXXXXXXXXXXXXXXXXXXXX
Delivery-date: Wed, 15 Jun 2022 06:58:29 +0200
Received: from vpn.antnex.com.tw ([61.221.83.139] helo=m.antnex.com.tw)
 by XXXXXXXXXXXXXXXXXXXXXXX with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384
 (Exim 4.94.2)
 (envelope-from <support@antnex.com.tw>)
 id 1o1L6q-00AL05-PR
 for fulldisclosure@XXXXXXXXXXXXXXXXXXXXXXX; Wed, 15 Jun 2022 06:58:29 +0200
Received: by m.antnex.com.tw (Postfix, from userid 98)
 id E888D9BB43; Wed, 15 Jun 2022 12:58:19 +0800 (CST)
Received: from [127.0.0.1] (unknown [43.224.182.87])
 (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by m.antnex.com.tw (Postfix) with ESMTPSA id 2815FB8766
 for <fulldisclosure@XXXXXXXXXXXXXXXXXXXXXXX>; Wed, 15 Jun 2022 12:58:17 +0800 (CST)
Date: Wed, 15 Jun 2022 06:58:19 +0200
MIME-Version: 1.0
To: fulldisclosure@XXXXXXXXXXXXXXXXXXXXXXX
From: support@antnex.com.tw
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8
Message-ID: <38381521293341.6453G20GAX@antnex.com.tw>
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=antnex.com.tw;
s=antnex; t=1655269099;
bh=fOF5T+fIJUkFhy6YN7TRDW4/lk59WRfUuUB+mVQcuf8=;
h=Date:To:From:Subject;
b=UgrsjIcPfuFsvR3m8jHiutMHaYLn5QHb2KsCcyb5ZG3pBIlBRvgiOkvvzNexCRQiT
y35Dql7iMAwMrkB8d+8vQIuodEcmgk2ragKsn0fY4/6gsPiQIsVewMLyo2VNjQ7FRf
a9KuZnpsIHyidMmEGlOwLMoLpCxuIL3o1Jncr+6E=
Subject: Attention! You have been hacked! Follow the instructions.Hi!

You can consider this message as the last warning.

We’ve hacked your system!We’ve copied all the data from your device to our own servers.

Curious videos were recorded from your camera and your actions while watching porn. Your device was infected with our virus when you visited the porn site.

Trojan virus gives us full access, allows us control your device. The virus allows not only to see your screen, but also to turn on your camera, microphone, without your awareness. We captured video from your screen and camera and then edited a video where you’re watching porn in one part of the screen and masturbating in the other one. But that’s not all! We have access to all the contacts from your phone book and social networks.

It won’t take us long to send this video to your friends, family and relatives on social networks, messengers and email in a few minutes. We have a lot of audio recordings of your personal conversations, where a lot of „interesting“ things are revealed!This information can destroy your reputation once and for all in a matter in minutes.

You have the opportunity to prevent irreversible consequences. To do so you need to:
Transfer 1200 USD (US dollars) to our Bitcoin wallet.

Don’t know how to make a transfer? Enter „Buy Bitcoin“ into the search box. Our Bitcoin wallet (BTC Wallet): bc1qkp5rfx26m3kt3mw2wvasfd963u233vs782xmsr
After you make the payment, your video and audio recordings will be completely destroyed and you can be 100% sure that we won’t bother you again.

You have time to think about it and make the transfer – 50 hours!After you read this letter, we’ll get an automatic notification. From that moment on, the timer will start. It is useless to complain, because Bitcoin-wallets can’t be tracked, as well as the sender email. You may not try to send a reply message, as it will not reach the addressee anyway.

We also advise you not to send the letter to anybody. In this case the system will automatically send a request to the server, and all data will be published in social networks and messengers. You will not be able to solve the problem by changing passwords in social networks, as all the information is already downloaded to the cluster of our servers. Think about what reputation means to you and how much the consequences will be.

You have 50 hours.

„Hello, you reached Interpol, how can we…“ *click*

Heute morgen wurden wir aus Indien mit Fakenews zu unserem Air-Gapped Windows-PC angerufen. 4 mal, beim 5ten mal passierte das hier 😀

„Hello, you reached Interpol, how can we…“ *click*

Irgendwie hat das Wort Interpol bei den Indern eine Allergische Reaktion hervorgerufen, ich konnte nicht mal meinen Fiktiven Namen nennen 🙂

Na gut, da bleibt wohl nur die Forensische Untersuchung. Dazu brauchen wir:

– eine Fritzbox

Denn, eine Fritzbox hat ein Funktion zum Herunterladen von Erweiterten Supportdaten für AVM, das machen wir uns zu nutze 🙂 Und Ihr müßt schnell sein, schon der nächste Anruf kann die Daten die wir brauchen, aus der Liste werfen.

Wie kommt man an die Daten ran?

Dazu loggt Ihr Euch in die Fritz!box ein, notfalls die erweitere Ansicht starten.

1) auf Inhalt klicken

2) auf „Fritz!Box Support“ klicken

3) und Daten speichern

Da sind jetzt jede Menge Daten drin, aber findet man da die richtigen. U.a. ist in den Daten die Anruferliste drin, da taucht die fiktive Nummer auf, die der Anrufer sich gegeben hat. Außerdem stehen die SIP Header der letzten Anrufe zur Verfügung, aber eben nur 3 oder 4, deswegen gleich machen 😉

Wenn Ihr weiter nach der Rufnummer sucht, dann stoßt Ihr zwangsläufig auf das hier:

2022-06-14 10:50:34.284 – IN: my=Fritz.box-IP%16:5060 peer=212.227.124.129 port=5060 UDP, sipiface=none:
INVITE sip:49meinenummer@meine-IP;uniq=4ED0D261308B18E3479371E6DE583 2.0
Via: SIP/2.0/UDP 212.227.124.129;branch=z9hG4bK558a.a1b3af1c4cb4a9d3db770f9c2540be30.0
Via: SIP/2.0/UDP 212.227.67.227;branch=z9hG4bK558a.43f57bddf2d907ac8e703c88816f28c8.0
Via: SIP/2.0/UDP 212.227.124.145;branch=z9hG4bK558a.0196cb5967141d39c551e1029d6b8409.0
Via: SIP/2.0/UDP 212.93.31.246:5060;branch=z9hG4bK1kv0so005gggdkea0210.1
Record-Route: <sip:212.227.124.129;lr=on>
Record-Route: <sip:212.227.67.227;lr=on;ftag=o6at64tt-CC-1067-OFC-1770;did=e18.5d83>
Record-Route: <sip:212.227.124.145;lr=on>
From: „+49458911245“ <sip:+49458911245@Versatel.de;transport=udp;user=phone>;tag=o6at64tt-CC-1067-OFC-1770
To: „+49meinenummer“ <sip:+49meinenummer@1und1.de;user=phone>
Call-ID: y6bosyszeetyiy769vbssneaa9yetzi6@10.18.5.64
CSeq: 1 INVITE
Contact: <sip:+49458911245@212.93.31.246:5060;user=phone;transport=udp>
History-Info: <sip:+49meinenummer@1und1.de>;index=1
History-Info: <sip:+49meinenummer@1und1.de;user=phone>;index=1.1;np=1
Max-Forwards: 59
P-Early-Media: supported
Supported: timer
Min-SE: 90
Session-Expires: 1800;refresher=uac
Allow: INVITE, ACK, OPTIONS, BYE, CANCEL, INFO, PRACK, NOTIFY, MESSAGE, REFER, UPDATE
Content-Type: application/sdp
Content-Length: 313

Die IP Adresse im Contact:-Header ist die des Anrufer, oder zumindest die, die er nach außen in dem Netz hatte. Er könnte ja auch per VPN drin sei, oder einen gehackten PC kontrollieren. Diese IP ist das einzige wahre an dem ganzen Anruf, denn um die Verbindung zu halten, müssen die SIP Pakete routebar sein, also kann man keine gefälschten IPs wie bei einem DDOS benutzen.

Mit den Daten oben könnt Ihr dann tatsächlich zur Polizei gehen und Anzeige erstatten, weil es hier tatsächlich einen Ermittlungsansatz gibt. Natürlich sind die Inder nicht wirklich in Deutschland, aber beim Provider der das SIP Gespräch an Euch durchgereicht habt, muß es auch Log zur echten IP geben, weil, wie gesagt, mit gefälschten Ips gehts nicht. Also ist da entweder ein gehackter PC / Telefonanlage im Spiel, oder ein VPN. Auf beides muß man mit IPs zugreifen. So oder so, tut ihr was Gutes 😉

Um die Anrufer aus dem obigen Beispiel kümmert sich die Kripo Wuppertal 😉

Follow-UP: „Hello, you reached Interpol, how can we …“ *click*

GUI-Requester aus Bashscripten erzeugen

Schnell mal ein Bashscript zusammen gebastelt, daß einen kleinen Job erledigt, machen wohl viele von uns. Blöd ist, daß man das Script vom Desktop aus startet, ohne dem Script irgend etwas mitgeben zu können. Das wäre es doch toll, wenn man den Benutzer elegant fragen könnte, oder?

GUI-Requester aus Bashscripten erzeugen

Im konkreten Fall geht es um ein Script, daß die Tonausgabe eines Programms umschaltet. Die Grundlagen dazu findet Ihr hier:

Twinkle, Twinkle little PVA …

Damit wir den Ton eines Programms umschalten können, müssen wir erstmal wissen, welches Programm gemeint ist und da setzt unser kleines Script an. Da wir vom Desktop reden, wird das tonausgebende Programm ein Fenster offen haben, damit man es bedienen kann.

Jetzt haben wir ein Bashscript gestartet, daß irgendwie mitbekommen muß, welches Fenster denn gemeint ist. Dazu nutzen wir „xprop“ . Xprop erzeugt einen Mauszeiger mit dem man auf das Fenster klicken kann, von dem man alles wissen will, und ich meine echt alles! Das geht sogar soweit, das Defaulticon des Prozesses anzuzeigen, daß zu dem Fenster gehört 😀  Sehr selbst:

XKLAVIER_STATE(INTEGER) = 0, 1654415104
_GTK_EDGE_CONSTRAINTS(CARDINAL) = 85
_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_FOCUSED
WM_STATE(WM_STATE):
window state: Normal
icon window: 0x0
_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 31, 0
_NET_WM_DESKTOP(CARDINAL) = 0
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW
WM_HINTS(WM_HINTS):
Client accepts input or input focus: True
Initial state is Normal State.
bitmap id # to use for icon: 0x420235a
bitmap id # of mask for icon: 0x4202360
window id # of group leader: 0x4200001
_GTK_THEME_VARIANT(UTF8_STRING) = „dark“
XdndAware(ATOM) = BITMAP
_NET_WM_ICON(CARDINAL) = Icon (48 x 48):

▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░ ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▒░ ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓░ ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▒ ░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▒░░░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓ ▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
░ ░
░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

_GTK_WINDOW_OBJECT_PATH(UTF8_STRING) = „/org/gnome/Terminal/window/3“
_GTK_APPLICATION_OBJECT_PATH(UTF8_STRING) = „/org/gnome/Terminal“
_GTK_UNIQUE_BUS_NAME(UTF8_STRING) = „:1.148“
_GTK_APPLICATION_ID(UTF8_STRING) = „org.gnome.Terminal“
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 1920, 1021
WM_WINDOW_ROLE(STRING) = „gnome-terminal-window-00a05266-8865-460d-9efd-dd4e9d0164db“
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 69215064, 69215065
_NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0x4202357
WM_CLIENT_LEADER(WINDOW): window id # 0x4200001
_NET_WM_PID(CARDINAL) = 7153
WM_LOCALE_NAME(STRING) = „de_DE.UTF-8“
WM_CLIENT_MACHINE(STRING) = „eve.resellerdesktop.de“
WM_NORMAL_HINTS(WM_SIZE_HINTS):
program specified minimum size: 359 by 70
program specified resize increment: 7 by 15
program specified base size: 16 by 26
window gravity: NorthWest
WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST
WM_CLASS(STRING) = „gnome-terminal-server“, „Gnome-terminal“
WM_ICON_NAME(COMPOUND_TEXT) = „marius@eve:~ — xprop“
_NET_WM_ICON_NAME(UTF8_ST_NET_WM_PID(CARDINAL) = 7153RING) = „marius@eve:~ — xprop“
WM_NAME(COMPOUND_TEXT) = „marius@eve:~ — xprop“
_NET_WM_NAME(UTF8_STRING) = „marius@eve:~ — xprop“

Was wir davon für den Job brauchen, habe ich mal blau markiert. Da steht die PID( ProzessID ) des Programms, das das Fenster aufgemacht hat. Mit folgender Anweisung kann man das im Script auslesen:

pid=$(xprop | grep _NET_WM_PID | grep -o [0-9]*)

Das erste Grep besorgt uns die Zeile, das zweite Grep lässt nur unsere gesuchten Zahlen übrig. Damit haben wir einen Teil der Aufgabe gelöst. Teil Zwei besteht darin, das neue Ausgabegerät für das Programm zu ermitteln.

Damit Ihr versteht, was da als Argumente benutzt wird, ist ein Blick in den anderen Artikel hilfreich. Kurzfassung: Ich habe zwei Ausgänge: Lautsprecher und HDMI(Kopfhörer) .

Mit Zenity können wir beliebige GUI-Requester bauen und das ausgewählte Ergebnis auslesen. Vermutlich ist das Programm bei Euch schon vorinstalliert.

out=$(zenity –list –radiolist –text „Set audio output for window:“ –column „Select“ –column „Output“ FALSE „Lautsprecher“ FALSE „HDMI“ FALSE „Kopfhörer“ )

Das sieht in Real dann so aus:

Mit „–column“ gibt man an, welche Spalten man haben will, dann kommt die Liste der Optionen. Für ein Radiobutton, also eine Liste, wo man nur ein Element ausgewählt haben kann, sind die Optionen so aufgebaut:

FALSE/TRUE Elementname
FALSE/TRUE Elementname
FALSE/TRUE Elementname
FALSE/TRUE Elementname

Wobei TRUE vorausgewählt meint, und FALSE nicht ausgewählt. Im Bashscript stehen die Optionen einfach hintereinander. Hat man etwas ausgewählt, wird es vom Prozess einfach als Text ausgegeben:

[marius@eve ~]$ zenity –list –radiolist –text „Set audio output for window:“ –column „Select“ –column „Output“ FALSE „Lautsprecher“ FALSE „HDMI“ FALSE „Kopfhörer“
Kopfhörer
[marius@eve ~]$

Ich hatte Kopfhörer ausgewählt 😉 Jetzt noch den Prozessnamen:

pname=$( cat /proc/$pid/stat | awk ‚{print $2};‘ | grep -o [a-zA-Z]* )

bauen wir es zusammen:

#!/bin/bash

pid=$(xprop | grep _NET_WM_PID | grep -o [0-9]*)
out=$(zenity –list –radiolist –text „Set audio output for window:“ –column „Select“ –column „Output“ FALSE „Lautsprecher“ FALSE „HDMI“ FALSE „Kopfhörer“ )
pname=$( cat /proc/$pid/stat | awk ‚{print $2};‘ | grep -o [a-zA-Z]* )
pulse.out $pname $out

Fertig. Aber, mit Sonderzeichen im Prozessnamen wird es wohl Probleme geben.

Damit kann man jetzt ein Script starten, das lässt einen ein Fenster auswählen, dann fragt man nach der Tonausgabe und dann wechselt der Ton. Das geht natürlich viel einfacher, wenn man einen Sprachassistenten hat 😀

command:“schalte .* auf .* um“,“EXEC:pulse.outx:x%0x:x%1″

Damit kann man jeden namentlich korrekt erkannten Prozess auf jedes konfigurierte Ausgabegerät umlenken. Hört meine Wort: Das wird Eure Zukunft.