Mit batch eine datei erstellen, welche man nicht bearbeiten kann?

4 Antworten

mit sowas hatte ich mal vor Lägerer Zeit herumexperimentiert:

LookFolder.cmd :

@echo off
chcp 65001 >nul & rem Umlaute und Unicodezeichen darstellen
  rem  Macro Taste lesen (altenative  zu Choice)
set "getKey=for /f "tokens=2 delims=] skip=1" %%. in ('replace.exe ? . /u /w ^|find /n /v ""') do (set "getKey.Key=%%~.")"


  rem Hier Pfad des zu sperrenden Ordners eintragen (zB. set "folderPath=F:\Meine gehemen Fotos")
  rem zur Demo der Ordner "Look Test" in dem die Batch sich befindet... (sollte dieser nicht existieren wird er automatisch angelegt!)
set "folderPath=%cd%\Look Test"


  rem falls der Ordner nicht existiert, diesen erzeugen
md "%folderPath%" 2>nul


  rem  wenn der Ordner zum verstecken  noch nicht existiert diesen erzeugen und passwort festlegen
if not exist "%folderPath%\look.cfg" (
      rem kann ich in den Ordner screiben? (wenn der gesperrt ist habe ich keinen Zugriff)
    @(break>"%folderPath%\look.flag") 2>nul || goto :unlook
    rem unsichtbar machen
    attrib +h +s "%folderPath%\look.flag"


    echo Ordner %folderPath% erfolgreich eingerichtet.
    set /p "pw=Bitte Ordner-Passwort festlegen : "
      rem  Variable exportieren
    set "pw">>"%folderPath%\look.cfg" 2>nul
    attrib +h +s "%folderPath%\look.cfg"
    goto :end
)


echo Bist Du sicher den Ordner "%folderPath%" zu sperren (J/N)
:gkey1
%getKey%
if /i "%getKey.Key%"=="J" goto :look
if /i "%getKey.Key%"=="N" goto :end
goto :gkey1


:look
  rem Zugriff sperren0
icacls "%folderPath%"  /inheritance:r >nul 2>&1
echo Ordner gesperrt
goto end


:unlook
echo Bitte Passwort eingeben um den versteckten Ordner zu entsperren.
set/p "password=>"
  rem  Zugriff  wiederherstellen
echo entsperre Ordner, einen Moment bitte...
icacls "%folderPath%"  /reset >nul 2>&1
for /f "usebackq  delims=" %%a in ("%folderPath%\look.cfg") do (
    set "%%a"
)
if not "%password%"=="%pw%" goto :fail
    start "" explorer "%folderPath%"
)
goto :end


:FAIL
  rem schnell wieder Zugriff sperren
icacls "%folderPath%"  /inheritance:r >nul 2>&1
echo Falsches Passwort
goto end


:End
timeout 10
Bei der Wahl des Ordners sehr Sorgsam sein! Auf eine für Windows lebenswichtigem Ordner kann icacls "lw:\ordnerpfad" /inheritance:r äußerst zerstörerrisch sein!
icacls "lw:\ordnerpfad"  /inheritance:r 

...löscht alle vom übergeordneten Ordner ererbten Zugriffsrechte. Das diese nun gelöscht sind, hat auch das System keinen Zugriff mehr auf den Inhalt des Ordners!

icacls "lw:\ordnerpfad"  /reset

...übernimmt die Zugriffsrechte des übergeordneten Ordners und setzt diese für den "gesetzlosen" Ordner. damit ist der Zugriff wiederhergestellt.

Um auf den Inhalt des Ordners zugreifen zu können mus dieser für die Dauer des Zugriffs entsperrt werden! Hier geschied dies zum Beispiel für wenige Millisekunden um das im Ordner gespeichete Passwort auszulesen. (in der unsichtbaren Datei look.cfg (hidden-Atribut gesetzt) ).

Das ganze würde ich im wahrsten Sinne "Narrensicher" bezeichnen. Jemand, der sich etwas mit dem System auskennt dürfte recht schnell auf den Dreh kommen wie die Sache funktioniert und sich die nötigen Rechte verschaffen.

Angesichts der möglichen Gefahren sollte das ganze jedoch eher ein Experiment auf dem eigenen Rechner bleiben.

Eine wirklich sichere Methode um Batchcode zu verbergen. (cmd führt Batch Zeilenweise aus. Das heist die Batch muss immer in Reinform vorliegen. Das Gild auch für zu Exe konvertierte Batches!)

