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
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)
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.')