Dzisiaj jest 30 lip 2021, 02:14

Strefa czasowa UTC+1godz. [letni]




Nowy temat Odpowiedz w temacie  [ Posty: 4 ] 
Autor Wiadomość
 Tytuł: Dekapeć AERO2
Post: 5 cze 2014, 02:38 
Offline
Użytkownik

Rejestracja: 13 lut 2013, 23:26
Posty: 6
Powitać!
Podglądając ten projekt napisałem wersję automatycznego rozwiązywania captchy Aero2 w oparciu o serwis Captcha Brotherhood na rutery z Openwrt.

Niestety programik od Captcha Brotherhood cbhcoreplugin.exe obsługujący polecenia z linii komend jest dostępny tylko na Windę. Jednak pod linuxem daje radę odpalenie go poprzez środowisko mono (w wersji przynajmniej 2.10.8.1). Zatem w celu obejścia tego problemu potrzebne jest konto shellowe na serwerze unixowym z zainstalowanym środowiskiem Mono (po poszperaniu w necie udało mi się znaleźć przynajmniej 1 darmowy serwer shella z zainstalowanym mono).

Lub inaczej mając dostęp do mocnego serwera z odpowiednio dużą dostępną powierzchnią dyskową (ok 1GB) można się pokusić o skompilowanie mono ze źródeł modyfikując podczas kompilacji prefiks na katalog u siebie na koncie - do czego nie potrzeba praw roota. W tym przypadku trzeba później odpowiednio zmienić zmienną MONO w skrypcie cb-shell.

Podsumowując dla działania skryptu potrzebne jest:
  • drugie działające łącze internetowe, którym wysyłany jest obrazek z captchą w celu rozpoznania (polecam modem/telefon z kartą Virgin Mobile dający 4kB/s neta przez rok za kilkanaście złotych)
  • konto shella z zainstalowanym środowiskiem mono + skonfigurowane bezhasłowe logowanie ssh na kluczach z rutera na ten serwer
  • zainstalowany na ruterze wget-nossl
  • konto Captcha Brotherhood z zapasem kupionych lub nabitych punktów

W przypadku ruterów z niewielką pamięcią flash można obyć się bez extroota instalując wget-nossl do ramu (oczywiście trzeba wtedy zmodyfikować odpowiednią linijkę w dekapec.conf

Właściwie skryptów jest kilka (jak zwykle prosta koncepcja zaczęła się rozrastać niczym rak :) ):
  • na ruterze w jednym katalogu: captcha-need, dekapec, dekapec.conf, dekapec-funkcje, logwait (uruchamia się oczywiście dekapec)
  • na serwerze shell w katalogu ~/aero/ : cb-shell oraz cbhcoreplugin.exe


Na górę
 Wyświetl profil  
Odpowiedz z cytatem  
 Tytuł: Re: Dekapeć AERO2
Post: 5 cze 2014, 14:09 
Offline
Użytkownik

Rejestracja: 13 lut 2013, 23:26
Posty: 6
pliki:

dekapec.conf :
#DEKAPEC AERO2

#polecenie uruchamiajace wget-nossl
export wget_command='wget'

#Dane logowania do serwerow shellowych (oddzielone spacja).
SERVERS='setaur@shell.cjb.net f3majda@fatcat.ftj.agh.edu.pl'
#Serwer musi posiadac:
#- dzialajace srodowisko mono-runtime
#- wtyczke cb-shell i program cbhcoreplugin.exe w katalogu ~/aero.
#Ponadto na ruterze musi byc skonfigurowane bezhaslowe logowanie ssh na serwer w oparciu o klucz prywatny /etc/dropbear/key.priv

#Login i haslo konta Captcha Brotherhood
cb_login='moj_login'
cb_haslo='moje_haslo'

#Oczekiwana dlugosc CAPTCHy (0 - brak weryfikacji)
DLUGOSC_CAPTCHY=8   

#STATYSTYKI
#plik logu (puste = brak logowania do pliku)
LOGFILE=/tmp/dekapec.log
#w przypadku braku podpietego dysku twardego - najlepiej w pamieci tymczasowej /tmp/
#log w postaci:
#[SEKUNDY OD 1970] [K] [HISTORIA KROKOW] [CAPTCHA/WYJSCIE WTYCZKI CB-SHELL - pierwsze 100 znakow]
#gdzie K:
#  '0', dla rozpoznania nieprawidlowego
#  '1', dla rozpoznania prawidlowego
#  '-', dla bledu wtyczki cb-shell

