Beispiel #1
0
 def goto3():
     x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
     if not x.casefold()=='hash':
         print(str(errs.CommandNotFoundError(x)))
         goto3()
     hashes={'80':'aGFzaDE=','443':'Mmhhc2g='}
     print(css.HEADER+'hashes:'+css.ENDC)
     [print(css.OKCYAN+'[HASH]'+css.ENDC,key,hashes[key]) for key in hashes.keys()] # FIXME scrive tre volte "hashes:\nport hash\nport hash" # si è fixato da solo wtf
Beispiel #2
0
    def parser(self, x):
        cmd=x.split()[0].casefold()
        params=x.split()[1:]
        if '-h' in params:
            self.docs(cmd)
            return

        # HELP
        if cmd=='help':
            if not len(params):
                print(css.HEADER+'[*]'+css.ENDC+' List of commands:')
                [print(command) for command in json.loads(open('core/commands.json').read())['commands']]
            else:
                self.docs(params[0].casefold())
        
        # SHOW
        elif cmd=='show':
            if '-a' in params:
                self.overrideshow=True
            if 'id' in params or '-id' in params:
                self.showids=True
                self.showpos=False
            elif 'pos' in params or '-pos' in params:
                self.showids=False
                self.showpos=True
            elif 'null' in params or '-null' in params:
                self.showids=False
                self.showpos=False
            else:
                raise errs.ParamError(params)

        # SELECT
        elif cmd=='select':
            if '-id' in params:
                v=int(params[params.index('-id')+1])
                for bot in self.robots:
                    if bot.id==v:
                        if bot==self.player:
                            raise errs.SameObjError(bot, self.player)
                            return
                        if int(bot.pos[0])>=(int(self.player.pos[0])-self.player.action_range) and int(bot.pos[0])<=(int(self.player.pos[0])+self.player.action_range):
                            if int(bot.pos[1])>=(int(self.player.pos[1])-self.player.action_range) and int(bot.pos[1])<=(int(self.player.pos[1])+self.player.action_range):
                                self.player.selected=bot
                            else:
                                raise errs.ActionRangeError(bot)
                        else:
                            raise errs.ActionRangeError(bot)
            elif '-pos' in params:
                v=params[params.index('-pos')+1]
                for bot in self.robots:
                    if bot.pos==[int(i) for i in v.split(',')]:
                        if int(bot.pos[0])>=(int(self.player.pos[0])-self.player.action_range) and int(bot.pos[0])<=(int(self.player.pos[0])+self.player.action_range):
                            if int(bot.pos[1])>=(int(self.player.pos[1])-self.player.action_range) and int(bot.pos[1])<=(int(self.player.pos[1])+self.player.action_range):
                                self.player.selected=bot
                            else:
                                raise errs.ActionRangeError(bot)
                        else:
                            raise errs.ActionRangeError(bot)
            else:
                raise errs.ParamError(params)

        # MOVE
        elif cmd=='move':
            self.player.move(params[0])
        
        # EXIT && BYE
        elif cmd in ['bye', 'exit']:
            print('[?] Are you sure?')
            c=getch()
            if c in ['y','s']:
                # accredita
                #globals()['srcdata']['score']+=self.gamepoints
                main()
            elif c=='n':
                return
            else:
                print(css.FAIL+'[ERR]'+css.ENDC+' Unrecognized key, back to game.')
        
        # SHOP
        elif cmd=='shop':
            self.inshop=True
            if '-s' in params or '--show' in params:
                pass
        
        # RECO
        elif cmd in ['reco', 'recognitors']:
            if not len(params):
                self.Team.parser('',self.player)
            else:
                self.Team.parser(' '.join(params), self.player)

        # NOT FOUND        
        else:
            raise errs.CommandNotFoundError(cmd)
