spcl Posted November 15, 2013 at 11:19 PM Report #533396 Posted November 15, 2013 at 11:19 PM (edited) boa noite, estou a fazer um script de brute-force pois sou novato e queria fazer algo que nesta linguagem para mim fosse um desafio, o objetivo deste script é eu dar uma string e ele fazer o brute force ate chegar a ela De momento apenas estou a dar os códigos dos caracteres em ascii para pedir o próximo conjunto de ascii para depois passar pelo chr() e concatenar tudo e verificar, o problema e que me deu um erro aqui e ja tentei de todas as formas e nada, e sem ele resolvido não consigo avançar, se alguém me poder ajudar e se o erro for algo de caras me explicar porque acontece agradeço muito codigo python: import hashlib class brute_force: def nextascii(last): broken=last.split(',') h=int(len(broken)-1) j=int(h) i=0 while i!=1: if h==-1: broken.append(int(0)) i=1 else: if broken[h]=='': broken[h]=int(0) i=1 elif broken[h]=='255': broken[h]=int(0) h-=1 else: broken[h]=int(broken[h])+1 i=1 newascii=''.join(str(broken)) return newascii def asciitochar(ascii_string): ascii_string=ascii_string.split(',') charstring='' for i in range(len(ascii_string)): if ascii_string[i]!='': charstring+=(chr(int(ascii_string[i]))) return charstring class crypt: def md5(string): string=hashlib.md5(string.encode()).hexdigest() return string encrypt=input('insert hash: ') print(brute_force.nextascii(encrypt)) encrypt=brute_force.nextascii(encrypt) #print(brute_force.nextascii(encrypt)) #encrypt=brute_force.nextascii(encrypt) o erro acontece depois de descomentar as 2 ultimas lines e o que eu faco e apenas isto: insert hash: 1,2,3 ['1', '2', 4] Traceback (most recent call last): File "C:\wamp\www\python\decrypt.py", line 59, in <module> print(brute_force.nextascii(encrypt)) File "C:\wamp\www\python\decrypt.py", line 25, in nextascii broken[h]=int(broken[h])+1 ValueError: invalid literal for int() with base 10: ' 4]' desculpem pas queria saber mais coisa se possivel, como eu posso fazer isto de php no python? function xpto(var=null){ } declaracao: xpto(0); xpto(); estou a utilizar python 3.x obrigado Edited November 15, 2013 at 11:28 PM by spcl GeSHi
Rui Carlos Posted November 17, 2013 at 12:12 PM Report #533533 Posted November 17, 2013 at 12:12 PM No início da função nextascii, faz imprime o valor do broken (logo depois de definires a variável). O problema é que estás a definir mal o valor da variável broken (não podes simplesmente fazer um split). Rui Carlos Gonçalves
spcl Posted November 17, 2013 at 04:24 PM Author Report #533568 Posted November 17, 2013 at 04:24 PM em ja imprimi e nada, ja tentei definir de outras maneiras e nada, tentei broken=last broken.split() broken.split(',') broken=[] broken=last.split(',') da-me sempre este erro: insert hash: 1,2,3 ['1', '2', 4] Traceback (most recent call last): File "C:\wamp\www\python\decrypt.py", line 59, in <module> print(brute_force.nextascii(encrypt)) File "C:\wamp\www\python\decrypt.py", line 25, in nextascii broken[h]=int(broken[h])+1 ValueError: invalid literal for int() with base 10: ' 4]' será que me pode dizer como fazer?
Rui Carlos Posted November 17, 2013 at 04:34 PM Report #533569 Posted November 17, 2013 at 04:34 PM E o que é que imprimiu? Qual é o conteúdo de broken? E já agora, quando fazes int(broken[h])+1, qual é o conteúdo de broken[h]? Rui Carlos Gonçalves
spcl Posted November 18, 2013 at 03:57 PM Author Report #533686 Posted November 18, 2013 at 03:57 PM ao digitar normalmente aparece: ['1', '2', '3'] mas antes de acontecer o erro o broken aparece assim: ["['1'", " '2'", ' 4]'] quanto ao broken[h] imprime: 4]
Rui Carlos Posted November 18, 2013 at 04:32 PM Report #533690 Posted November 18, 2013 at 04:32 PM A tua função "funciona" para inputs como 1,2,3. O problema é que ela devolve algo com ['1', '2', 4]. Quando tentas chamar novamente a função com o resultado da chamada anterior, vai dar asneira, visto que tens ['1', '2', 4] em vez de 1, 2, 4. Basicamente tens que tornar o output da função consistente com o input. Deves usar chr(ord(broken[h])+1) para incrementar um carácter. Usas o ord em vez do int, pois queres obter o código ASCII e não saber que inteiro está representado, e depois usas o chr para converter novamente para um carácter. Depois usas ','.join(broken) para fazer o inverso do split. def nextascii(last): broken=last.split(',') h=int(len(broken)-1) j=int(h) i=0 while i!=1: if h==-1: broken.append(int(0)) i=1 else: if broken[h]=='': broken[h]=int(0) i=1 elif broken[h]=='255': broken[h]=int(0) h-=1 else: broken[h]=chr(ord(broken[h])+1) i=1 newascii=','.join(broken) return newascii Rui Carlos Gonçalves
spcl Posted November 18, 2013 at 05:24 PM Author Report #533703 Posted November 18, 2013 at 05:24 PM era mesmo isto muito obrigado pela resolução e pela explicação e será que me poderia responder a segunda questão? agradecia imenso como passo isto de php para python?, o que eu queria com isto era fazer os tratamentos dentro da funcao e independentemente de passar variável ou não ela continuar funcionando, no php passo assim: function xpto(var=null){ } xpto(0); xpto();
Rui Carlos Posted November 18, 2013 at 05:35 PM Report #533707 Posted November 18, 2013 at 05:35 PM Nada como consultar a documentação: Default Argument Values Rui Carlos Gonçalves
spcl Posted November 18, 2013 at 06:02 PM Author Report #533708 Posted November 18, 2013 at 06:02 PM (edited) ja encontrei o que fazia de mal quando nao passava a var eu fazia assim: def xpto (var='NONE') mas agora encontrei um problema no código, ainda dentro daquilo se colocar no input: 1,2,9 e me retornado 1,2,: ja tentei fazer na proxima linha broken[h]=ord(broken[h]) visto que o que eu quero e o codigo do ascii e nao o caracter, dai eu ter feito isso, so que e me gerado um erro insert hash: 1,2,3 Traceback (most recent call last): File "C:\wamp\www\python\decrypt.py", line 51, in <module> print(brute_force.nextascii(encrypt)) File "C:\wamp\www\python\decrypt.py", line 25, in nextascii newascii=','.join(broken) TypeError: sequence item 2: expected str instance, int found fiz um print : print(broken[h]) e retornou 52, não estou a entender porque este erro Edited November 18, 2013 at 06:04 PM by spcl
Rui Carlos Posted November 18, 2013 at 06:53 PM Report #533713 Posted November 18, 2013 at 06:53 PM Antes de continuares, acho que era conveniente definires de forma mais clara o que são os inputs e o que são os outputs de cada uma das funções que queres definir. Em particular define o tipo de dados do input e do output. Estás a misturar inteiros, caracteres e strings, o que torna o código propício a erros. Rui Carlos Gonçalves
spcl Posted November 19, 2013 at 01:15 AM Author Report #533773 Posted November 19, 2013 at 01:15 AM consegui resolver, e descobri o erro, na penúltima linha em: newascii=','.join(broken), aqui estava a juntar tudo novamente, o problema e que o broken tinha valores int e outros str, o que eu fiz para resolver foi, ao dar o novo valor ao broken: broken[h]=int(broken[h])+1, isto para poder somar, tive de fazer depois o contrario: broken[h]=str(broken[h]) e resultou, obrigado pela ajuda
Rui Carlos Posted November 19, 2013 at 10:18 AM Report #533790 Posted November 19, 2013 at 10:18 AM A razão pela qual eu coloquei isso a juntar tudo de novo, era para que o output fosse do mesmo tipo que o input (uma string, com caracteres separados por vírgulas). Isto era necessário para que pudesses compor a função. Pelo que percebi, afinal tu querias trabalhar com uma lista de inteiros, e não com a string, daí ter dito na minha mensagem anterior que devias definir melhor o que pretendes, e em particular o formato dos dados. Provavelmente, o melhor até seria acabares com as conversões de string para listas, e usares sempre listas na função nextascii. Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now