LOG2SERVER=1
#Opcja wysylania logow na aktualnie uzywany serwer. Plik logow lokalnie kasowany
#

#nazwy skonfigurowanych wanow
aero='wan'
pomocniczy='wan2'

#timeout wgeta
export TIMEOUT=15

#folder na pliki tymczasowe
export CAPTCHA_DIR='/tmp/dekapec'

captcha-need :
#!/bin/ash
CAPTCHA_MD5=5f06950a25320fe52ae7f368fb7537f9
BLANK_MD5=d41d8cd98f00b204e9800998ecf8427e

test_site='http://google.com/blank.html'
page_path='/tmp/captcha.check'

#. ./dekapec.conf

yesno() {
    echo ' [y/N]?'
    k=''
    read k
    case "$k" in
   [y,Y,t,T])
            return 0
       ;;
   *)
            return 1
       ;;
    esac
}

update() {
    echo "Uruchomiles $0 w trybie aktualizacji. Ma to sens tylko gdy obecnie zamiast kazdej uruchamianej strony wyswietla sie strona przekierowujaca do CAPTCHy Aero2"
    echo -n "Czy chcesz wyswietlic kod HTML sciagnietej strony testowej? (Zeby sprawdzic, czy zamienia sie on w strone CAPTCHy)"
    if yesno; then
   echo
   cat "$page_path"
   echo -e "\n###################KONIEC STRONY########################\n"
    fi
    echo -e "Dotychczasowa skrot MD5 strony CAPTCHy Aero2:\n$CAPTCHA_MD5"
    echo -e "Skrot MD5 sciagnietej strony testowej:\n$site_md5\n"
    echo -n "Czy zaktualizowac skrot MD5?"
    if yesno; then
   sed "s/^CAPTCHA_MD5=.*/CAPTCHA_MD5=$site_md5/g" "$0" > "${0}-temp"
   mv -f "${0}-temp" "$0"
   chmod +x "$0"
   echo "Skrot strony CAPTCHy Aero2 zaktualizowany."
    else
   echo "Wyjscie bez aktualizacji"
    fi
    rm -f "$page_path"
    exit 0
}

if "$wget_command" --timeout="$TIMEOUT" -O "$page_path" "$test_site" 2>/dev/null 1>&2; then

    site_md5=$(grep -v -E '^$' "$page_path" | md5sum | awk '{print $1;}')
    echo "site_md5=$site_md5" #debug
    if [ "$1" != '-u' ]; then rm -f "$page_path"; fi

    case "$site_md5" in
   "$CAPTCHA_MD5")
       echo "Potrzebna CAPTCHA"
       exit 0
       ;;
   "$BLANK_MD5")
       echo "Gra i buczy"
       exit 1
       ;;
   *)
       if [ "$1" = '-u' ]; then update; fi

       echo -e "Nieznany błąd.\nByc moze zmienila sie strona captchy. W takim wypadku uruchom:\n$0 -u" >&2
       rm -f "$page_path"
       exit 2
       ;;
    esac
else
    echo "Blad polaczenia"
    exit 3
fi

dekapec :
#!/bin/ash

. ./dekapec-funkcje

if ! type "$wget_command">/dev/null 2>&1; then
    echo "$wget_command not found!">&2
    exit 1
fi

rm -rf "$CAPTCHA_DIR"
mkdir -p "$CAPTCHA_DIR"

t_start=$(date +%s)
maxlevel=5