Beispiel #3
0
 def goto2(text=None):
     cls_()
     fmap=lambda x: print() if x==5 else print('_', end=' ')
     [[fmap(i) for i in range(0,6)] for _ in range(0,5)]
     print('\nQuesta è la mappa, qui puoi vedere te, i robot e i punti in cui entrambi potete spostarvi. ogni posizione è chiamata "tile"')
     print('un tile vuoto viene indicato con un underscore ("_") mentre un tile occupato prende di norma limmagine del carattere che la occupa.')
     print('un robot ha la lettera R come immagine, rossa se il robot è bloccato, verde se è gia sbloccato o stato hackerato. tu sei rappresentato con una U blu.')
     print('in questa schermata come in qualsiasi altra abbiamo SICURAMENTE disponibile il comando help, quindi proviamo a scrivere "help":')
     if text: print(text)
     x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
     if not x.casefold()=='help':
         goto2(str(errs.CommandNotFoundError(x)))
     print(css.HEADER+'[*]'+css.ENDC+' List of commands:')
     [print(command) for command in json.loads(open('core/commands.json').read())['commands']]
     print("\nCome vedi help restituisce una lista dei comandi ma senza spiegarne la sintassi ne l'utilizzo, come facciamo?")
     print("grazie alla syx sappiamo che ogni comando ha (fortunatamente) il parametro -h che se specificato mostra la documentazione del comando.")
     print('senza leggere tutte le documentazioni possiamo farci un idea di come funzioni un comando solo dal nome, ad esempio show.')
     print('show serve a modificare la vista della mappa, la sua sintassi è:\n'+css.OKGREEN+'>'+css.ENDC+css.BOLD+' show id||pos -a'+css.ENDC)
     print('id||pos significa id OR pos, quindi una delle due possibilità (in realtà possiamo scrivere show null per tornare ala vista di default)')
     print('se -a (a sta per "all") viene specificato allora mostra anche i dati del player (i tuoi) oltre che dei nemici.')
     print('un altro comando importantissimo è select che serve, come suggerisce il nome, a selezionare un robot dalla mappa. questo comando ci mette')
     print('in comunicazione con la head, la parte che credo tu abbia visto durante l introspezione di un robot. vediamo la sintassi di select.')
     print(css.OKGREEN+'> '+css.ENDC+css.BOLD+'select -id||-pos value'+css.ENDC+'\n-id or -pos serve a dichiarare quale tipo di valore stiamo per inserire e value')
     print('è proprio questo valore. se vogliamo selezionare il bot con id=52 scriveremo "select -id 52", se invece vogliamo usare la posizione di un robot con x=3 e y=4 scriviamo')
     print('"select -pos 3,4". la cosa importante da notare è che x,y vada scritto senza spazi altrimenti non verrà riconosciuto.')
     print('la domanda che viene spontanea è dove prendiamo i valori di cui necessitiamo? sarà la mappa a fornirceli, con show id vediamo tutti gli id, ne scegliamo uno e poi')
     print('con "select -id IDSCELTO" usiamo IDSCELTO per far capire alla mappa quale bot intendiamo.','\npress any key'); getch()
     cls_()
     print('adesso con select abbiamo selezionato un Robot e siamo nella sua head. cosa fare? per vincere un combattimento dobbiamo distruggere tutti i robot quindi')
     print('spegniamoli tutti. attualmente non hai tanti strumenti a disposizione, puoi comprarli dallo shop ma fino a quel momento dovrai farti bastare questi che hai già.')
     print('tornando a noi, lo schema da seguire per distruggere un Robot è:\n1. bypassare una porta\n2. usare la porta per hackerarlo\n3. spegnerlo')
     print("andiamo in ordine, per bypassare una porta dobbiamo:\n1. ottenere il suo hash\n2. decodificarlo\n3. usare l'hash decodificato per bypassarla")
     print('quindi prima di tutto otteniamo il suo hash, come? il comando hash serve proprio a questo. scrivi "hash" per vedere tutte le porte con il relativo hash:')
     def goto3():
         x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
         if not x.casefold()=='hash':
             print(str(errs.CommandNotFoundError(x)))
             goto3()
         hashes={'80':'aGFzaDE=','443':'Mmhhc2g='}
         print(css.HEADER+'hashes:'+css.ENDC)
         [print(css.OKCYAN+'[HASH]'+css.ENDC,key,hashes[key]) for key in hashes.keys()] # FIXME scrive tre volte "hashes:\nport hash\nport hash" # si è fixato da solo wtf
     goto3()
     print('\nQui trovi gli hash scritti "porta hash", copiane uno ("=" incluso) e passiamo al prossimo step.'); getch()
     cls_()
     def goto4():
         choosedport='80'
         print('adesso che abbiamo un hash dobbiamo decodificarlo. per farlo usiamo decoder. la sua sintassi è:\n'+css.OKGREEN+'> '+css.ENDC+'decoder -text testo')
         print("questo decodificherà 'testo' quindi andiamo a sostituire testo con il nostro hash. ora"+' "decoder -text incolla_qui"')
         print("P.S. se ti fossi dimenticato di copiare il valore o lo avessi perso puoi usare questo:\naGFzaDE=\nche è l'hash della porta 80.")
         x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
         if x.casefold().split()[0]=='decoder' and x.casefold().split()[1]=='-text' and x.split()[2] in ['aGFzaDE=','Mmhhc2g=']:
             if x.split()[2]=='aGFzaDE=':
                 choosedport='80'
             else:
                 choosedport='443'
             print(css.HEADER+'[*]'+css.ENDC+' Decoded text: '+css.OKBLUE, base64.b64decode(x.split()[2]).decode(),css.ENDC)
             return choosedport
         else:
             print('Invalid syntax.'); return goto4()
     choosedport=goto4()
     print('\nDecoder ha restituito la versione decifrata del tuo testo. adesso usa questa versione decifrata per bypassare una porta.')
     print('usiamo lo stesso comando di prima, hash. la sua sintassi è\n'+css.OKGREEN+'> '+css.ENDC+'hash -port p -res decodedhash\nnoi prima abbiamo scritto hash e basta,')
     print('questo mostra tutte le porte con relativi hash, se avessimo specificato una porta avrebbe mostrato solo quella porta specificata.')
     print('-res è opzionale come port, se specificato invece di mostrare gli hash ne usa uno per sbloccare una porta specificata. esempio:')
     print("hash -res abcde -port 80\nusa abcde per sbloccare la porta 80, al posto di abcde dobbiamo inserire la versione decifrata dell'hash della porta 80")
     print("se hai decifrato l'hash della porta 80 scrivi:\nhash -res incolla_qui -port 80\nse quello della 443:\nhash -res incolla_qui -port 443")
     print('non dimenticare di sostituire incolla_qui con il risultato di decoder! proviamo:')
     def goto5():
         x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
         ths=x.casefold().split()
         if ths[0]=='hash' and ths[1]=='-res' and ths[2] in ['hash1', '2hash'] and ths[3]=='-port' and ths[4] in ['80', '443']:
             if (ths[2]=='hash1' and ths[4]=='80') or (ths[2]=='2hash' and ths[2]=='443'):
                 print(css.HEADER+'[*]'+css.ENDC+' Port {p} Successfully bypassed.'.format(p=ths[4]))
             else:
                 print('cannot bypass, hash incorrect for this port.'); goto5()
         else:
             print('Invalid syntax.'); goto5()
     goto5(); getch()
     cls_()
     print('Perfetto! hai appena bypassato una porta per la prima volta, adesso hai fatto il 90%% del lavoro. il nostro obiettivo è quello di spegnere un robot quindi procediamo.')
     print('il prossimo comando da usare è hack. questo usa una porta sbloccata per disabilitare i sistemi di sicurezza del robot. la sua sintassi è:\nhack -port p')
     print('ammettendo che p sia il numero di una porta sbloccata. adesso usiamolo per disabilitare i sistemi di questo bot, scrivi:\nhack -port portascelta')
     print('sostituendo portascelta con la porta dalla quale avevi copiato gli hash, nel nostro caso {}'.format(choosedport))
     print('proviamo quindi ad hackerare il robot usando la porta sbloccata:')
     def goto6():
         x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
         try:
             if x.split()[0].casefold()=='hack' and x.split()[1]=='-port' and x.split()[2] in ['80','443']:
                 if not str(x.split()[2])==str(choosedport):
                     print(errs.HackError()); goto6()
                 else:
                     print(css.OKCYAN+'[..]'+css.ENDC+' Hacking on port:',choosedport)
                     time.sleep(0.5)
                     print(css.OKCYAN+'[*]'+css.ENDC+css.OKGREEN+' Successfully hacked.'+css.ENDC)
             else:
                 print('command or syntax r invalid, or maybe the port is incorrect!')
                 goto6()
         except:
             print('an error has occured.')
             goto6()
     goto6()
     print('\nhai correttamente hackerato il robot! adesso non ha più i sistemi di sicurezza abilitati e nulla ci impedirà di distruggerlo.')
     print('il prossimo comando è destroy che non ha parametri ne nulla, basta scrivere destroy (o shutdown, stesso comando ma diverso nome)')
     print('proviamo:')
     def goto7():
         x=input(css.OKGREEN+'[MAP]'+css.ENDC+css.OKCYAN+'[SCORE:{}]'.format('0')+css.ENDC+' >> ')
         if x.casefold() in ['destroy', 'shutdown']:
             print(css.FAIL+'[..]'+css.ENDC+' Self-Destruction Enabled..')
             time.sleep(0.4)
             print(css.HEADER+'[*]'+css.ENDC+' Bot killed.')
         else:
             print('puoi scrivere solo shutdown o destroy.')
             goto7()
     goto7()
     print('\nWOOOOHOOOO, hai ucciso il tuo primo robot, come crescono in fretta *lacrimuccia*.')
     print('da adesso le cose si faranno più difficili, a differenza di adesso avrai carta bianca e potrai eseguire ogni comando quando vorrai')
     print('sempre ammesso che funzionerà :)')
     print('potrai ripetere il tutorial quando vorrai, basta scrivere "tutorial -repeat" nella schermata home.')