In den letzten Jahren ist im Betriebssystem von Microsoft echt viel passiert. Und trotzdem gibt es immernoch einen Uralt-„Hack“, den ich schon unter Windows 7 genutzt habe. Er ist so simpel wie damals, lässt sich genauso leicht ausführen und ermöglicht es, vom Login-Bildschirm aus beliebige Kommandozeilenbefehle mit System-Rechten auszuführen. Damit könnt ihr Passwörter bestehender Nutzer zurücksetzen, neue Nutzer erstellen, Dienste registrieren, quasi Kontrolle über das System erlangen. Schauen wir zuerst einmal, wie es funktioniert und später, wir ihr euch dagegen absichern könnt.

„Erleichterte Bedienung“ beim Übernehmen des Systems

Die Schwachstelle, die hier ausgenutzt wird, ist die Erleichterte Bedienung im Anmeldebildschirm von Windows. Seit Windows 7 gibt es dieses kleine Symbol hier, welches beim Klick eine Toolsammlung startet. So harmlos sie auch wirkt … und jetzt kommt’s … sie wird mit vollen Systemrechten gestartet! Nicht eingeschränkte Nutzerrechte, nicht Adminrechte, Systemrechte! Das ist natürlich super-kritisch bzw. in manchen Fällen super-praktisch und bis heute ausnutzbar.

Der Trick ist einfach: Windows startet beim Klick auf das Icon von „Erleichterte Bedienung“ das Programm
[C:/]Windows/System32/Utilman.exe mit Systemrechten. Wenn wir nun diese ausführbare Datei mit einer in Utilman.exe umbenannten Kopie von cmd.exe überschreiben, ist der Trick schon fertig vorbereitet!
Nun lässt sich Utilman.exe allerdings nicht ersetzen, während Windows läuft, daher müssen wir in eine Pre-Boot-Umgebung und das dort erledigen. Das geht nun via Windows Installationsmedium oder anderen beliebige Boot-Systeme.

Physischer Zugriff + 1 Boot-Medium + 1 Befehl = unbegrenzte Möglichkeiten

Nun müsst ihr nur an dem PC sitzen und braucht ein Boot-Medium der Windows Version – Boot-DVD oder USB-Stick. Bootet in die Windows Installation und startet dort die Kommandozeile mit Shift+F10.
Sucht euch nun in der CMD den Buchstaben eurer Systempartition, der wird womöglich nicht derselbe sein wie im Windows Normalzustand.
Nutzt beispielsweise die Befehle „echo list volume | diskpart“ oder „wmic logicaldisk get deviceid, volumename“ für eine Auflistung aller Partitionen, dann solltet ihr den Namen eurer Systempartition wiederfinden.

Anschließend geht ihr in das Verzeichnis /Windows/System32 eurer Systempartition und macht es wie in den folgenden Screenshots:
Verschiebt euch (nur als Backup) die originale Utilman.exe irgendwo hin und kopiert anschließend die cmd.exe mit dem neuen Namen Utilman.exe in dasselbe Verzeichnis. Nun ist eure Utilman.exe unter dem Schafspelz der Verborgenheit eigentlich eine cmd.exe.

Das war’s! … außer Windows Defender geht dazwischen

Nun gibt es noch eine kleine weitere Hürde, abhängig von eurem Betriebssystem und dessen Version. Denn fertig seid ihr jetzt erst mit Windows 7 und Windows 10 älter als Version 1809 (verfügbar seit spätestens März 2019). In Version 1809 hat Microsoft den Windows Defender verbessert und erkennt seitdem dieses Hintertürchen. In Windows würde euch der Defender nach dem Login (wenn ihr der Besitzer wärt) folgende Info bringen:

Nun lassen wir uns dadurch aber nicht die Suppe versalzen und setzen also in allen neueren Versionen noch einen Schritt drauf: Wir deaktivieren einfach Windows Defender und dann funktioniert der Hack wieder.

Win10 Version 1809+: Windows Defender deaktivieren

Es gibt zwei Wege, das zu bewerkstelligen: Entweder drei Befehle abtippen oder via regedit GUI händisch erledigen.

Zeig mal die Codezeilen

:: 1) Diese Befehle einfach in eurer schon offenen CMD ausführen
:: 2) Achtet beim folgenden Befehl auf den richtigen Buchstaben eurer Systempartition!
reg load HKLM\tmp C:\windows\system32\config\SOFTWARE
reg add "HKLM\tmp\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware /t REG_DWORD /d 1 /f
reg unload HKLM\tmp
via

Alternativ: Händisch: Startet über die sowieso schon offene CMD regedit. Klick HKEY_USERS an, Datei -> Struktur laden… -> /Windows/System32/config/SOFTWARE laden -> darin Policies/Microsoft/Windows Defender suchen -> DWORD 32 „DisableAntiSpyware“ mit Wert 1 erstellen

Erleichterter Vollzugriff

Erledigt! Schließt das Setup, startet die Kiste neu und klickt im Login auf das „Erleichterte Bedienung“ Icon. Nun sollte sich eine CMD öffnen und eröffnet euch breite Möglichkeiten. Sollten sich die originalen „Erleichterte Bedienung“ Tools öffnen, ist beim Ersetzen der Utilman.exe etwas schiefgelaufen. Sollte gar nichts passieren, handelt es sich womöglich um ein Windows 10 neuer als Version 1809 und der Defender ist nicht erfolgreich deaktiviert und blockt die CMD-Ausführung. Ansonsten, wenn alles geklappt hat, sieht ihr dieses Resultat:

Nun könnt ihr mit net user [existierender Nutzer] [neues Passwort] das Passwort zurücksetzen oder mit folgenden Befehlen einen neuen administrativen Nutzer erstellen:

net user [Nutzername] [Passwort]
net localgroup "Administrators" [Nutzername] /add

Disclaimer

Ein paar Anmerkungen hinten dran: Die Anleitung dient natürlich einzig eurer Fortbildung und Information – verschafft euch damit nicht unerlaubten oder ungewollten Zugriff auf fremde Systeme. Ich spreche außerdem „fälschlicherweise“ die ganze Zeit von „Hacks“ – hierbei handelt es sich aber nicht unbedingt um einen Hack, aus zwei Gründen:
1) Diese Manipulation ist Microsoft schon seit jeher bekannt und wird aber aus Gründen hingenommen und nicht stärker verhindert. Googlt für mehr Infos.
2) Physischer Zugriff auf den Zielrechner zu haben ist quasi Schummeln 😉

Law #2: If a bad guy can alter the operating system on your computer, it’s not your computer anymore.
Law #3: If a bad guy has unrestricted physical access to your computer, it’s not your computer anymore.

10 Immutable Laws of Security

excel-letztes-aendern-speichern-oeffnen-drucken-des-dokuments-vba-resultat

