(batch) Quellcode soll nicht lesbar sein / verschlüsselung eines variablen namens
nAbend,
habe batchkompiler aber die exe die entsteht erstellt auch nur wieder die batch...
ich möchte verhindern dass man die batch lesen kann
also ich kopiere meine komplierte batch (exe) in temp
und führe sie aus...
dadurch wird meine install.bat erstellt und ausgeführt allerdings wird die .bat datei nichtmehr gelöscht auch nicht wenn die batch erfolgreich mit exit endet
ist es möglich die batch noch während des vorgangs zu löschen? del %0 ? (bzw del install.bat)
oder gibt es eine andere möglichkeit die auch mit einschließt dass die batch gelöscht wird wenn sie per x button abgebrochen wird?
2. (EDIT)
verschlüsselung eines namens
abcd1234 soll zu bcde0123 umgewandelt werden per batch und in einer anderen(/selben) batch wieder entschlüsselt werden können..
wozu? anlegen von ordnern die nicht per suche nach dem namen der datei gefunden werden können
beispiel: bla1.txt wird zu cmb0.txt
dafür geibt es doch bestimmt diese wunderbare for schleife mit der ich noch nicht ganz klar komme...
wenn du das liest und dir etwas einfällt poste doch bitte!
freu mich auf hilfe, Ph
habe batchkompiler aber die exe die entsteht erstellt auch nur wieder die batch...
ich möchte verhindern dass man die batch lesen kann
also ich kopiere meine komplierte batch (exe) in temp
und führe sie aus...
dadurch wird meine install.bat erstellt und ausgeführt allerdings wird die .bat datei nichtmehr gelöscht auch nicht wenn die batch erfolgreich mit exit endet
ist es möglich die batch noch während des vorgangs zu löschen? del %0 ? (bzw del install.bat)
oder gibt es eine andere möglichkeit die auch mit einschließt dass die batch gelöscht wird wenn sie per x button abgebrochen wird?
2. (EDIT)
verschlüsselung eines namens
abcd1234 soll zu bcde0123 umgewandelt werden per batch und in einer anderen(/selben) batch wieder entschlüsselt werden können..
wozu? anlegen von ordnern die nicht per suche nach dem namen der datei gefunden werden können
beispiel: bla1.txt wird zu cmb0.txt
dafür geibt es doch bestimmt diese wunderbare for schleife mit der ich noch nicht ganz klar komme...
wenn du das liest und dir etwas einfällt poste doch bitte!
freu mich auf hilfe, Ph
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 49537
Url: https://administrator.de/forum/batch-quellcode-soll-nicht-lesbar-sein-verschluesselung-eines-variablen-namens-49537.html
Ausgedruckt am: 23.12.2024 um 10:12 Uhr
32 Kommentare
Neuester Kommentar
Na ja, Phlegma,
Du kannst dich da nur annähern....
Du weißt von der erzeugten temporären Klartext-Batchdatei doch,
- wo sie ist (im %temp%- oder noch genauer im %myFiles%-Verzeichnis)
- den Namen (2 bestimmte Buchstaben und 4 Ziffern) und
- die Endung .bat (oder .cmd) nach Deinen Vorgaben.
- und auch noch das Hidden-Attribut
Also kannst Du doch am Ende als letzten Befehl abfeuern
Die Wahrscheinlichkeit, dass Du dabei eine "falsche", ganz ganz furchtbar wertvolle Datei bf????.bat im %temp%-Verzeichnis wegknallst, die der Anwender dort versteckt anlegt hat, ist so gering wie ein Wahlsieg der SPD.
Anmerkungen:
Dass die temporäre Datei nach ordnungsgemäßer Abarbeitung der *.exe nicht gelöscht wird, kann ich nicht bestätigen.
Im Normalfall ist die Klartext-Batch hinterher durch die .exe gelöscht.
Wermutstropfen:
Was Du nicht sinnvoll verhindern kannst, ist das Verbleiben von einer lesbaren *.bat,
- wenn kein Rücksprung zur .Exe-Datei erfolgt (die Batch hängt. SEHR unwahrscheinlich)
- wenn in der Batch ein "pause"-Befehl steht und dieser vom Anwender genutzt wird, die Batchdatei zu lesen
- wenn die Batchdatei läuft und der Anwender die Exe-Datei per Taskkill abschießt.
Aber langsam machst Du uns neugierig: was hast Du denn für nobelpreisverdächtige Zeilen in Deiner Batch?
Wenn es so hochsensibel ist, dann solltest Du lieber ein paar Zeilen in irgendetwas zusammenbraten, was sich wirklich kompilieren lässt... C oder so.
Will damit nur sagen: Behalte im Auge, welchen Aufwand Du betreiben willst, Deinen Source zu schützen.
Für einen durchschnittlich bösartigen Endanwender sollte das oben geschriebene mehr als ausreichen.
Und ein richtig bösartiger Anwender dekompiliert Dir ohnehin Deine .exe.
Gruß
Biber
Du kannst dich da nur annähern....
Du weißt von der erzeugten temporären Klartext-Batchdatei doch,
- wo sie ist (im %temp%- oder noch genauer im %myFiles%-Verzeichnis)
- den Namen (2 bestimmte Buchstaben und 4 Ziffern) und
- die Endung .bat (oder .cmd) nach Deinen Vorgaben.
- und auch noch das Hidden-Attribut
Also kannst Du doch am Ende als letzten Befehl abfeuern
del /q /Ah "%myfiles%\bf????.bat"
Die Wahrscheinlichkeit, dass Du dabei eine "falsche", ganz ganz furchtbar wertvolle Datei bf????.bat im %temp%-Verzeichnis wegknallst, die der Anwender dort versteckt anlegt hat, ist so gering wie ein Wahlsieg der SPD.
Anmerkungen:
Dass die temporäre Datei nach ordnungsgemäßer Abarbeitung der *.exe nicht gelöscht wird, kann ich nicht bestätigen.
Im Normalfall ist die Klartext-Batch hinterher durch die .exe gelöscht.
Wermutstropfen:
Was Du nicht sinnvoll verhindern kannst, ist das Verbleiben von einer lesbaren *.bat,
- wenn kein Rücksprung zur .Exe-Datei erfolgt (die Batch hängt. SEHR unwahrscheinlich)
- wenn in der Batch ein "pause"-Befehl steht und dieser vom Anwender genutzt wird, die Batchdatei zu lesen
- wenn die Batchdatei läuft und der Anwender die Exe-Datei per Taskkill abschießt.
Aber langsam machst Du uns neugierig: was hast Du denn für nobelpreisverdächtige Zeilen in Deiner Batch?
Wenn es so hochsensibel ist, dann solltest Du lieber ein paar Zeilen in irgendetwas zusammenbraten, was sich wirklich kompilieren lässt... C oder so.
Will damit nur sagen: Behalte im Auge, welchen Aufwand Du betreiben willst, Deinen Source zu schützen.
Für einen durchschnittlich bösartigen Endanwender sollte das oben geschriebene mehr als ausreichen.
Und ein richtig bösartiger Anwender dekompiliert Dir ohnehin Deine .exe.
Gruß
Biber
doch das sollte dan ja gehen. du kanst da sja hinterinander hängen. Mußt nur auf die reihenfilge achten.
Dein Text steht in einer Variablen (var).
jetzt kanst du dann
set var=abc123
echo Orginal text:%var%
set var=%var:3=4%
set var=%var:1=3%
set var=%var:4=1%
echo Verschlüsselter Text:%var%
Sowas in der Richtung geht.
miniversum
Dein Text steht in einer Variablen (var).
jetzt kanst du dann
set var=abc123
echo Orginal text:%var%
set var=%var:3=4%
set var=%var:1=3%
set var=%var:4=1%
echo Verschlüsselter Text:%var%
Sowas in der Richtung geht.
miniversum
Klar du kannst ja auch Sonderzeichen benutzen die weder Buchstaben noch Zahlen beinhalten.
So sollte dieses Problem gelöst sein.
Wenns mach nacheinande funktionierrt kanst du es ja in 2 FOR Schleifen ineinander verschachteln. Dan hast du es auf wenige Zeilen Code reduziert.
In einer Andern Programmiersprache wie z.B. C könntest du einfach über den ASCII Code die Zeichen Vershcieben. Ist halt dan wesentlich einfacher. Ob und wenn ja wie das in Batch geht weiß ich nicht.
miniversum
So sollte dieses Problem gelöst sein.
Wenns mach nacheinande funktionierrt kanst du es ja in 2 FOR Schleifen ineinander verschachteln. Dan hast du es auf wenige Zeilen Code reduziert.
In einer Andern Programmiersprache wie z.B. C könntest du einfach über den ASCII Code die Zeichen Vershcieben. Ist halt dan wesentlich einfacher. Ob und wenn ja wie das in Batch geht weiß ich nicht.
miniversum
Na mit 2 Forschleifen alleine ists nicht getan.
Hier hab ich mal was gemacht von A bis F. Du kannst es ja entsprechend erweitern für die anderen Zeichen. Als Zusatszeichen hab ich mal $ gewählt. Vergiss dann nicht die Anzahl der Zeichen + Zusatszeichen in der 5. Zeile unter Anzahl zu ändern.
@echo off
setlocal enabledelayedexpansion
set text=ABCDEF & rem Zu verschlüsselnder Text
set /a anzahl=7 & rem Anzahl der Zeichen
set /a anzahl=%anzahl%+1
set zahl=%anzahl%
FOR %%i in (A B C D E F $) do (
FOR %%j in ($ A B C D E F) do (
if !zahl! equ %anzahl% set /a zahl=0 & set text=!text:%%i=%%j!
set /a zahl=!zahl!+1
)
)
echo %text% & rem Verschlüsselter Text
miniversum
Hier hab ich mal was gemacht von A bis F. Du kannst es ja entsprechend erweitern für die anderen Zeichen. Als Zusatszeichen hab ich mal $ gewählt. Vergiss dann nicht die Anzahl der Zeichen + Zusatszeichen in der 5. Zeile unter Anzahl zu ändern.
@echo off
setlocal enabledelayedexpansion
set text=ABCDEF & rem Zu verschlüsselnder Text
set /a anzahl=7 & rem Anzahl der Zeichen
set /a anzahl=%anzahl%+1
set zahl=%anzahl%
FOR %%i in (A B C D E F $) do (
FOR %%j in ($ A B C D E F) do (
if !zahl! equ %anzahl% set /a zahl=0 & set text=!text:%%i=%%j!
set /a zahl=!zahl!+1
)
)
echo %text% & rem Verschlüsselter Text
miniversum
Diese Anzahl bezieht sich auf die Anzahl der Zeichen in den FOR Schleifen (A B C D E F $ bzw. $ A B C D E F), nicht auf die Länge des Textes. Zum erweitern müßtest du also immer diese Zeichen bis Z erweitern bzw. auch die Zahlen hinzufügen. Die Reihenfolge der Zeichen bestimtm dabei welche Zeichen getauscht werden.
In diesem Fall bedeutet das also:
FOR %%i in (A B C D E F $) do (
FOR %%j in ($ A B C D E F) do (
A wird zu $
B wird zu A
C wird zu B
D wird zu C
E wird zu D
F wird zu E
$ wird zu F
Auf diese Art wird aus "ABCDEF" dann also "FABCDE".
Willst du einen Andern Text dann so verschlüsseln ist die Länge des Textes egal.
Hauptsache er steht in der Variablen text (bei mir halt durch set text=ABCDEF).
miniversum
In diesem Fall bedeutet das also:
FOR %%i in (A B C D E F $) do (
FOR %%j in ($ A B C D E F) do (
A wird zu $
B wird zu A
C wird zu B
D wird zu C
E wird zu D
F wird zu E
$ wird zu F
Auf diese Art wird aus "ABCDEF" dann also "FABCDE".
Willst du einen Andern Text dann so verschlüsseln ist die Länge des Textes egal.
Hauptsache er steht in der Variablen text (bei mir halt durch set text=ABCDEF).
miniversum
Ich erklär das ganze mal.
Durch die beiden For-Schleifen in einander werden alle Kombinationen aus den Zeichen ABCDEF$ durchgemacht.
Also A$ AA AB AC AD AE AF B$ BA BB BC ...
Zusätzlich wird in der Variablen zahl mitgezählt.
Daher am Anfang Die Zeile
die Jeweis gültigen Zeichen stehen also in %%i und %%j und dadurch ergibt sich der hintere Teil der If aAnweisung:
Wenn du willst kannst du ja mal damit du es besser sehen kannst vor die Zeile mit dem If folgende Zeile schreiben:
echo [!zahl!] [%%i] [%%j]
Dann siehst du was er macht.
miniversum
Durch die beiden For-Schleifen in einander werden alle Kombinationen aus den Zeichen ABCDEF$ durchgemacht.
Also A$ AA AB AC AD AE AF B$ BA BB BC ...
Zusätzlich wird in der Variablen zahl mitgezählt.
set /a zahl=!zahl!+1
Da du ja nur die Kombinationen A$ BA CB DC ED FE $F benötigst kann ich diese mit Hilfe der IF Anweisung raussuchen, denn diese Kombination erreicht man gerade dann wenn Zahl = Anzahl der Zeichen +1 ist.Daher am Anfang Die Zeile
set /a anzahl=%anzahl%+1
und Beim If der Teil:if !zahl! equ %anzahl%
Ist also zahl=anzahl wird das jeweilige Zeichen in text durch das andere ersetzt. B durch A usw.die Jeweis gültigen Zeichen stehen also in %%i und %%j und dadurch ergibt sich der hintere Teil der If aAnweisung:
set text=!text:%%i=%%j!
Zusätzlich muß dabei noch zahl auf 0 zurückgesetzt werden:set /a zahl=0
Wenn du willst kannst du ja mal damit du es besser sehen kannst vor die Zeile mit dem If folgende Zeile schreiben:
echo [!zahl!] [%%i] [%%j]
Dann siehst du was er macht.
miniversum
Hallo
Das mit den Kombinationen ist eben weil, wie du schon gemerkt hast, die zwei For Schleifen JEDE Kombination durchmachen und nur die entsprechenden benutzt. Da eben alle zeichen um 1 verschoben sind habe ich auch die Formel mit dem anzahl + 1 drin. Dadurch werden eben diese "rausgesucht". Das meinte ich mit den Kombinationen von A$ BA CB DC ED FE $F benötigen.
Am besten siehst du das ja in deiner Zeile mit dem
Wie du schon gesehen hast ist deine Lösung mit dem
Das wollte ich eben mit den 2 Forschleifen und der ZählVariablen nachbilden. Klar ist deine Möglichkeit schneller. Ist halt eine Möglichkeit den Code zu Reduzieren.
Wichtig bei beiden Möglichkeiten ist immer die Reihenfolge der Vertauschungen. Wenn die nciht passt kannst du schnell lauter gleiche Zeichen bekommen, was dir bei den Zahlen passiert ist (dazu später noch). Am besten Du schreibst dir die Kombinationen der Vertauschungen vorher mal auf um dann den Kreis in der Richtigen reihenfolge zu druchlaufen und schließen zu können.
Vorteil das Strategie untereinander jedes Extra zu tauschen, ist halt auch das zufällige Kombinationen möglich sind, ohne eine System wie der Verschub um eine Stelle darin zu haben.
Zum den Kleinbuchstaben:
Koppiere einfach den ganzen Block von den großbuchstaben und mach daraus kleine. ist mal am einfachsten. Prinzipiell wäre es auch möglich alles (alle Buchstaben und Zahlen in einem Mal in die zwei For Schleifen zu packen).
Das mit dienen Zahlen liegt an der Reihenfolge.
Du hast alle 1en durch eine 2er ersetzt. Danach alle 2er durch 3en, also auch die 2en die vorher 1er waren.
Du müßtest es also umgekehrt machen udn Zuerst die 8er zu 9er, dann die 7er zu 8er, usw...
Vielleicht solltest du die Zeile
miniversum
was passiert bei einer variable wenn sie mit ! zeichen angegeben wird? wofür ist das gut?
Da ich ja in der Forschleife die Variable zahl hochzählen will muß ich mit enabledelayedexpansion arbeiten. Würe ich das nicht tun würde nicht gezählt werden. die Variable würde dann nur einmal zu beginn der schleife aufgelöst werden. und da ich eben mit enabledelayedexpansion arbeite muß ich die Variablen statt mit % mit ! schreiben. Das ist da dann so. Schau mal unter setlocal /?Das mit den Kombinationen ist eben weil, wie du schon gemerkt hast, die zwei For Schleifen JEDE Kombination durchmachen und nur die entsprechenden benutzt. Da eben alle zeichen um 1 verschoben sind habe ich auch die Formel mit dem anzahl + 1 drin. Dadurch werden eben diese "rausgesucht". Das meinte ich mit den Kombinationen von A$ BA CB DC ED FE $F benötigen.
Am besten siehst du das ja in deiner Zeile mit dem
echo !zahl! / %%i-%%j / !text! & rem zum besseren verständnis für mich
Wenn du das mal nur mit den Buchstaben von A bis F durchspielst und dir anschaust welchen Wert !zahl! bei den für dich relevanten Anordnungen hat wirst du sehen wie ich auf die anzahl+1 komme. Für alle 26 Buchstaben gild das entsprechende dann. Ist ne eher mathematische/kombinatorische Sache.Wie du schon gesehen hast ist deine Lösung mit dem
...
set text=!text:L=M!
set text=!text:K=L!
...
die schnellere Lösung, aber eben lange und eigentlich imerm wieder das gleiche.set text=!text:L=M!
set text=!text:K=L!
...
Das wollte ich eben mit den 2 Forschleifen und der ZählVariablen nachbilden. Klar ist deine Möglichkeit schneller. Ist halt eine Möglichkeit den Code zu Reduzieren.
Wichtig bei beiden Möglichkeiten ist immer die Reihenfolge der Vertauschungen. Wenn die nciht passt kannst du schnell lauter gleiche Zeichen bekommen, was dir bei den Zahlen passiert ist (dazu später noch). Am besten Du schreibst dir die Kombinationen der Vertauschungen vorher mal auf um dann den Kreis in der Richtigen reihenfolge zu druchlaufen und schließen zu können.
Vorteil das Strategie untereinander jedes Extra zu tauschen, ist halt auch das zufällige Kombinationen möglich sind, ohne eine System wie der Verschub um eine Stelle darin zu haben.
Zum den Kleinbuchstaben:
Koppiere einfach den ganzen Block von den großbuchstaben und mach daraus kleine. ist mal am einfachsten. Prinzipiell wäre es auch möglich alles (alle Buchstaben und Zahlen in einem Mal in die zwei For Schleifen zu packen).
Das mit dienen Zahlen liegt an der Reihenfolge.
Du hast alle 1en durch eine 2er ersetzt. Danach alle 2er durch 3en, also auch die 2en die vorher 1er waren.
Du müßtest es also umgekehrt machen udn Zuerst die 8er zu 9er, dann die 7er zu 8er, usw...
set /a anzahl=11 & rem Anzahl der Zeichen
set /a anzahl=%anzahl%+1
set zahl=%anzahl%
FOR %%i in (9 8 7 6 5 4 3 2 1 0 $) do (
FOR %%j in ($ 9 8 7 6 5 4 3 2 1 0) do (
if !zahl! equ %anzahl% set /a zahl=0 & set text=!text:%%i=%%j! & echo !zahl! / %%i-%%j / !text!
set /a zahl=!zahl!+1
echo !zahl! / %%i-%%j / !text! & rem zum besseren verständnis sollte entfernt werden später
)
)
echo %alttext%
echo %text%
Vielleicht solltest du die Zeile
echo !zahl! / %%i-%%j / !text! & rem zum besseren verständnis sollte entfernt werden später
durch folgende ersetzen, dass es anschaulicher wird.echo !zahl! / %%i wird zu %%j & rem zum besseren verständnis sollte entfernt werden
miniversum
Damit wirst du woll leben müssen. Ich wüsste nicht wie man da suntershcieden kann. Ich dachte erst einfach das gleiche mit kleinen buchstaben aber der PC kennt dne Unterschied nicht.
Vielleicht würdest du an dieser Stelle mit vbs weiter kommen, wie in dem andern Posting an dem Du dich ja uch beteiligt hast ein Lösungsvorschlag gepostet wurde.
Batch hat eben auch seine Grenzen.
Oder wechsle gleich zu einer anderen Programmiersprache wie C oder so.
miniversum
Vielleicht würdest du an dieser Stelle mit vbs weiter kommen, wie in dem andern Posting an dem Du dich ja uch beteiligt hast ein Lösungsvorschlag gepostet wurde.
Batch hat eben auch seine Grenzen.
Oder wechsle gleich zu einer anderen Programmiersprache wie C oder so.
miniversum
Ich würde beides es durch Änderung der Reihenfolge in den beiden Forschleifen machen (vielleicht bei zurückcodieren mit z beginnen nicht mit a).
Na das erlernen von C ist auch nicht soo schwer, wenn dus erstmal bei konsoleneingabe beläst. Abfangen von eingabe ist ncith all zu schwer. In C hast du dann den vorteil das du die Buchstaben in ihre Ascii werte umwandeln kannst und so diese werte einfach um einen beliebigen Wert erhöhen kannst und wieder zurückwanden. Im internet, und natürlich auch hier im Forum gibt es genügend beispielcodes und anleitungen für C. Also wenn Du dich dafür interessierst... Manche Dinge gehen da halt einfacher als in Batch.
miniversum
Na das erlernen von C ist auch nicht soo schwer, wenn dus erstmal bei konsoleneingabe beläst. Abfangen von eingabe ist ncith all zu schwer. In C hast du dann den vorteil das du die Buchstaben in ihre Ascii werte umwandeln kannst und so diese werte einfach um einen beliebigen Wert erhöhen kannst und wieder zurückwanden. Im internet, und natürlich auch hier im Forum gibt es genügend beispielcodes und anleitungen für C. Also wenn Du dich dafür interessierst... Manche Dinge gehen da halt einfacher als in Batch.
miniversum
Nim den Code wie beim Verschlüsseln und ändere bei den Zahlen die Forschleifen so:
miniversum
FOR %%i in (0 1 2 3 4 5 6 7 8 9 $) do (
FOR %%j in ($ 0 1 2 3 4 5 6 7 8 9) do (
und bei den Buchstaben so:FOR %%j in ($ 0 1 2 3 4 5 6 7 8 9) do (
FOR %%i in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A $) do (
FOR %%j in ($ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A) do (
FOR %%j in ($ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A) do (
miniversum
Wie gesagt höhere Programmiersprachen sind da wol besser geeignet.
Wenns nur ums Verschieben geht könntest Du es mal wie in deinem Ansatz mit den ganzen:
set text=!text:Y=Z!
set text=!text:X=Y!
set text=!text:W=X!
set text=!text:V=W!
...
versuchen nur nicht gleich nem andern Buchstaben zuweisen sondern über Variabeln gehen die du dynamisch erstellen könntest. Mit enabledeleyedexpansion (siehe dem einen aktuellen beitrag im Batch Bereich). Die erstellten variebeln (die ja Nummern enthalten) könntest du dann beim Erzeugen udn erstmaligem Zuweisen versetzt zuordnen und am ende wieder bei 1 beginnen sollte der Wert er Zahl über 26 liegen. So könntest du den Verschub der Buchstaben einfach nur über den Anfangswert festlegen.
Ist aber nur so ein Gedankengang...
miniversum
Wenns nur ums Verschieben geht könntest Du es mal wie in deinem Ansatz mit den ganzen:
set text=!text:Y=Z!
set text=!text:X=Y!
set text=!text:W=X!
set text=!text:V=W!
...
versuchen nur nicht gleich nem andern Buchstaben zuweisen sondern über Variabeln gehen die du dynamisch erstellen könntest. Mit enabledeleyedexpansion (siehe dem einen aktuellen beitrag im Batch Bereich). Die erstellten variebeln (die ja Nummern enthalten) könntest du dann beim Erzeugen udn erstmaligem Zuweisen versetzt zuordnen und am ende wieder bei 1 beginnen sollte der Wert er Zahl über 26 liegen. So könntest du den Verschub der Buchstaben einfach nur über den Anfangswert festlegen.
Ist aber nur so ein Gedankengang...
miniversum