ubuntuusers.de

Du kannst auf dieses Thema nicht antworten, da es gesperrt wurde.

Shell Skript für unrar

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

mHOCHe

Anmeldungsdatum:
3. Februar 2011

Beiträge: Zähle...

Hallo liebe Forumsmitglieder! Ich habe das Passwort für eine meiner rar-komprimierten Dateien verlegt. Nach einiger Zeit Suche im Netz nach einem entschlüsselungs-tool, habe ich den Entschluss gefasst ein eigenes Programm/Skript dafür zu schreiben (da ich dann die zu versuchenden Passwörter stark eingrenzen kann). Ich würde dazu gerne ein shell-Skript schreiben (oder eignen sich andere Prog-Sprachen dazu besser? habe mittlere Java-Erfahrung und etwas C Erfahrung) Nach dem ich mich etwas in die Skriptsprache eingelesen/eingearbeitet habe, hab ich mal so was geschrieben:

#!/bin/bash

# dateiname soll in der variablen $1 an den Aufruf angehängt sein...
# entpackungsort in $2


unrar e  $1 $2

(soll ich lieber die dash-shell benutzen?)

Jetzt weis ich jedoch nicht, wie ich die Passworteingabe per Skript realisieren kann. Kann ich das Passwort irgendwie dem unrar Befehl als Parameter anhängen?

Also zusammenfassend 3 Fragen:

1. eignet sich shell-Skript überhaupt für diesen Zweck oder sollte ich auf eine andere Prog-Sprache umsteigen?

2. sollte ich lieber die dash shell benutzen (da ich gelesen habe, dass diese schneller ist)?

3. wie kann ich die Passworteingabe per Skript realisieren?

Gruß, mHOCHe

Snooga

Anmeldungsdatum:
17. Dezember 2009

Beiträge: 95

Wohnort: Saarland

Hi also ich bin nicht der bash skripter vor dem Herren da ich ebenfalls erst begonnen habe damit.. Komme eigentlich aus der C# Java Abap ecke... Aber mit einem bash skript kannst du es machen.. Würd mir ein Array erzeugen in dem du die Passwörter eingibst wo du denkst das es sie sein könnten... Dann mit einer schleife drüber laufen und als parameter den aktuellen Indexsatz an unrar übergeben....