Kurz und knapp: Manchmal möchte man bestimmte Informationen des Excel-Dokuments im Dokument anzeigen. Beispiele:

  • Zeitpunkt der Erstellung
  • Zeitpunkt der letzten Änderung (Änderung einer Zelle, auch ohne Speicherung)
  • Zeitpunkt der letzten Speicherung
  • Zeitpunkt des letzten Drucks (Druckdialog aufrufen, muss nicht gedruckt werden)
  • Autoren, Kommentare, Titel des Dokuments
  • weitere Eigenschaften

Dazu erkunden wir Excel Formeln, teilweise kombiniert mit VBA Workbook_BeforeSave und teilweise das informationsreiche Objekt BuiltinDocumentProperties. Letzteres lässt sich mit VBA auslesen und auch in Zellen schreiben, später mehr dazu.

Zeitpunkt der letzten Änderung

excel-letztes-aendern-speichern-oeffnen-des-dokuments-vba-code-speichern-jetzt

Wir beginnen mal klassisch mit dem Zeitpunkt der letzten Änderung des Dokuments, also jede Form von Zelländerung beispielsweise. Hierfür nutzen wir =NOW() bzw. =JETZT() (englisches oder deutsches Excel) direkt in einer Zelle als Formel. Die „Berechnung“ des aktuellen Zeitpunkts/Zelleninhalts wird bei jeder Veränderung des Dokuments ausgeführt und ist somit immer auf dem Stand der letzten Änderung.

Zeitpunkt der letzten Speicherung (Now() oder BuiltinDocumentProperties)

Ähnlich funktioniert das für den Zeitpunkt der letzten Speicherung. Auch hier benutzen wir NOW() bzw. JETZT(), kombinieren das aber mit etwas VBA-Code. Denn dank Workbook_BeforeSave schreiben wir diesen Zeitwert immer nur zum Zeitpunkt des Speicherns in eine Zelle. Somit steht dort natürlich immer der letzte Speicherzeitpunkt drin. Gleichermaßen liefert das VBA BuiltinDocumentProperties(„Last save time“) dieselbe Information.

Wie funktioniert das mit dem VBA?
Öffnet mit ALT + F11 in Excel den Code-Editor, Doppelklick auf Diese Arbeitsmappe (This Workbook) und fügt dann den Code dort ein.
Ich schreibe mittels Sheets(„ID/Name“).Range(„Zelle“) in eine Zelle. In diesem Beispiel schreib ich also den Zeitpunkt der letzten Speicherung auf unterschiedliche Art und Weise in drei verschiedene Arbeitsblätter.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
  Cancel As Boolean)
    ' Letzter Speicherzeitpunkt mittels Now() oder BuiltinDocumentProperties:
    Sheets("Blatt1").Range("B1").Value = Format(Now(), "dd.mm.yyyy hh:mm")
    Sheets(2).Range("B1").Value = Format(Now(), "dd.mm.yyyy hh:mm")
    Sheets(3).Range("B2").Value = ThisWorkbook.BuiltinDocumentProperties("Last save time")
End Sub
excel-letztes-aendern-speichern-oeffnen-des-dokuments-vba-code-speichern
Einfaches Setup für den Zeitpunkt der letzten Speicherung mittels VBA Workbook_BeforeSave()

Wenn ich den Zeitpunkt der letzten Speicherung in allen Arbeitsblättern des Excel-Dokuments immer an derselben Stelle schreiben möchte, geht das folgendermaßen sehr schön kurz:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
  Cancel As Boolean)
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        With ws
            .Range("B1").Value = ThisWorkbook.BuiltinDocumentProperties("Last save time")
        End With
    Next ws
End Sub

Alle Eigenschaften der BuiltinDocumentProperties

In den BuiltinDocumentProperties steckt natürlich mehr drin als nur die „Last save time“. Ihr könnt euch alle Eigenschaften mit folgendem Code in ein Arbeitsblatt mit dem Namen documentproperties schreiben lassen:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
  Cancel As Boolean)
    On Error Resume Next
    Sheets("documentproperties").Range("A1:B50").ClearContents
    Dim r As Integer
    r = 1
    For Each prop In ThisWorkbook.BuiltinDocumentProperties
        Sheets("documentproperties").Range("A" & r).Value = prop.Name
        Sheets("documentproperties").Range("B" & r).Value = prop.Value
        r = r + 1
    Next
End Sub
excel-letztes-aendern-speichern-oeffnen-des-dokuments-vba-code-speichern-builtindocumentproperties
34 teils hilfreiche Informationen stehen im BuiltinDocumentProperties Objekt
excel-letztes-aendern-speichern-oeffnen-drucken-des-dokuments-vba-resultat
„Das Gelernte anwenden“ nochmal etwas visualisiert 😉

google-software-reporter-tool-cleanup-disable-deactivate-banner
Quelle: https://unsplash.com/photos/Xm3SPoOvNXs

Googles Software Reporter Tool, kurz SwReporter, ist schon ein mysteriöses Stück Software. Es ist nicht so leicht, irgendwelche Infos über Sinn, Zweck und Funktionsweise des Programms herauszufinden. Was auch daran liegt, dass das Tool eine Erweiterung des Chrome Cleanup Tools (CCT) ist. Das ist wiederum bekannter. Ich fasse mal meine Recherche zusammen, darunter noch ein paar Links für Interessierte.

Was ist der Software Reporter?

Der Software Reporter als Bestandteil des Chrome Cleanup Tools (CCT) wird mit Chrome installiert, befindet sich in einem Chrome Unterordner, wird dort auch regelmäßig aktualisiert und seine Aktivität kann nicht beeinflust oder deaktiviert werden. Das Programm wird in regelmäßigen Abständen (angeblich wöchentlich) automatisch unsichtbar im Hintergrund ausgeführt und ist dann für einige Minuten (angeblich +- 15 Minuten) mit niedriger CPU-Auslastung (als normaler Hintergrundprozess) am Arbeiten.
Das Tool soll angeblich nur Teile des Systems durchsuchen, die mit Chrome zusammenhängen und dort sowohl nach inkompatibler Software als auch Schadware scannen. Gemeint sind auch schädliche Extensions, Suchanbieter, Downloads und mehr. Metadaten von Funden werden an Google geschickt.

Über das Chrome Cleanup Tool mit all seinen Sicherheits- und Scanfeatures könnt ihr hier mehr lesen:
winfuture.de, vice.com, @justinschuh Tweets, Unwanted Software Protection Abschnitt der Google Chrome Privacy Whitepaper, Vorstellungsblogbeitrag, Google Hilfe

Mit dem nötigen Grundwissen kann nun jeder selbst entscheiden, ob das Tool eine erwünschte oder unerwünschte Aufgabe erfüllt und ob das Beeinträchtigung-Nutzen-Verhältnis positiv ausfällt. Für alle, die den Software Reporter deaktivieren möchte, erläutere ich nun, wie das geht:

