Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 20 von 20

Thema: [NYC09] - 04 - Crazy Scripting

  1. #16
    Administrator
    Registriert seit
    Jun 2001
    Beiträge
    1.332
    Renommee
    302

    Re: [NYC09] - 04 - Crazy Scripting

    Zitat Zitat von octogen Beitrag anzeigen
    Danke Xinorcimo für's Posten und Kommentieren seines Beitrags, genau so war's gedacht.
    Schade, daß ich der Einzige war, seinen "Crazy-Müll" zu posten und zu erläutern... die jeweiligen Gewinnerlösungen hätten sicherlich schon interessant sein können. - Naja immerhin ist es besser abgelaufen als beim damaligen "CoCo", als nicht mal die Gewinner ermittelt werden konnten. An dieser Stelle nochmal danke für die Organisation der Challanges.

    Xinorcimo
    The economics of the future are somewhat different. Money doesn't exist in the 24th Century. The acquisition of wealth is no longer the driving force in our lives. We work to better ourselves and the rest of humanity.

  2. #17
    Registered User
    Registriert seit
    Dec 2000
    Beiträge
    2.319
    Renommee
    1120

    Re: [NYC09] - 04 - Crazy Scripting

    OffTopic:

    Zitat Zitat von xinorcimo Beitrag anzeigen
    Naja immerhin ist es besser abgelaufen als beim damaligen "CoCo", als nicht mal die Gewinner ermittelt werden konnten.
    Die Gewinner wurden ermittelt - nach Monaten (-:
    Und der CoCo hatte auch andere Dimension...

  3. #18
    Registered User
    Registriert seit
    Mar 2001
    Beiträge
    2.020
    Renommee
    1465

    Re: [NYC09] - 04 - Crazy Scripting

    blu hatte den CoCo gewonnen

  4. #19
    Registered User
    NewYearsChallenge Sieger 2010

    Registriert seit
    Oct 2002
    Beiträge
    730
    Renommee
    444

    Re: [NYC09] - 04 - Crazy Scripting

    Auf diesen Thread hier hatte ich ja ganz vergessen...

    Hier mal meine Lösungen: beise Scripts sind natürlich bei weitem nicht so kompakt wie xinorcimos Lösungen...

    Ein kleiner Disclaimer:
    Die Teile sind echt extrem dirty - Lesen auf eigenen Gefahr!
    Das ganze liegt wohl vorallem an meinen mangelnden Kentnissen der bash


    Passwort Generator
    Ich habe erstmal ein array für das Passwort angelegt, und dann von jeder der 3 Kategorien (lowercase, uppercase, digits/special char) ein Zeichen erzeugt und darin abgelegt. Anschließend 5 weitere Zeichen einer zufälligen Kategorie. Zuletzt noch das ganze shuffeln und das wars.
    Der Fehler, den octogen aufgezeigt hat lag in der Zeile, die mir das Passwort letztendlich am Bildschirm ausgibt - da hatte ich die umschließenden double-quotes vergessen.
    Spoiler:
    Code:
    #!/bin/bash
    
    charsLower=('a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z');
    charsUpper=('A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z');
    charsSpecial=("!" "\"" "#" "\$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9");
    
    # sets a random char (lower- upper-case or special at ${password[$index]}
    function randomChar {
      local rand=$((RANDOM % 3));
      case "$rand" in
        0) lowerCase ;;
        1) upperCase ;;
        2) special ;;
      esac
    }
    
    # sets a random lowerCase char at ${password[$index]}
    function lowerCase {
      local len=${#charsLower[*]};
      password[$index]=${charsLower[$((RANDOM % len))]};
    }
    
    # sets a random upperCase char at ${password[$index]}
    function upperCase {
      local len=${#charsUpper[*]};
      password[$index]=${charsUpper[$((RANDOM % len))]};
    }
    
    # sets a special char at ${password[$index]}
    function special {
      local len=${#charsSpecial[*]};
      password[$index]=${charsSpecial[$((RANDOM % len))]};
    }
    
    
    # Uses a global array variable.  Must be non-sparse.
    # taken from http://wooledge.org:8000/BashFAQ/026
    function shuffle {
      local i tmp size max rand
    
      # $RANDOM % (i+1) is biased because of the limited range of $RANDOM
      # Compensate by using a range which is a multiple of the array size.
      size=${#password[*]}
      max=$(( 32768 / size * size ))
    
      for ((i=size-1; i>0; i--)); do
        while (( (rand=$RANDOM) >= max )); do :; done
        rand=$(( rand % (i+1) ))
        tmp=${password[i]} password[i]=${password[rand]} password[rand]=$tmp
      done
    }
    
    
    
    password={};
    index=0;
    
    # ensure that we have at least one char of each type
    lowerCase;
    index=$(($index + 1));
    upperCase;
    index=$(($index + 1));
    special;
    
    # and fill the remaining 5 slots with random chars
    for i in `seq 1 5`; do
      index=$(($index + 1));
      randomChar;
    done
    
    # now shuffle the array
    shuffle;
    
    # and print it
    for i in `seq 0 7`; do
      echo -n "${password[$i]}";
    done
    echo;



    Partition Viewer:
    Das ganze war ansich straight forward zu implementieren, teilweise musste ich jedoch ein wenig tricksen um die shortcomings der bash (Rückgabewert einer Funktion muss < 256 sein, ...) zu umgehen...
    Spoiler:
    Code:
    #!/bin/bash
    
    # needed to return numbers larger than 256
    resultInteger=0;
    
    # needed to return CHS values
    resultC=0;
    resultH=0;
    resultS=0;
    
    # needed to return the partition type as string
    resultTypeString="";
    
    # returns the byte at offset $2 in file $1
    function getByte {
      return `dd bs=1 count=1 if=$1 skip=$2 2> /dev/null | ./asciival`;
    }
    
    # returns the 4-byte integer at offset $2 in file $1 in variable $longResult
    function getInteger {
      local result=0;
      local offset=$(($2 + 3));
      for i in `seq 1 4`; do
        result=$(($result * 0x100)); # the same as << 8, but doesn't break vi's syntax highlighting
        getByte $1 $offset;
        result=$(($result | $?));
        offset=$(($offset - 1));
      done
      resultInteger=$result;
    }
    
    # returns cylinder, head and sector of the CHS-representation at $2 in file $1
    function getCHS {
      local offset=$2;
      getByte $1 $2;
      resultH=$?;
    
      offset=$(($offset + 1));
      getByte $1 $offset;
      local sByte=$?;
      resultS=$(($sByte & 0x3f)); # just take the last 6 bits
    
      offset=$(($offset + 1));
      sByte=$(($sByte & 0xc0)); #just take the first two bits
      sByte=$(($sByte * 0x4)); # shift them 2 to the left
      getByte $1 $offset;
      resultC=$(($sByte | $?));
    }
    
    # returns the string representation of the given partitionType ($1) in $resultTypeString
    function getTypeString {
      case "$1" in
        0) resultTypeString="unused" ;;
        5) resultTypeString="Extended" ;;
        7) resultTypeString="HPFS / NTFS" ;;
        11) resultTypeString="W95 FAT32" ;;
        130) resultTypeString="Linux swap" ;;
        131) resultTypeString="Linux" ;;
        133) resultTypeString="Linux extended" ;;
        142) resultTypeString="Linux LVM" ;;
        165) resultTypeString="FreeBSD" ;;
        166) resultTypeString="OpenBSD" ;;
        169) resultTypeString="NetBSD" ;;
        253) resultTypeString="Linux raid auto" ;;
        *) resultTypeString="Unknown type"
      esac
    }
    
    
    # analyzes the partition-table of file $1
    function analyze {
      local baseOffset=446;
    
      for partition in `seq 0 3`; do
        local offset=$baseOffset;
    
        offset=$(($offset + 1)); # ignore bootable flag and read CHS of start sector
        getCHS $1 $offset;
    
        offset=$(($offset + 3)); # go to partition type
        getByte $1 $offset;
        local partitionType=$?;
        getTypeString $partitionType;
        
        offset=$(($offset + 4)); # skip partition type and ignore CHS of last sector
        getInteger $1 $offset;
        local startSector=$resultInteger;
    
        offset=$(($offset + 4)); # go to number of sectors
        getInteger $1 $offset;
        local sectors=$resultInteger;
        local size=$(($sectors * 512 / 1048576));
    
        echo "PARTITION $partition";
        echo "    C=$resultC H=$resultH S=$resultS";
        echo "    Start sector=$startSector, $sectors sectors, $size MB";
        echo "    Partition type is $partitionType ($resultTypeString)";
        echo "";
    
        baseOffset=$(($baseOffset + 16));
      done
    }
    
    analyze $1;
    destructor

  5. #20
    Moderator
    Registriert seit
    Sep 2000
    Beiträge
    124
    Renommee
    261

    Re: [NYC09] - 04 - Crazy Scripting

    Dann stell ich mal meine Version vor (Ich hoffe ich hab jetzt das richtige file, weil ich da teils auf meinem notebook noch getydelt habe und mir grad unsicher bin welche ich eingesendet habe - sind aber sowieso nur minimale unterschiede)

    pwgen.sh

    Ich wähle zuerst zufällig aus jeweils einer der drei Zeichenklassen, Großbuchstaben, Kleinbuchstaben, Sonderzeichen ein Zeichen aus um den Anforderungen der Zeichenzusammensetzung der PWs gerecht zu werden.Die restlichen 5 Zeichen werden zufällig aus
    dem gesamten Zeichenvorrat gewählt. Danach wird der dadurch generierte String noch durcheinander gewürfelt.

    Code:
    #!/bin/bash
    LCHARS=(a b c d e f g h i j k l m n o p q r s t u v w x y z);
    HCHARS=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z);
    SCHARS=(0 1 2 3 4 5 6 7 8 9 "\"" "'" "(" ")" "#" "$" "%" "&" '*' "+" "," "-" "." "/");
    ACHARS=("${LCHARS[@]}" "${HCHARS[@]}" "${SCHARS[@]}")
    
    declare -a SET;
    declare -a a;
    
    #Ein Zeichen aus Special, eins aus Kleinbuchstabe, eins aus Großbuchstabe
    #um den Anforderungen gerecht zu werden
    i=3;
    SET[0]="${SCHARS[(($RANDOM % ${#SCHARS[@]}))]}";
    SET[1]="${LCHARS[(($RANDOM % ${#LCHARS[@]}))]}";
    SET[2]="${HCHARS[(($RANDOM % ${#HCHARS[@]}))]}";
    
    #Rest Zufällig aus allen generieren
    while [ ${i} -lt 8 ];
      do
        SET[${i}]="${ACHARS[(($RANDOM % ${#ACHARS[@]}))]}";
        ((i++))
    done;
    
    #Den Zeichenvorrat zufällig durchwürfeln
    while [ ${#SET[*]} -gt 0 ];
      do
      a=(${!SET[@]});
      r=$((${RANDOM}%${#a[@]}));
      PW="${PW}${SET[${a[${r}]}]}";
      unset SET[${a[${r}]}];
    done;
    
    echo "${PW}"
    alamar@stronghold nyc $ for i in $(seq 1 10); do ./pwgen.sh; done
    IbBrNvv9
    mmKXyTY/
    qo6S*"Af
    xDE,jqTO
    2,/2Klg.
    GgBTIoi%
    5%/Btj-N
    %/kXBd'5
    +9DZ)yTg
    OWu23adf

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [NYC09] - 07 - IT Security Quiz - Did you know?
    Von Rodnox im Forum Contest Forum
    Antworten: 20
    Letzter Beitrag: 30.01.2009, 16:41
  2. [NYC09] - 05 - RGB Farbraum Analyse
    Von Atlantis im Forum Contest Forum
    Antworten: 4
    Letzter Beitrag: 17.01.2009, 21:41
  3. Kazaa Proxyeinstellungen CRAZY?
    Von Ramuos im Forum Windows
    Antworten: 12
    Letzter Beitrag: 01.12.2003, 23:33
  4. really crazy :)
    Von DirtDevil im Forum Good Sites & Services
    Antworten: 0
    Letzter Beitrag: 30.01.2003, 13:22
  5. Crazy Gravity
    Von Blackboard im Forum Reverse Engineering
    Antworten: 17
    Letzter Beitrag: 16.08.2000, 20:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •