Ir para o conteúdo
spcl

repetição um pouco estranha

Mensagens Recomendadas

spcl    0
spcl

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

Editado por spcl
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
spcl    0
spcl

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?

Editado por Rui Carlos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
spcl    0
spcl

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]

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
spcl    0
spcl

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();

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
spcl    0
spcl

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

Editado por spcl

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
spcl    0
spcl

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
Rui Carlos

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.