Wie deaktiviere ich den Software Reporter?

Grundlegend ist es recht einfach: Wir entziehen dem gesamten System, inklusive Chrome also, die Berechtigung, das Programm auszuführen, zu aktualisieren oder neu einzurichten.
Öffnet den Pfad, in dem der Software Reporter liegt: C:\Users\[Nutzername]\AppData\Local\Google\Chrome\User Data\SwReporter\
und löscht alle Unterordner (vermutlich zwei), die quasi nur Versionsnummern als Ordnernamen haben.

  1. Rechtsklick auf den Ordner SwReporter -> Eigenschaften
  2. Öffnet den Sicherheit Tab
  3. und klickt darin auf Erweitert.
  4. Prüft, dass ihr selbst der Besitzer des Ordners seid. Das sollte der Fall sein. Wenn nicht, setzt euren Nutzeraccount über „Ändern“ als Besitzer.
  5. Klickt auf Vererbung deaktivieren und wandelt mit der ersten Option im folgenden Popup diese in explizite Berechtigungen um.

Berechtigungseinschränkungen clever wählen!

So gut wie alle Quellen im Netz nutzen diese Strategie. ABER sie machen auch alle denselben Fehler, denn sie entziehen die Berechtigungen unnötigerweise zu restriktiv, löschen beispielsweise alle Berechtigungen komplett. Nun darf man aber selbst den Ordner nicht mehr betreten, sonst werden die Berechtigungen wieder gesetzt und Chrome kann den Software Reporter wieder aktivieren.
Wir achten aber darauf, dass wir selbst nicht komplett handlungsunfähig sind und den ehemaligen Problemherd im Auge behalten können.

  1. Wir wählen jeden der drei Nutzer in der Liste nacheinander aus und führen jeweils die folgenden Schritte aus:
  2. Bearbeiten klicken, um die Rechtebearbeitung zu öffnen
  3. und mit Klick auf „Erweiterte Berechtigungen anzeigen“ die erweiterten Optionen anzeigen.
  4. Nun übernehmt ihr die Einstellungen des folgenden Screenshots: Es werden die Schreibrechte auf Dateien, Ordner und Attribute entfernt, Lese- und Schreibberechtigungen der Berechtigungen und das Auflisten des Ordners weiterhin erlaubt. Da Chrome aber für die Verwaltung des Software Reporters keine Berechtigungen setzen kann, ist es hiermit machtlos.
    Der Vorteil: Dadurch, dass die Auflistung des Ordnerinhalts noch erlaubt ist, können wir den Ordner immernoch betreten.

Vertrauen ist gut, Kontrolle ist besser

Nun hat Chrome keine Schreibberechtigungen mehr auf diesen Ordner, Dateien ausführen kann es auch nicht mehr (da wir vorher das Tool aus dem Ordner gelöscht haben, ist es eh nicht mehr drin) und ist somit ausgesperrt. Der Vorteil: Wir selbst können noch in den Ordner gucken und somit überprüfen, dass Chrome hier tatsächlich keine Ordner oder Dateien mehr anlegt, das kann man ja hin und wieder mal prüfen. Hätten wir alle Berechtigungen komplett entfernt, könnten bzw. dürften wir den Ordner selbst nicht mehr betreten und wären somit blind in der Hoffnung, dass Chrome darin nichts mehr macht.

Ich habe außerdem die Erfahrung mit anderen Programmen gemacht, dass sie gerne Fehler schmeißen und nicht mehr funktionieren, wenn man ihnen einfach komplett alle Berechtigungen auf Programmdateien oder -Ordner wegnimmt, da der Code versucht darauf zuzugreifen und sie gar nicht mehr findet. Wenn man nur Ausführung und Schreibrechte entfernt, sind die Auswirkung auf die Funktionsweise meist nicht so erheblich und teilweise ist dann wirklich nur die unerwünschte Funktionalität deaktiviert.

marc-olivier-jodoin-0TB3AiOu2g4-unsplash

Kürzlich fragte mich Blogbesucher Sebastian nach Hilfe: Mittels Batch-Skript sollen innerhalb eines Ordners, in einer bestimmten Unterordnertiefe, bestimmte Ordner umbenannt werden. In dem Artikel des Kommentars hatte ich Hilfestellung gegeben, bestimmte Aktionen auf alle Unterordner eines Ordners auszuführen. Die Einschränkung, diese Aktionen nur auf ein bestimmten Level von Unterordnern auszuführen, gab es nicht. Schauen wir uns das mal an.

Auslesen von tiefen Ordnerstrukturen

Die Grundstruktur bleibt erstmal gleich: Mit for /d in ([order]\*) do () werden Befehle auf alle Unterordner eines Ordners ausgeführt. Mit dem zusätzlichen Parameter /r durchsuchen wir rekursiv tiefe Ordnerstrukturen und ignorieren sogar Dateien für mehr Performance.

batch-deep-recursion-folder-manipulation-tiefe-ordnerstrukturen-bearbeiten-ausgabe
Mit for /d /r tiefe Ordnerstrukturen durchlaufen und ausgeben

Der Befehl wird dann leicht umgebaut: for /d /r "[ordner]" %%i in (*) do ()
Dann noch etwas Ausgabe mit dazu und wir haben fast den tree Befehl nachgebaut 😉

@echo off
setlocal enableDelayedExpansion 

for /d /r "%cd%" %%i in (*) do (
	echo %%i
)
pause
endlocal

Erkennung der Tiefe des aktuellen Ordners

Jetzt brauchen wir eine Erkennung der Tiefe. Das hat mich etwas länger beschäftigt als gedacht.
An die Tiefe der Rekursion von for /d /r scheint man leider nicht zu kommen und mehrere nicht-rekursive for-Schleifen ineinanderschachteln ist zu unflexibel. Stattdessen war folgender späterer Gedanke attraktiv einfach: Die Backslashes im Ordnerpfad zählen und damit die Tiefe erkennen.
Etwas sehr simpel aber das einzige, das ich erfolgreich umsetzen konnte. Wer hier einen besseren Ansatz hat, gerne ein Kommentar hinterlassen.

Das Zählen von Zeichen in einem String ist in Batch leider kein Einzeiler, aber das Rad muss ja nicht neu erfunden werden. Hier hat schonmal jemand eine Funktion dafür geschrieben. Möglich wäre auch die Nutzung von Powershell mit dem [string].split() Befehl, jedoch ist die Nutzung von Powershell in Batch ein Fass, dass wir hier jetzt nicht öffnen.

Nun zählen wir für jeden Unterordner die Backslashes, subtrahieren die Anzahl der Backslashes des Ordners, in dem das Skript ausgeführt wird und erhalten damit die relative Tiefe zum Skriptordner.

@echo off
setlocal enableDelayedExpansion 