while true; do
    switch_wan "$aero" 1>/dev/null
    until ./captcha-need >/dev/null; do
   case "$?" in
       '1') echo -n '.' ;;
       '2') echo -n '?' ;;
       '3') echo -n '_' ;;
   esac
   sleep 5
    done
    echo
   
    t_start=$(date +%s)
    level=0
    session=''
    kapec=''
    HISTORY='0'

    echo -e "\n$(date +"%F %X") Poczatek procedury\n"
    until [ $level -eq $maxlevel ]; do
   err=''
   case "$level" in
       '0') #pobieranie obrazka
      switch_wan "$aero" 1>/dev/null || { switch_wan f5; break; }
      t_start=$(date +%s); echo "$(czas)reset zegara"
      echo -en "\nPOTRZEBNA CAPTCHA - POBIERAM... "
      if pobierz; then
          echo "OK"
          level=1
      else
          echo "$(czas)pobierz: Blad #$?" >&2
          level=0
      fi
      ;;

       '1') #wysylanie obrazka na serwer
      switch_wan "$pomocniczy" || { switch_wan f5; break; }
      echo -e "\nKOMUNIKACJA Z SERWEREM..."
      if rozpoz scp; then level=2; else level=1; fi
      ;;

       '2') #rozpoznawanie obrazka
      rozpoz ssh; err="$?"

      if [ "$err" -ne 0 ]; then stats; fi

      case "$err" in
          '0') #OK
         level='3'
         ;;
          '1') #nieprawidlowy format wyjscia
         ;;
          '2') #zla dlugosc CAPTCHY
         level=0
         ;;
          '3') #brak obrazka na serwerze
         level=1
         ;;
          '4') #blad krytyczny cb-shell
         switch_wan "$aero"
         exit 1
         ;;
          '5') #blad polaczenia ssh
                        ;;
          esac
      ;;

       '3') #wysylanie rozpoznanej CAPTCHy
      echo -e "\nWYSYLANIE ROZPOZNANEJ CAPTCHY..."
      switch_wan "$aero" || { switch_wan f5; break; }
      if wyslij; then
          echo "Poprawnie rozpoznana CAPTCHA"
          rm -rf "$CAPTCHA_DIR"
          level=4
      else
          echo "$(czas)wyslij: Blad #$?"
          echo "NIEpoprawnie rozpoznana CAPTCHA" >&2
          stats
          level=0
      fi
      ;;

       '4') #reset polaczenia aero
      switch_wan "$aero" f5 || break
      echo -e "\n$(czas)AERO2 GRA I BUCZY\n"
      stats
      level=$maxlevel
      ;;

   esac
   HISTORY="$HISTORY$level"
   looping_escape 3 || switch_wan f5
   sleep 1
    done
    echo -n "$(date +"%F %X") Do zobaczenia za godzine"
    sleep 55m
done

dekapec-funkcje :
#!/bin/ash

. ./dekapec.conf

kapec=''
session=''
t_start=0

czas() { echo -en "$((`date +%s`-$t_start)).\t"; }

pobierz() {
    mkdir -p "$CAPTCHA_DIR"
    "$wget_command" -q --timeout="$TIMEOUT" --post-data "viewForm=true" --output-document="$CAPTCHA_DIR"/session.html http://bdi.free.aero2.net.pl:8080 >/dev/null || return 1
    session=$(grep getCaptcha "$CAPTCHA_DIR"/session.html | grep -o -E 'PHPSESSID=.*\ ' | tr -d " '")
    sleep 1
    "$wget_command" -q --timeout="$TIMEOUT" --output-document="$CAPTCHA_DIR"/kapec.jpg http://bdi.free.aero2.net.pl:8080/getCaptcha.html?"$session" || return 2
    return 0
}

server_change() {
    if [ $(echo "$SERVERS" | wc -w) -eq 1 ]; then
        return 0
    fi
    server="$(echo $SERVERS | awk '{print $1;}')"
    SERVERS="$(echo "$SERVERS" | sed 's/^\ *//' | sed 's/\ *$//' | sed -e 's/^[^\ ]*//') $server"
    server="$(echo $SERVERS | awk '{print $1;}')"
    echo "zmiana serwera na $server"
}