Wenn Deine Batch knapp 200000 Zeichen hat, schwant mir das es sich um ein Spagetticode-Anfängermonster handelt. (dann gibt es nur einen Grund den Code zu verbergen: "Scham".

Guten Code muss man nicht verstecken.

Auch wenn ich gern mal irgendwelche Sachen fabriziere, welche überhaupt nicht für Batch geeignet sind, finde ich es immer interessant, wenn Anfänger mit riesigem Aufwand tausende Zeilen Spagetticode produzieren. (das meiste lässt sich auf wenige Zeilen reduzieren. zb. https://www.gutefrage.net/frage/timer-in-batch-im-hintergrund-laufen-lassen#answer-353155644 den Code braucht man nicht verstecken, die meisten Menschen werden nicht mal annähernd begreifen wo das "Spielfeld" herkommt )

Letztlich bleibt ein Spiel in Batch eher eine Machbarbarkeitsstudie, als etwas , das man allen Ernstes irgendjemandem Anbieten kann... Für ein Spiel würde ich eher zu HTML und JavaScript greifen...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Butzibu 
Fragesteller
 09.07.2020, 06:31

Du das ist gut... .cfg war das nicht ein Format welches man aus Prinzip nicht bearbeiten konnte?

0
Erzesel  09.07.2020, 09:57
@Butzibu

Man kann jede Datei lesen...

Wenn es nur um das Sichere Speichern von Passwörtern geht?😏...

Wie wäre es einfach ein Passwort verschlüsselt in der Registry zu speichern?

Dann benötigst Du keine Datei und dein Passwort erscheint auch nirgendwo im Klartext. (Hashwerte sind nicht auf den Ursprung rückführbar!)

Selbst innerhalb der Batch ist das Passwort nur für wenige Millisekunden im Speicher . Die Temporäre Datei zum ermitteln des Hashwertes wird ebenfalls in Sekundenbruchteilen überschrieben (nicht del , da gelöschte Dateien wiederherstellbar sind)

@echo off
chcp 65001>nul


set /p "Password=Enter Password>"
  rem Hashwert des Passworts in Variable MyHash speichern
call :getHash MyHash "%Password%"
  rem nur mal  anzeigen...
echo der Hash von Passwort '%Password%' = %MyHash%
  rem PasswortVariable löschen (wir  arbeiten nur noch mit dem Hash)
set "Password="


  rem Speichere Hash in der Registry  (ohne Adminrechte nur HKCU\Software... verwenden)
reg add "HKCU\Software\Test" /v "Rumpeldidum" /d "%MyHash%" /f >nul 
echo Der Hash Deines Passworts  wurde gespeichert
echo:


  rem zweiter Teil
echo Passwort mit gespeichertem Wert vergleichen...
set /p "PWAbfrage=Enter Password>"
call :getHash AbfrageHash "%PWAbfrage%"
set "PWAbfrage="
  rem gespeicherten Hash aus der Registry lesen und mit dem Hash der Eingabe vergleichen
reg query "HKCU\Software\Test" /v "Rumpeldidum"|find "%AbfrageHash%" >nul &&(
    echo das Passwort ist richtig
)||(
    echo  Falsches Passwort
)

pause
exit /b


::::::::::: Subroutine  ::::::::

:getHash %1=VariableName %2="String"
  rem String in Temporäre Datei schreiben (immer der Hash von String+Zeilenvorshub, also nicht der Hash des puren Strings --für diesen Zweck irrelevant--)
(echo:%~2)>"%temp%\dummy.tmp"
  rem SHA512-Prüfsumme der temporären Datei ermitteln
  rem  nur die 2. Zeile der Ausgabe von  certutil lesen (Inhalt der temporären Date wird nach ermitteln der Prüfsumme vernichtet!)
for /f "skip=1" %%a in ('certutil -hashfile "%temp%\dummy.tmp" "SHA512"') do ( set "%~1=%%a"&echo:>"%temp%\dummy.tmp"& exit /b)
exit /b

...statt des Registrykeys "Test" und des WerteNamens "Rumpeldidum" kannst Du natürlich deiner Fantasie freien Lauf lassen...

Das ganze Versteckspiel kann man sich sparen.

Da Du ja wissen sollst wie es funktioniert, erscheint die Sache recht "Durchsichtig" .

Mit ein paar "Nebelbomben" (zb. Zerlegen des regKeys in Teile und neu zusammensetzen etc) dürfte es schwerfallen zu ermittel wo das Passwort gespeichert ist...

0
Butzibu 
Fragesteller
 09.07.2020, 10:23
@Erzesel

Super danke für die idee allerdings wollte ich das sich das Passwort beim benutzen einer anderen Datei abändern lässt...

also könnte ich das was du geschrieben hattest auch mit nem call verbinden?
könnte ich das löschen per cmd und wieder erzeugen sodass der Pfad gleich bleibt und trotzdem die Datei verändert wird?

0
Erzesel  09.07.2020, 16:12
@Butzibu
das Passwort beim benutzen einer anderen Datei abändern läss

..na und? ... so riesig ist die Routine ja nicht, das man sie nicht in einer anderen Batch einfügen kann. Und wie Du bei der Demo mitbekommen haben dürftest, kann man einen Registrywert wie eine Variable immer wieder neu setzen.

Ich habe keine Ahnung was Du da zauberst für mich wird es wohl ein Mysterium bleiben, wie Anfänger ticken... wozu aus einer anderen Datei ändern? Oder etwas löschen?

Ich verstehe nur Bahnhof...

Hier:https://www.gutefrage.net/frage/batch-dateien-mit-batch-erstellen#answer-357835759 ...habe ich jemandem gezeigt wie man mit Subroutinen und Selbstaufrufen umgeht... dann gibt es keinen Grund mit mehreren Batchdateien herumzuwursteln..

...Übrigens: Antworten zu honorieren scheint nicht so dein Ding zu sein...

Ich habe mal Deine Fragen durchgeschaut und finde es nicht nett von Dir wie Du mit der Hilfsbereitschaft der Helfer umgehst. Nur selten hast Du ein Daumen,Danke,Hilfreich oder gar einen Stern hinterlassen. Es macht ja soviel Mühe auf die Knöpfe zu klicken?

0
Butzibu 
Fragesteller
 09.07.2020, 21:13
@Erzesel

So wie gesagt ich habe meine Standpunkte klar geäußert für was ich das brauche kann dir eig auch egal sein mir war nur wichtig das ich es jederzeit abändern kann aber passt

0

Nein, da Batch nicht Compiliert ist. Du kannst höchstens die Datei Verschlüsseln dazu brauchst du aber wieder ein externes Programm das diese dann wieder entschlüsselt.

LG goldmensch

Butzibu 
Fragesteller
 07.07.2020, 21:19

naja ich dächte das es möglich war eine datei zu erstellen, mit der der computer nichts anfangen kann

0