set startdir=%cd%

call :GetCharCount startLevel %startdir% \

for /d /r "%cd%" %%i in (*) do (
	echo %%i
	call :GetCharCount level %%i \
	echo absolute Tiefe: !level!
	set /a relLevel=!level!-!startLevel!
	echo relative Tiefe: !relLevel!
)
pause
endlocal

:GetCharCount
  set _S=%~2
  set /a %~1 = 0
  for /L %%i in (0,1,10000) do (
    if "!_S:~%%i,1!"=="" (set "_S=" & exit /b)
    if /i "!_S:~%%i,1!"=="%~3" set /a %~1 += 1
  )
  set "_S="
  exit /b
batch-deep-recursion-folder-manipulation-tiefe-ordnerstrukturen-bearbeiten-tiefe-ausgeben
Absolute und relative Tiefe zum Skriptordner errechnen und ausgeben.

Verarbeitung von Ordnern in Abhängigkeit von Bedingungen

So, nun kann die Logik in Abhängigkeit von der Tiefe und weiteren gewünschten Faktoren mit ifs verbaut werden.
Alle Ordner in der Tiefe X UND mit dem Ordnernamen Y sollen umbenannt werden? Ich habe das beispielhaft (mit viel debug output) mal umgesetzt:

@echo off
setlocal enableDelayedExpansion 

set startdir=%cd%
set renameFrom=BitteUmbenennen
set renameTo=NeuerOrdnername
call :GetCharCount startLevel %startdir% \

for /d /r "%cd%" %%i in (*) do (
	echo ----
	echo %%i
	call :GetCharCount curLevel %%i \
	set /a relLevel=!curLevel!-!startLevel!
	for %%J in (%%i) do set foldername=%%~nxJ
	echo absolute Tiefe: !curLevel!
	echo relative Tiefe: !relLevel!
	echo Ordnername: !foldername!
	if !relLevel!==3 if "!foldername!"=="!renameFrom!" (
		echo **** RENAME ****
		set oldPath=%%i
		set newPath=!oldPath:%renameFrom%=%renameTo%!
		echo !newPath!
		move !oldPath! !newPath!
		echo ****
	)
)
pause
endlocal

:GetCharCount
  set _S=%~2
  set /a %~1 = 0
  for /L %%i in (0,1,10000) do (
    if "!_S:~%%i,1!"=="" (set "_S=" & exit /b)
    if /i "!_S:~%%i,1!"=="%~3" set /a %~1 += 1
  )
  set "_S="
  exit /b
batch-deep-recursion-folder-manipulation-tiefe-ordnerstrukturen-bearbeiten-umbenennen
Tiefe Ordnerstrukturen werden durchsucht und (beispielhaft) abhängig von der Tiefe und dem Ordnernamen umbenannt

Das ist jetzt natürlich beliebig erweiterbar aber das Prinzip sollte klar werden. Mehrere Voraussetzungen können einfach durch aneinanderreihen von ifs geprüft werden, quasi eine Einzeiler-Verschachtelung. Den aktuellen Ordnernamen ziehen wir mittels for-Befehl raus. Den neuen Ordnernamen bauen wir dank Batch String Manipulation. Das wäre in Powershell vermutlich ein Fünfzeiler aber sowas sieht in Batch irgendwie immernoch „schön“ aus 😉

Finale Version mit mehr Funktionen

Ich habe es vielleicht etwas übertrieben aber ich finde es immernoch interessant und unterhaltsam, in Batch zu coden, auch wenn es super umständlich ist und mit jeder Programmiersprache vermutlich einfacher wäre. Die finale Version beinhaltet weitere Möglichkeiten:

  • Steuerung des Tools mittels Parameter statt fest in den Code eingetragene Variablen – somit ließe sich das Ganze auch in eine .exe verwandeln und flexibel einsetzen. Optionale Modi (siehe unten), Ordnertiefe, Ziel und beliebig viele Quellordner könnt ihr beim Aufruf mit übergeben. Wenn das Programm ohne Parameter gestartet wird, wird eine Hilfe zur Nutzung ausgegeben.
  • Die Angabe mehrerer Quellordnernamen, die in einem Zielordner vereint werden sollen – die Dateien aller dieser Ordner werden im Zielordner derselben Ebene gesammelt.
  • Test-Modus zum Ausprobieren der Einstellungen. Im Testmodus geschieht alles so wie im Normaldurchlauf, nur dass die tatsächliche Datenverarbeitung übersprungen wird. Eine Ausgabe, wo sonst eine Dateiaktion passiert wäre, gibt es trotzdem.
  • Verbose- und Silent-Modus für viel oder wenig Ausgaben während der Abarbeitung. Im Silent-Modus gibt es nur 1 Ausgabe je Ordner, der umbenannt wird. Im Verbose Modus habt ihr viel zu Scrollen! 😉

Der Quelltext hier hier einsehbar: Code anzeigen

@ECHO off
SETlocal enableDelayedExpansion 

REM Author: Hannes Schurig
REM Date: 02.09.2019
REM More: https://it-stack.de/05/08/2019/tiefe-ordnerstrukturen-untersuchen-und-verarbeiten-mit-batch-2019

SET startdir=%cd%

IF "%1"=="" (
	ECHO ## USAGE ##
	ECHO.
	ECHO thistool.bat [--test] [--verbose] [depth] [renameTo] [renameFrom]
	ECHO test [optional]: Use "--test" to run in test mode. Normal outputs but no rename will actually be triggered.
	ECHO verbose [optional]: Use "--verbose" to get lots of output, without this there will be just one output per rename done.
	ECHO depth: In which folder level [relative to this tool] will rename do its work?
	ECHO renameTo: Folder name to rename to.
	ECHO renameFrom: As many folder names as you want that will get renamed. Foldernames with spaces in double quotes.
	ECHO.
	ECHO ## Exemplary ##
	ECHO.
	ECHO thistool.bar --test 3 newName "old Name 1" oldName2
	ECHO would run this tool in test-mode [no renames will be done] and both folders "old Name 1" [without quotes]
	ECHO and oldName2 in folder level 3 below this tools folder will trigger the rename process.
	ECHO thistool.bat --verbose 4 "new folder" "old Name" anotherFolder
	ECHO This will actually rename anotherFolder and "old Name" to "new folder" [both without quotes] in 4-level-deep subfolders 
	ECHO and output lots of stuff.
	PAUSE
	ENDLOCAL
	EXIT /B
)