rozpoz() {
    server=$(echo "$SERVERS" | awk '{print $1;}')
    case "$1" in
   'scp')
       echo -ne "$(czas)rozpoz: wysylam obrazek na $server ... "
       if scp -i /etc/dropbear/key.priv "$CAPTCHA_DIR"/kapec.jpg "$server":~/aero/ >/dev/null 2>&1; then
      echo "OK"
      return 0
       else
      echo "blad scp #$?" >&2
      server_change
      return 1
       fi
       ;;

   'ssh')
       echo -ne "$(czas)rozpoz: CaptchaBrotherhood... "
       kapec=$(ssh -i /etc/dropbear/key.priv "$server" "aero/cb-shell $cb_login $cb_haslo $DLUGOSC_CAPTCHY")
       err="$?"
       case "$err" in
      '0')
          echo "OK."
          echo -e "\n$(czas)\t\t\tCAPTCHA: >>$kapec<<"
          return 0
          ;;
      '127') #brak wtyczki cb-shell
          echo "brak wtyczki cb-shell" >&2
          return 4
          ;;
      '255') #blad polaczenia ssh
          echo "blad polaczenia ssh" >&2
          return 5
          ;;
      *) #bledy wtyczki cb-shell
          echo "blad #$err. cb-shell: $kapec" >&2
          return "$err"
          ;;
       esac
       ;;
    esac
}

wyslij() {
    command="$wget_command -q --timeout=$TIMEOUT --output-document=$CAPTCHA_DIR/wynik.html --post-data '$session&viewForm=true&captcha=$kapec' http://bdi.free.aero2.net.pl:8080"
    #echo "$(czas).\t wyslij: $command" >&2 #debug
    eval "$command" || return 3

    if grep 'ponownie' "$CAPTCHA_DIR"/wynik.html >/dev/null 2>&1; then
   echo -e "$(czas)wyslij: rozpoznanie prawidlowe."
   return 0
    elif grep 'Niepoprawna' "$CAPTCHA_DIR"/wynik.html >/dev/null 2>&1; then
   echo -e "$(czas)wyslij: rozpoznanie nieprawidlowe!"
   return 1
    else
   echo -e "$(czas)wyslij: nieznany blad" >&2
   cp "$CAPTCHA_DIR/wynik.html" /tmp/dekapec-wynik.html
   return 2
    fi
}

switch_wan() {
   
    if [ "$1" = 'f5' ]; then
   net="$(route -n | grep '^0.0.0.0' | sed 's/^.*-//g')"
    else
   net="$1"
    fi

    case "$net" in
        "$aero") a="$aero"; b="$pomocniczy";;
        "$pomocniczy") b="$aero"; a="$pomocniczy";;
    esac

    if [ "$1" = 'f5' -o "$2" = 'f5' ]; then
   echo -n "resetuje $a... " >&2
   ifdown "$a"
    else
   if route -n | awk '{print $8;}' | sed 's/^.*-//g' | tr '\n' ' ' | grep -v -w "$b" | grep -w "$a" >/dev/null 2>&1; then
       echo -e "$(czas)switch_wan: polaczenie $1 jest juz aktywne."
       return 0
   fi

   echo -en "$(czas)switch_wan: przelaczam $b => $a ..." >&2
    fi

    ifdown "$b"
    sleep 1
    ifup "$a"
    if ./logwait "Interface '$a' is now up" 60 2>/dev/null; then
   echo "OK" >&2
   sleep 1
    else
   echo "TIMEOUT" >&2
   ifdown "$a"
   ifdown "$b"
   return 1
    fi
    return 0
}

looping_escape() {
    [ "${#HISTORY}" -ge "$1" ] || return 0

    h_end="$(echo -n $HISTORY | tail -c $1)"
    for i in $(echo 0; seq $maxlevel); do
   h_end="$(echo $h_end | tr -s $i)"
    done

    if [ "${#h_end}" -eq 1 ]; then return 1; fi
    return 0
}

stats() {
    [ "$LOGFILE" ] || return 0
    case "$level" in
   '2') k='-' ;;
   '3') k='0' ;;
   '4') k='1' ;;
    esac

    if [ "$err" ]; then errorcode="$err : "; else errorcode=''; fi
    if [ "$err" = '2' ]; then k=0; fi

    echo "$(date +%s) $k $HISTORY '$errorcode$(echo ${kapec:0:100} | tr '\n' ' ')'" >> "$LOGFILE"

    if [ "$k" = '1' -a "$LOG2SERVER" = 1 ]; then
   echo "Wysylam log na $server"
   cat "$LOGFILE" | ssh -i /etc/dropbear/key.priv "$server" "cat >>aero/$(basename $LOGFILE)" || return 0
   rm "$LOGFILE"
    fi
}

