Experimente mit versteckter COM-Schnittstelle und LxBus-IPC-Mechanismus in WSL. Stark inspiriert vom Projekt lxss des Kernel-Gurus Alex Ionescu . Bei diesem Projekt handelt es sich lediglich um ein Konzept, nicht um ein vollständig entwickeltes Programm, und es sollte zu Testzwecken verwendet werden.
Klonen Sie dieses Repository. Öffnen Sie die Lösungsdatei (.sln) oder die Projektdatei (.vcxproj) in Visual Studio und erstellen Sie sie. Alternativ führen Sie die Entwickler-Eingabeaufforderung von Visual Studio aus, gehen zum geklonten Ordner und führen den Befehl msbuild
aus. Dieses Projekt kann auch mit der Mingw-W64-Toolchain erstellt werden. Öffnen Sie das Terminal im geklonten Ordner und führen Sie den Befehl make
aus. Die Binärdateien befinden sich im Ordner /bin
.
Laden Sie die Binärdatei von der Release-Seite herunter. Es sind keine Installationsschritte erforderlich. Dieses Projekt zeigt nur die versteckten COM-Methoden, die sich in zukünftigen Windows-Versionen ändern können. Die in diesem Projekt verwendete COM-Vtable entspricht der neuesten Windows 10 20H1 Insider Preview , also Build 18917 und höher. Hier sind die Optionen von WslReverse:
Usage: WslReverse.exe [-] [option] [argument]
Options:
-b, --bus [Distro] Create own LxBus server (as administrator).
-d, --get-id [Distro] Get distribution ID.
-e, --export [Distro] [File Name]
Exports selected distribution to a tar file.
-G, --get-default Get default distribution ID.
-g, --get-config [Distro] Get distribution configuration.
-h, --help Show this help information.
-i, --install [Distro] [Install Folder] [File Name]
Install tar file as a new distribution.
-l, --list List all distributions with pending ones.
-r, --run [Distro] Run bash in provided distribution.
-S, --set-default [Distro] Set default distribution.
-s, --set-config [Distro] Set configuration for distribution.
-t, --terminate [Distro] Terminate running distribution.
-u, --uninstall [Distro] Uninstall distribution.
Die meisten Definitionen befinden sich in den Headerdateien LxBus.h
und WinInternal.h
. Das Projektlayout der Quelldateien:
gemeinsam:
Frontend:
Backend:
linux_files:
wslcli:
Um LxBus zu verwenden, importieren Sie die LxCoreFlags-Registrierungsdatei. Starten Sie dann den PC neu. Kompilieren Sie LxBusClient.c mit make
in WSL. Führen Sie WslRevese mit der Option -b
oder --bus
als Administrator und LxBusClient als Root-Benutzer in WSL aus. Diese beiden Binärdateien tauschen mithilfe von LxBus einige Nachrichten zwischen der WSL und der Windows-Seite aus. LxCore-Treiber. Hier sind einige davon:
Schritt Nr. | LxBus-Server (als Administrator) | LxBus-Client (als Root) |
---|---|---|
1 | Registrieren Sie den LxBus-Server und warten Sie auf den Client | Öffnen Sie das lxss-Gerät und stellen Sie eine Verbindung zum Server her |
2 | Nachricht vom LxBus-Client lesen | Nachricht an den LxBus-Server schreiben |
3 | Nachricht an den LxBus-Client schreiben | Nachricht vom LxBus-Server lesen |
4 | Marshal-Rohr am W-Ende, gelesen vom Rohr am R-Ende | W-Endrohr ausbauen, Nachricht schreiben |
5 | Marshal Rohr am R-Ende, schreiben Sie an das Rohr am W-Ende | R-End-Rohr ausbauen, Nachricht lesen |
6 | Entmarshalieren Sie Standard-E/A-Dateideskriptoren | Marshal-Standard-E/A-Dateideskriptoren |
7 | Unmarshalieren und PID von der Clientseite abrufen | Aktuelle PID des Marschalls |
8 | Marshal-Konsolennachricht | Unmarshal-Konsolennachricht |
9 | Erstellen Sie einen unbenannten LxBus-Server | Fortgesetzt werden ... |
10 | Marshal-Gabel-Token | Unmarshal-Gabel-Token |
Eine ausführliche Erklärung finden Sie in Alex Ionescus Präsentation @34min auf der BlackHat USA 2016. Mit dem LxBus IPC-Mechanismus können viele Dinge getan werden. Was möchten Sie mit LxBus Interessantes machen? ?
Dies funktioniert nur mit WSL1 , da LxCore nicht direkt mit WSL2 zusammenhängt. Importieren Sie zunächst die Registrierungsdatei LxCoreFlags. Aktivieren Sie dann das Debuggen im lokalen Kernelmodus mit diesen beiden Befehlen als Administrator und starten Sie den PC neu.
bcdedit /debug on
bcdedit /dbgsettings local
Dadurch werden einige DWORD-Registrierungsflags aktiviert. Hinter den Kulissen prüft LxCore hauptsächlich, ob PrintSysLevel
und PrintLogLevel
beide Null sind und TraceLastSyscall
vorhanden ist. Verwenden Sie für denselben Hostcomputer DebugView als Administrator oder KD für VM.
Führen Sie eine beliebige WSL1-Distribution aus und sehen Sie sich die Protokolle sowie alle Systemaufrufe und dmesg an. Die Funktionen hinter diesem Protokollformat sind wie folgt:
DbgPrintEx(0, 0, "LX: (%p, %p) %s", PEPROCESS, PKTHREAD, Syscall);
DbgPrintEx(0, 0, "LX: (%p, %p) /dev/kmsg: %Z", PEPROCESS, PKTHREAD, Version);
DbgPrintEx(0, 0, "LX: (%p, %p) /dev/log: %d: %Z: %Zn", PEPROCESS, PKTHREAD, x, y, z);
DbgPrintEx(0, 0, "LX: (%p, %p) (%Z) %sn", PEPROCESS, PKTHREAD, Command, LxCoreFunction);
Anbietername | Anbieter-GUID | Dateiname |
---|---|---|
Microsoft.Windows.Lxss.Manager | {B99CDB5A-039C-5046-E672-1A0DE0A40211} | LxssManager.dll |
Microsoft.Windows.Lxss.Heartbeat | {0451AB4F-F74D-4008-B491-EB2E5F5D8B89} | LxssManager.dll |
Microsoft.Windows.Subsystem.LxCore | {0CD1C309-0878-4515-83DB-749843B3F5C9} | LxCore.sys |
Microsoft.Windows.Subsystem.Lxss | {D90B9468-67F0-5B3B-42CC-82AC81FFD960} | Wsl.exe |
Dieses Projekt verwendet einige Definitionen und Datentypen aus den folgenden. Dank:
WslReverse ist unter der GNU General Public License v3 lizenziert. Eine vollständige Kopie der Lizenz finden Sie unter LIZENZ.
WslReverse -- Experiments with COM interface and LxBus IPC mechanism in WSL.
Copyright (c) 2018-19 Biswapriyo Nath
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.