:OptionalParams
REM number detection from: https://stackoverflow.com/a/17585404
ECHO(%~1|findstr "^[-][1-9][0-9]*$ ^[1-9][0-9]*$ ^0$">nul && GOTO :RequiredParams
IF "%1"=="--test" SET test=test&&SHIFT
IF "%1"=="--verbose" SET verbose=verbose&&SHIFT
GOTO :OptionalParams

:RequiredParams
SET depth=%1
SHIFT
SET renameTo=%1

SET "renameFrom=%*"
SET "renameFrom=!renameFrom:*%1 =!"
GOTO :LetsGo

:LetsGo
CALL :GetCharCount startLevel %startdir% \
IF "!verbose!"=="verbose" (
	ECHO ##############################
	ECHO verbose: !verbose!
	ECHO test: !test!
	ECHO depth: !depth!
	ECHO renameTo: !renameTo!
	ECHO renameFrom: %renameFrom%
	ECHO startdir: !startdir!
	ECHO level of startdir: !startlevel!
	ECHO ##############################
)

pause

FOR /d /r "%cd%" %%A IN (*) DO (
	CALL :GetCharCount curLevel "%%A" \
	SET /a relLevel=!curLevel!-!startLevel!
	FOR %%B IN ("%%A") DO SET "foldername=%%~nxB"
	IF "!verbose!"=="verbose" (
		ECHO ----
		ECHO %%A
		ECHO absolute Tiefe: !curLevel!
		ECHO relative Tiefe: !relLevel!
		ECHO Ordnername: !foldername!
	)
	IF !relLevel!==!depth! (
		FOR %%C IN (%renameFrom%) DO (
			SET tempRenameFrom=%%C
			SET cleanFolderName=!tempRenameFrom:"=!
			IF "!foldername!"=="!cleanFolderName!" (
				CALL :RenameFolder %%C "%%A"
			)
		)
	)
)

pause
endlocal
EXIT /B

:RenameFolder
	SET renameFromActual=%~1
	SET oldPath=%~2
	SET cleanRenameTo=!renameTo:"=!
	SET newPath=!oldPath:%renameFromActual%=%cleanRenameTo%!
	IF "!verbose!"=="verbose" (
		ECHO **** RENAME ****
		ECHO From: !oldPath!
		ECHO To: !newPath!
	) ELSE (
		ECHO *** Ordner !oldPath! wird umbenannt!
	)
	IF NOT "!test!"=="test" (
		IF NOT EXIST "!newPath!" (
			move "!oldPath!" "!newPath!">nul
		) ELSE (
			COPY /Y "!oldPath!" "!newPath!">nul
			RD /S /Q "!oldPath!">nul
		)
	) ELSE (
		ECHO Test-Modus aktiv, !oldPath! wird nicht umbenannt.
	)
	ECHO.
	EXIT /B

:GetCharCount
	SET _S=%~2
	SET /a %~1 = 0
	FOR /L %%i IN (0,1,10000) DO (
	IF "!_S:~%%i,1!"=="" (SET "_S=" & exit /b)
	IF /i "!_S:~%%i,1!"=="%~3" SET /a %~1 += 1
	)
	SET "_S="
	EXIT /B

Nutzung des Skripts

Das Skript wird über Paramter beim Aufruf gesteuert:

rename.bat [--test] [--verbose] [depth] [renameTo] [renameFrom]

### Was machen die Parameter? ###
--test: Startet den Testmodus des Tools. Es läuft normal durch, gibt normale Ausgaben aber der Umbenennungs-Befehl wird nicht ausgeführt. Gut zum Testen.
--verbose: Mit dem --verbose Parameter werden viele hilfreiche Ausgaben während der Ausführung gemacht. Ohne diesen Parameter gibt das Tool ausschließlich 1 Zeile pro erfolgter Umbenennung aus, nicht mehr.
depth: In welcher Ordnertiefe werden die Ordner geprüft und umbenannt?
renameTo: Neuer Ordnername
renameFrom: Beliebig viele alte Ordnernamen, die umbenannt werden sollen

### Beispielhafte Aufrufe ###
rename.bat --test 3 NeuerName AlterName1 "Alter Name 2"
rename.bat --test --verbose 4 "Neuer Ordner" "Alter Ordner" Testordner
usw.

@Sebastian: Ich hoffe, deine Anfrage ist damit erfolgreich beantwortet und du kannst den Code so für deine Zwecke einsetzen. Sag Bescheid, wenn du noch Hilfe brauchst.

Das Jahr 2019 hat ja „gut“ angefangen: Anfang Januar ein großer Leak im Bereich Politik und öffentliche Personen sowie Ende Januar ein weiterer Leak mit 2,7 Milliarden Zeilen an Daten. Obwohl Letzterer wohl „nur“ rund 770 Millionen valide Datensätze enthielt, war es einer der größten Accountdaten-Leaks der letzten Jahre. 2018 war bereits mit Leaks und den großen CPU-Lücken Meltdown und Spectre recht kritisch.
Das zeigt doch, dass es selten wichtiger war als heutzutage, seine digitalen Accounts und Netzwerke sowie Technik und Geräte zu schützen. Aus diesem Grund habe ich mal ein paar Tipps und Links zusammengetragen, die zu mehr Sicherheit verhelfen, wenn ordentlich umgesetzt:

  1. Prüft auf den bekanntesten Internetseiten, ob eure Daten bereits von Leaks/Hacks betroffen sind. Schaut mal in meinen Leak-Check-Artikel, den habe ich auch nochmal aktualisiert. Die wichtigsten Anlaufstellen bleiben der Identity Leak Checker meines aktuellen Arbeitgebers 😉 (HPI) und HaveIBeenPwned.com (ins Deutsche übersetzte Infos dieser Seite gibt es auf dieser Seite).
  2. Setzt sichere und lange Passwörter und am besten unterschiedliche Passwörter für jeden eurer Logins/Seiten/Dienste! Dazu gehören Passwörter mit mehr als 12, besser mehr als 14 Zeichen aus allen Zeichengruppen (Groß- und Kleinbuchstaben, Sonderzeichen, Zahlen).
    Somit wäre ein öffentliches Passwort nur riskant für diese 1 Seite, das Passwort wäre nicht weiterzuverwenden. Ich verwende schon ewig unterschiedliche Passwörter mit mehr als 16 Zeichen für jeden meiner Logins. Da sich das auf Dauer und bei der Anzahl (ich habe über 300 Zugangsdaten…) niemand merken kann, empfehle ich hier einen Passwortmanager. Ich selber nutze KeePass, da dieser kostenlos und gut erweiterbar ist, aber es gibt etliche Alternativen, die nur ein paar Euro kosten. Zusätzlich können im Passwortmanager auch wichtige und kritische Infos, beispielsweise Kreditkarteninformationen, hinterlegt werden. Das Masterpasswort für den Safe sollte bezüglich Länge und Komplexität euer Meisterwerk werden 😉 Die meisten Programme bieten auch an, den Safe mit mehreren Sicherheitsfeatures zu schützen. Neben dem Masterpasswort kann somit ein Key File oder USB Dongle erforderlich sein, um den Safe zu öffnen. Prüft hier mal, was eure Software kann und erfordert im besten Fall mindestens zwei Zugangsmethoden.
  3. Aktiviert alle möglichen Sicherheitsfeatures eurer Accounts: Je nach Anbieter werden euch meistens verschiedenste Features zur Verfügung gestellt, welche den Zugang zum Account im Normalfall oder im Notfall (Passwort vergessen, E-Mail-Adresse nicht mehr verfügbar) gewährleisten sollen. Aktiviert diese Features und füllt sie mit euren Daten.
    1. 2-Faktor-Authentifizierung ist sowieso ein Muss für alle wirklich wichtigen Dienste, alles was mit Geld und großen Mengen eurer persönlichen Informationen zu tun hat.
    2. E-Mail-Benachrichtigungen aktivieren bei bestimmten Events, beispielsweise wenn Geld abgehoben, das Passwort geändert wird oder fehlerhafte Logins erfolgten.
    3. Konto-/Passwort-Wiederherstellungsfunktionen aktivieren; hier müssen meist weitere Infos wie Handynummern bereitgestellt werden oder Sicherheitsfragen festlegen, um im Notfall alternativen Zugriff zu bekommen. Vorsicht bei den Sicherheitsfragen: Die Antworten darauf solltet nur ihr selbst wissen und nicht irgendwo im Netz über euch herausfindbar sein.
  4. Wenn ihr Google und dessen Dienste so intensiv nutzt wie ich, empfehle ich vor allem hier alle Sicherheits- und Datenschutzeinstellungen durchzugehen. Ihr könnt hier wirklich sehr viel anpassen. Lest dazu meinen Artikel, dort liste ich alle Informationen kurz und knapp auf.
  5. Schützt alle Geräte und Hardware ebenso gut wie die digitalen Accounts: Gute PINs und Passwörter, Backups (vielleicht in einer sicheren deutschen Cloud?), Geräteverschlüsselung, zusätzlich Fingerabdruck/Gesichtserkennung, Anti-Diebstahl-Schutz eurer Smartphones sowie allgemein gute Sicherheitseinstellungen, Sicherheit und Backups einzelner Apps prüfen. Ein paar Android Basics noch, die können irgendwann mal helfen.
  6. Als Webseitenbetreiber habt ihr zudem zusätzliche Verantwortung mit euren Seiten und solltet auch dort die Sicherheit eurer Besucher gewährleisten und optimieren. Dazu gehört ein gut abgesichertes Backend/Logins, Optimierungen ausgehender Mails, optimierte HTTP-Header, regelmäßige Backups, verschlüsselte Passwörter in der DB, unterschiedliche Passwörter für Backend/DB/FTP/SSH oder Zugriff nur per SSH Key statt Passwort.
  7. Schützt eure Betriebssysteme und Software und haltet diese auf dem neuesten Stand. Die aktuellste Version von OS, Software und App schützt euch bestmöglich gegen aktuell bekannte Schwachstellen dieser. Zieht euch die Updates im besten Falle immer von den offiziellsten Quellen – Software von der Webseite der Software/des Betreibers, Apps aus dem offiziellen App-Store. Vermeidet Software-Downloader oder Portale wie CHIP, Netzwelt oder freeware.de – dort wird gerne ungewollter Kram untergejubelt. Installiert zusätzlich Sicherheitssoftware gegen Viren und ggf. gegen Werbung, wenn ihr euch unsicher fühlt oder bestmöglich vorsorgen wollt.
  8. Spam und Phishing ist zwar ein alter Hut aber noch immer nicht ausgestorben. Ganz im Gegenteil erhalten wir mittlerweile zwar wenig aber dafür teilweise recht gute unerwünschte E-Mails. Achtet also auch heute immernoch sehr kritisch und mit der nötigen Vorsicht bei Mails auf ihre Echtheit. In meinem vorherigen Artikel habe ich über die Standard-Tipps bei der Erkennung von Spam und Schadmails geschrieben. Wer sich bei dem Thema noch unsicher fühlt, sollte mal reinlesen.
  9. Nutzt Verschlüsselung wo immer möglich. Verschlüsselte Messenger wie Threema oder Signal (und an sich auch Whatsapp) übermitteln die Kommunikations mit Ende-zu-Ende-Verschlüsselung. Mails lassen sich beispielsweise mit PGP verschlüsseln und manche Anbieter wie ProtonMail haben das direkt schon unsichtbar integriert. Verschlüsselte Daten-Safes beispielsweise mit VeraCrypt sind sichere Ablageorte für kritische Dokumente und Daten. Sichere Cloudanbieter mit Verschlüsselungs-/Passwortfeature sind ebenfalls praktisch.

Ich denke das reicht erstmal als Grundlage, da geht sicher noch einiges mehr. Schickt mir gerne weitere Hinweise und Punkte, die ich hier dann noch ergänzen werde. Bis dahin: Stay safe! 🙂

anti-spam-basics-fuer-versender-spf-dkim-dmarc-samuel-zeller-367977-unsplash

Spam Allgemein

Spam-Mails gehören leider immnoch zum Alltag. Die meisten Anbieter sind mittlerweile sehr gut in der Erkennung und filtern bis zu 99% davon raus. Das heißt aber, dass die restlichen 1% der unerwünschten Mails so gut „gemacht/getarnt“ sind, dass sie durch automatische Anti-Spam-Filter nicht erkannt wurden. Ihr müsst nun also schlau und informiert genug sein, um diese letzten ungewünschten E-Mails erfolgreich zu erkennen und zu vernichten.
Den Begriff „Spam(-Mails)“ verwende ich in diesem Artikel mal als Oberbegriff für alle Formen unerwünschter Mails, auch wenn Spam inhalt nicht ganz korrekt ist. Der Begriff ist den meisten Menschen aber negativ Genug im Bewusstsein, sodass es sich einfacher liest als „Malicious Mails“.
Je nach Sinn und Zweck der Mail, soll diese den Nutzer ausspähen oder Werbung verbreiten (Spam), Nutzerdaten durch gefälschte Seiten und Formulare abfangen (Phishing), den Rechner infizieren oder anderen Schaden anrichten (Malware Mails). Somit sind sie neben dem zeitlichen Aufwand der Prüfung aber vor allem eine Gefahr für PC und User, wenn sie nicht erkannt und beseitigt werden. Bestenfalls markiert ihr alle gefundenen Mails als Spam, das bieten die meisten Web-Mailer an und es verbessert die Algorithmen und Erkennungsraten.

Wie erkennt man Spam Mails?

Bei Billionen Spam Mails gibt es natürlich kein eindeutiges Kennzeichen, jedoch mittlerweile ziemlich klare Strategien zur Erkennung von schädlichen Mails. Viele Sicherheitsmaßnahmen werden bereits angewendet bevor die Mail zum Nutzer gelangt. Wenn dann aber doch eine Mail im Postfach eintrudelt, ist der Nutzer gefragt. Also, hier die Basics zum Erkennen von Spam.

Logisches Denken (immer eine gute Methode)

Generell sollte erst einmal abgewägt werden, ob diese Mail überhaupt eine Daseinsberechtigung im Postfach hat. Die Deutsche Bank warnt mich vor unzureichender Sicherheit meines Kontos obwohl ich gar kein Konto bei dieser Bank habe? Da könnte wohl was faul sein 😉
Wurde also mit der E-Mail Adresse, bei der die Mail einging, tatsächlich der angesprochene Service benutzt? Nein, dann entweder direkt entsorgen oder mit umso mehr Argwohn die folgende Punkte unter die Lupe nehmen.

Der Absender und die E-Mail Adresse

Mit ein klein wenig IT- und Programmiererfahrung ist es ein Leichtes, E-Mail Absender, Absenderadresse und andere Informationen der E-Mail an sich zu fälschen. Ich habe das vor einem Jahrzehnt in meinem Fake-Mail Artikel schonmal in seiner einfachsten Grundlage erläutert. Also selbst wenn der Absender „Amazon“ <info@amazon.de>, „Steve Jobs“ <jobs@apple.com> oder „Hannes Schurig“ <schurigh@gmail.com> ist, sollte die Mail bei Verdacht auf Spam genauestens untersucht werden. Ein Großteil der Spammer gibt sich hier keine bis wenig Mühe, seriös zu wirken. Hier ein paar Beispiele von schlechten bis halbwegs guten Versuchen:
„Sparkasse-deutschland“ <daveanna@megalink.net>
„Google Incorporation“ <noreply@googleincuk.com>
„Sparkass“ <Informationen@sparkasse.de>
„Sparkasse“ <noreply@sparkasse.de
Die letzten 2 Adressen wären grundsätzlich legitime E-Mail-Adressen der Sparkasse, wobei die dritte mit einem Großbuchstaben ungewöhnlich formatiert wäre. Der Spammer geht hier zusätzlich das Risiko ein, dass eure Antworten auf diese Mail (auch wenn die wenigstens auf sowas mit einer Antwort-Mail reagieren) nicht bei ihm landen sondern bei dem echten Besitzer der gefälschten Adresse – z.B. informationen@sparkasse.de, falls es diese Adresse geben sollte. Dem Spammer ist das aber vermutlich egal, er möchte euch eh nur zum Öffnen eines Links oder eines Anhangs verleiten und keine Antworten bekommen. 

Der Betreff und Text

In den besseren E-Mails werden dem Nutzer im Text einige Informationen präsentiert, die sich schlüssig anhören können: Konto gesperrt, neue Sicherheitsfeatures für das Konto können aktiviert werden, unbekannte oder fehlerhafte Zahlungen oder Abbuchungen müssen bestätigt werden, ungewöhnliche Kontobewegungen oder Nutzeraktivitäten, irgendwie sowas. Erster Hinweis auf unerwünschte Mails ist natürlich schlechtes oder zumindest leicht fehlerbehaftetes Deutsch. Warum auch immer die Spammer sich bis heute keine Mühe geben, eine einzige Spamvorlage in lupenreinem Deutsch zu verfassen, weiß ich nicht. Aber gut für uns.
Dies sind meistens auch E-Mail-Texte, die nach Massenmails aussehen, also beispielsweise mit „Sehr geehrte/r Frau/Herr“, „Liebe User“ oder einer anderen unpersönlichen Anrede beginnen.
Auch in groß angealegten seriösen Rundmails steht heutzutage fast immer euer Nutzername/Name drin, das können die Firmen mittlerweile schon.

Das Design

Als nächstes ist das Design entscheidend. Mails von größeren Unternehmen sehen stimmig aus: Logo, Hintergrundfarbe, Umrahmung des Textes, einheitliche Schriftart und guter Textstil, die meisten Unternehmen geben sich hier viel Mühe. Umso besser fallen schlechte Spam Mails ohne jegliche Formatierung oder mit nur 1 Logo lieblos reingeklatscht auf.

Der Link/URL

Spam Mails, die im Endeffekt Daten klauen oder Schaden anrichten sollen, sind in erster Linie an einer der zwei folgenden Punkten zu erkennen: Entweder haben sie einen Anhang oder einen Link in der Mail.
Selbstverständlich öffnet ihr erstmal keine Links und Anhänge, wenn die Mail und der Inhalt nicht vollständig seriös erscheinen.
Links vor dem Aufruf ansehen und Anhänge vorher von einem Antivirenprogramm checken lassen. Es gibt natürlich noch weitere Formen, beispielsweise mit Text den Nutzer dazu zu bringen, eine Überweisung zu tätigen oder andere Handlungen einzufordern. Aber ich denke das ist klar soweit, dass niemand einfach so Geld irgendwohin überweist, um damit einen Gewinn/Jackpot in Anspruch zu nehmen oder die Lieferung eines wertvollen Gegenstandes zu bezahlen.

Am häufigsten wird versucht, mittels eines Links den Nutzer auf eine gefälschte oder sonstwie vorbereitete Seite zu ziehen. Auf dieser Seite sollen die Nutzer dann private Informationen eingeben, beispielsweise Kontodaten – hier handelt es sich dann um klassisches Phishing. Also der Link, der in solchen Spam Mails immer enthalten ist, sollte besonders aufmerksam angeschaut werden. Der Link wird meistens angezeigt, wenn man mit der Maus über den Linktext fährt. Wenn das nicht geht, lassen sich die Links oftmals per Rechtsklick-Menü kopieren und zumindest in einem Texteditor vorbetrachten. Aber bitte nicht Linksklicken.
Bei 90% der Spam Mails sind vor allem die Links/URLs verräterisch, hier ein paar typisch schlechte Beispiele:
(ACHTUNG! LINKS NICHT ÖFFNEN)
http://juwenalia.poznan.pl/amazon/0?m=meinemail@gmail.com
http://raevin.org/admin/other/sparks/0
http://www.teprometoanarquia.com/wp-admin/includes/sparkassed/0
http://stcde.pt/libraries/phputf8/utils/sparkassed/0
http://rutaverde.cl/language/spakolp/0

Manchmal sieht man hier aber schon bessere Versuche:
(ACHTUNG! LINKS NICHT ÖFFNEN)
http://sparkase.de/kundencenter/kontowiederherstellung/
http://berliner-sparkasse.de.tf/kundencenter/kontowiederherstellung/
http://e.bay.de/kontowiederherstellung/
Es geht also darum in der Top Level Domain zwar auf den ersten Blick eine seriöse URL stehen zu haben, welche jedoch entweder durch kleine Buchstabenverdreher, zusätzliche oder fehlende Buchstaben verfälscht wurde oder weitere Top-Level-Domainendung besitzt. Diese Domains können sich Spammer normal registrieren und somit die Chance auf Klicks erhöhen.
Besucht der Nutzer nun eine solche Seite, ist es meistens schon aber nicht unbedingt erkennbar, ob es sich hier um eine gefälschte oder echte Seite des Anbieters handelt. Sollte das Design ungewöhnlich sein, die Seite nicht zum eigentlichen Anbieter passen, der Text in der falschen Sprache sein, reagiert mit Vorsicht.
Die Seite selbst kann aber auch komplett seriös aussehen; beispielweise ist es vergleichsweise leicht, das komplette Webseitendesign von Amazon oder einer beliebigen anderen Internetseite zu kopieren und ein Eingabeformular damit nachzubauen. Auch die URL in der Adresszeile des Browsers kann Aufschluss geben. Diese wäre zwar auch mit 1 Codezeile Javascript fälschbar, diese Technik wird aber selten von Phishern benutzt.

Demo / Test

Hier mal ein perfektes Beispiel für ein gut gewolltes aber nicht ausreichend gut umgesetztes Phishing-Beispiel:

Folgende Merkmale entlarven diese Mail als Spam/Phishing:

  1. Der Betreff ist für einen kritischen Inhalt wie „ungewöhnliche Kontobewegungen“ viel zu generisch, das würde Amazon so nie machen. Eine Konto-ID mit falscher Groß- und Kleinschreibung machen den Betreff nicht glaubwürdiger.
  2. Der Absender ist mit „info@amazon.de“ nicht schlecht gefälscht, aber ein „Name“, der anstatt der Mail primär angezeigt wird, fehlt und ist normalerweise aber immer vorhanden. Amazon verwendet beispielsweise „Amazon.de <versandbestaetigung@amazon.de>“.
  3. Man hat sich an ein Amazon-Design versucht, aber es wirkt noch etwas unfertig. Es fehlt Spacing über dem Logo und ein paar mehr Informationen, die Amazon auch im Jahre 2014 schon in den Mail Footer gepackt hat – Links, Impressum, Hinweise für den Kunden usw.
  4. Die allgemeine Anrede „Lieber User“ ist ein Killer bei dem
    „ungewöhnliche Kontobewegungen“ Inhalt. Hier müsste selbstverständlich euer Name stehen.
  5. Der Text ist von der Satzstruktur nicht optimal und es fehlen mehrere Kommata.
  6. Zu guter Letzt der Link: Hier wurde probiert, mit einem Linktext nicht direkt den auffällig unseriösen Link zu verschleiern, aber per Mouseover wird dieser natürlich trotzdem gezeigt.

Fazit

Mit diesen Tricks solltet ihr Spam und andere unerwünschte Mails mit einer sehr hohen Chance erkennen und aussortieren können. Damit sorgen wir gemeinschaftliche dafür, die Statistik der Spammer noch unwirtschaftlicher zu machen. Denn laut diesem FAZ Artikel (etwas älter aber vermutlich immernoch wahr), müssen Spammer ca. 12 Millionen Pharma Werbemails verschicken, um einen einzigen Nutzer zum Kauf eines solchen Produktes zu bewegeben. Die Rate muss noch mehr versaut werden! 🙂

Vor einigen Tagen, im Januar 2019, wurde ein weiterer Meilenstein von Google’s Deepmind im Bereich der Künstlichen Intelligenzen eindrucksvoll präsentiert. In einem Livestream wurde die neue KI namens AlphaStar vorgestellt, eine Starcraft 2 spielende Intelligenz. Mal vom Einsatzgebiet abgesehen ist die Art und Handlungskomplexität der KI ein riesiger Schritt vorwärts.

In meiner Schnell geschaut #3 Episode habe ich über Deepind’s AlphaGo geschrieben, die das Brettspiel Go gemeistert hatte. Wer Go und das Spielprinzip kennt, sowie Starcraft 2, kann den Unterschied der Komplexität dieser Spiele vielleicht erahnen. Go hat mit dem 19×19 Feldern großem Spielfeld, der Eindeutigkeit von Aktionen und dem Prinzip des rundenbasierten Spielens eine „berechenbare Größe und Komplexität“. Starcraft als Echtzeitstrategiespiel mit einer schier unbegrenzten Menge an Möglichkeiten in jeder Sekunde (oder sogar Millisekunde in intensiven Spielmomenten) scheint hier noch chaotischer zu sein. Economy, Einheiten mit ihren Fertigkeiten, Gebäude, Spielfeldkontrolle, Mikro- und Makromanagement, Taktiken und Kontertaktiken, Bewegungssteuerung… absolut chaotisch, der Realität gar nicht mehr so weit entfernt.

In diesem Tweet von @Liv_Boeree wird die Komplexität versucht in Zahlen zu packen:

Die Werte müssen jetzt nicht stimmen, es kommt ja immer darauf an, wie man diese berechnet. Das Deepmind Team spricht von 1026 Möglichkeiten zu jedem Zeitpunkt im Spiel (Starcraft 2) und verfolgt damit eine andere Rechnung. Die Hürden für das System wurden aber deutlich gemacht:

The need to balance short and long-term goals and adapt to unexpected situations, poses a huge challenge for systems that have often tended to be brittle and inflexible. Mastering this problem requires breakthroughs in several AI research challenges including:

  • Game theory: StarCraft is a game where, just like rock-paper-scissors, there is no single best strategy. As such, an AI training process needs to continually explore and expand the frontiers of strategic knowledge.
  • Imperfect information:Unlike games like chess or Go where players see everything, crucial information is hidden from a StarCraft player and must be actively discovered by “scouting”.
  • Long term planning: Like many real-world problems cause-and-effect is not instantaneous. Games can also take anywhere up to one hour to complete, meaning actions taken early in the game may not pay off for a long time.
  • Real time: Unlike traditional board games where players alternate turns between subsequent moves, StarCraft players must perform actions continually as the game clock progresses.
  • Large action space: Hundreds of different units and buildings must be controlled at once, in real-time, resulting in a combinatorial space of possibilities. On top of this, actions are hierarchical and can be modified and augmented. Our parameterization of the game has an average of approximately 10 to the 26 legal actions at every time-step.

Due to these immense challenges, StarCraft has emerged as a “grand challenge” for AI research.

Quelle: deepmind.com

Hier ist der Stream, in dem die KI gegen 2 professionelle Spieler antritt, jeweils in 5 Spielen, und dabei alle 10 Spiele gewinnt:

Im Detail gibt es hier viel zu Lernen, ich kann den Artikel von Deepmind und das ganze Thema definitiv empfehlen. Es ist wirklich erstaunlich und respektabel, wie weit die Entwicklungen hier in so kurzer Zeit gekommen sind und die Anwendungsgebiete nähern sich immer weiter der Komplexität der realen Welt an.

Alle bisherigen Schnell geschaut Folgen

Alle bisherigen Folgen