logwait :
#!/bin/ash
#Uzycie:
#       logwait FRAGMENT_LOGU TIMEOUT
#Czeka na pojawienie sie w logach FRAGMENTU LOGU, po czym konczy z kodem wyjscia 0
#albo jesli minelo TIMEOUT sekund - konczy z kodem 1

logwait_timeout="/tmp/logwait_timeout_$$"
timeout() {
    sleep "$1"
    touch "$logwait_timeout"
    kill $(pgrep -l -P $$ | grep logread | awk '{print $1;}') 2>/dev/null
}

timeout $2 &

exec logread -f | while read line >/dev/null 2>&1; do
    if echo "$line" | grep "$1" >/dev/null 2>&1; then
        kill $(pgrep -l -P $$ | grep logread | awk '{print $1;}') 2>/dev/null
    fi
done

if [ -f "$logwait_timeout" ]; then
    rm "$logwait_timeout"
    exit 1
else
    kill "$(pgrep -P $$ | tr '\n' ' ')" 2>/dev/null
    exit 0
fi

cb-shell :
#!/bin/bash
MONO="$HOME/programy/mono/bin/mono"
MONO='mono' #polecenie uruchamiajace mono

cr_err=4
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"  #katalog zawierajacy skrypt
cd "$DIR"

if ! type "$MONO">/dev/null 2>&1; then
    echo "$MONO not found!"
    exit $cr_err
elif [ $# -ne 3 ]; then
    echo -e "Nieprawidlowe parametry! Uzycie: \n$0 LOGIN HASLO OCZEKIWANA_LICZBA_ZNAKOW"
    exit $cr_err
elif ! [ -f kapec.jpg ]; then
    echo "Brak obrazku kapcia!"
    exit 3
fi

output="$($MONO cbhcoreplugin.exe -l $1 -p $2 -c kapec.jpg)"
output="$(echo "$output" | sed 's/^\ *//')"
length=$(($(echo "$output" | sed 's/|.*//g' | wc -c | awk '{print $1;}')-1))
kapec="$(echo "$output" | sed 's/^.*|//g' | tr -d ' ')"

if [ "$length" -ne 22 ]; then
    echo "Nieprawidlowy format wyjscia wtyczki CB:$output. (length=$length != 22)"
    exit 1
elif ( [ "$3" -gt 0 ] && [ $(echo "$kapec" | wc -c | awk '{print $1;}') -ne "$(($3+1))" ] ) || \
    [ $(echo "$kapec" | wc -c | awk '{print $1;}') -gt 32 ] || [ $(echo "$kapec" | wc -l | awk '{print $1;}') -gt 2 ]; then
    echo "Nieprawidlowa dlugosc rozpoznanego tekstu:$kapec."
    exit 2
elif echo "$output" | grep "No Credits"; then
    echo "Brak funduszy na koncie CB!"
    exit $cr_err
elif echo "$output" | grep "User Error"; then
    echo "Blad konta CB! Sprawdz login i haslo."
    exit $cr_err
else
    echo "$kapec"
    rm -f kapec.jpg
    exit 0
fi


Na górę
 Wyświetl profil  
Odpowiedz z cytatem  
 Tytuł: Re: Dekapeć AERO2
Post: 18 sty 2015, 13:34 
Offline
Użytkownik

Rejestracja: 21 gru 2011, 20:08
Posty: 87
Czy jest na Gargoyle automat do rozwiązywania captcha ?


Na górę
 Wyświetl profil  
Odpowiedz z cytatem  
 Tytuł: Re: Dekapeć AERO2
Post: 18 sty 2015, 18:39 
Offline
Administrator
Awatar użytkownika

Rejestracja: 10 kwie 2010, 00:28
Posty: 13919
Lokalizacja: Warszawa
rumbo pisze:
Czy jest na Gargoyle automat do rozwiązywania captcha ?

Nie ma.

_________________
http://eko.one.pl - prawie wszystko o OpenWrt


Na górę
 Wyświetl profil  
Odpowiedz z cytatem  
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 4 ] 

Strefa czasowa UTC+1godz. [letni]


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 12 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów

Szukaj:
Przejdź do:  
cron
designed by digi-led.pl
...Copyright © 2010-2013, Ekipa openrouter.info