woerter=("bla" "blu" "bli"); for((i=0;i<${#woerter};i++)); do unrar Parameter  ${woerter[$i]};done 

um es mal Pseudomässig hinzuschreiben.. Vllt gibt es aber auch schnellere und elegantere Lösungen... Gruss

mHOCHe

(Themenstarter)

Anmeldungsdatum:
3. Februar 2011

Beiträge: 7

Hi Snooga,

danke für deine schnelle Antwort. Also es beruhigt mich erst mal, dass ich mit nem bash/dash-Skript nicht in die falsche Richtung laufe. ...

Wenn ich jedoch eine liste fester länge von möglichen Passwörtern hätte, hätte ich sie ja auch schon so durchprobieren können. Mein Problem ist ja, dass ich das Passwort nich mehr genau kenne, es jedoch auf bestimmte Zeichen/Zahlen Kombinationen beschränken kann, bzw. einige Symbole (Sonderzeichen) ausschließen kann.

Und benutze ich jetzt die dash oder die bash shell (ist mir nicht so ganz klar wo da der unterschied ist)?

Und wie kann ich denn jetzt dem unrar Befehl ein Passwort mit übergeben? steht auf der Befehls-infoSeite nicht.

Gruß, mHOCHe

Snooga

Anmeldungsdatum:
17. Dezember 2009

Beiträge: 95

Wohnort: Saarland

Hi, unterschied bash/dash kann ich dir leider nichts dazu sagen, hab ich mich nicht eingelesen, da ich bash verwende. Ein Passwort übergibst du mit dem Parameter -p : man unrar: -p<password> Set password. Ansonsten könntest du beim Skript aufruf dir ein Array Erzeugen wo du aus den Vorhandenen Daten (keine Sonderzeichen bzw nur bestimmte) dir Suchstrings entwickeln lässt... Nur weis ich die Funktion leider nicht regex oder so aber möchte da nichts falsches sagen... Such einfach mal nach Muster bauen oder so ähnlich

gerade etwas gefunden, er erzeugt sich so zufallspasswörter, vllt kannst du ja von der Logik etwas abkupfern... Bei den Zeichen setzt du dann halt deine Zeichen ein die du weist

#!/bin/bash

ZEICHENVORRAT='ABCDEabcde012345'
PASSWORTLAENGE=10

for ((i=1; i <= PASSWORTLAENGE ; i++))
do
    echo -n ${ZEICHENVORRAT:$(($RANDOM%${#ZEICHENVORRAT})):1}
done
echo

mHOCHe

(Themenstarter)

Anmeldungsdatum:
3. Februar 2011

Beiträge: 7

Sehr gut, danke!

Vllcht mache ich mir so eine Random Funktion, die die Passwörter zufällig generiert.

Aber mal was anderes:

Ich komm grad nicht mit Arrays klar. Wenn ich ein Array so definiere

#!/bin/bash
array[1]='a'

erhalte ich von der Konsole:

test.sh: 3: array[1]=a: not found

und wenn ich ein array so definiere

#!/bin/bash
array=( 1 2 3 )

erhalte ich:

test.sh: 3: Syntax error: "(" unexpected

????? Was mach ich falsch, bzw. wo hakt es??

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

Na auweia, da kannste ein paar Wochen lang das Bash Script laufen lassen so... der Overhead (für jeden Versuch rar neu starten) ist extrem. Idealerweise bräuchtest du ein Programm in C das mit möglichst wenig Aufwand nur das Passwort testet und sonst nichts.

Schau dir vielleicht mal crark an.

Ansonsten lass dir das Passwort halt wieder einfallen. ☺

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hi,

vergiss Arrays in der Shell, eine unpraktische Sache, nachträglich mal drangestrickt. Die Zuweisung darf keine Leerzeichen an den Klammern enthalten, um den Wert auszulesen musst du mit der geschweiften Klammerung der Shell sagen, wofür das Dollar gut ist.

arr=(a b c)

echo   ${arr[1]}

liefert dann das 'b'

Mit Listen ist das schöner zu verarbeiten

liste="a b c d e f"

for element in $liste
do
   echo "element=$element"
done

Wenn du einen Vorrat an Daten einlesen/verarbeiten willst, schreib sie dir in eine Datei und lies die Zeilen einzeln ein:

while  read  line
do
  echo "das ist eine gelsene Zeile: $line"
done  <  dieDateiWoDasZeugZeilenweiseDrinsteht.txt

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

... ach ja - stimmt, da hat frostschutz gar nicht unrecht

mHOCHe

(Themenstarter)

Anmeldungsdatum:
3. Februar 2011

Beiträge: 7

Danke erstmal für eure Antworten. Was ich jetzt immer noch nicht kenne, ist der Unterschied zwischen Dash und Bash und ob das wirklich so große performance Unterschiede sind zwischen beiden shells...

@frostschutz:

hi, ja kann mir schon denken, dass das ziemlich rechenaufwändig wird...

Schreib aber trotzdem ein bischen am Skript weiter, kann ja meinen shell-skills nicht schaden 😉

Falls ich mal fertig werde mit dem Skript stell ichs mal vor...

@theinlein: ah, ok also keine arrays 😉

Na gut dann versuch ichs mit Listen...

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

mHOCHe schrieb:

Was ich jetzt immer noch nicht kenne, ist der Unterschied zwischen Dash und Bash und ob das wirklich so große performance Unterschiede sind zwischen beiden shells...

Von der Sache her empfiehlt sich für diese Frage die Lektüre von man bash und man dash - das sind die Originaltexte.

Oder Du liest es in Greg's Wiki nach, da steht es hübsch in einer Liste.

Wie groß der Performance-Unterschied ist kann ich Dir nicht verbindlich sagen. Aber ich schätze, Dein Programmierstil hat mehr Einfluss auf die Geschwindigkeit als die Wahl der Shell. Im Zweifel muss Du es einfach mal konkret mit Deinem Skript testen.

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

mHOCHe schrieb:

Was ich jetzt immer noch nicht kenne, ist der Unterschied zwischen Dash und Bash und ob das wirklich so große performance Unterschiede sind zwischen beiden shells...

Wenn Du nur ein paar Tausend Paßwörter testen willst spielt es wohl kaum eine Rolle. Für eine Bruteforceattacke dagegen wäre, wie schon frostschutz schrieb, beides ungeeignet.

Wieviele Paßwörter willst Du denn testen?

mHOCHe

(Themenstarter)

Anmeldungsdatum:
3. Februar 2011

Beiträge: 7

user unknown schrieb:

Wieviele Paßwörter willst Du denn testen?

keine Ahnung wieviele genau, ich denke ich werde eine liste der Form:

list="xx xy yx xz zx ..."

durchgehen, wobei xx, xy,.... für oft von mir verwendete Passwortelemente stehen (also z.B. Geburtsjahr, Anfangsbuchstaben,etc.).

Die Elemente der Liste werde ich dann beliebig permutieren/zusammenfügen und den jeweils erhaltenen String testen ...

Antworten |