Alvo de crack: quebrar a senha de login criptografada de um Trojan asp, quebrar a senha do Trojan asp. Como não há descrição da versão do Trojan, não sei o nome específico do Trojan.
Existem dois métodos de cracking: substituindo o texto cifrado pela senha criptografada e usando o texto cifrado e o algoritmo de criptografia para descriptografar a senha. O primeiro não é realmente uma rachadura.
Objetivo do cracking: apenas por diversão.
Se eu não conseguir o código-fonte do asp, não terei chance de quebrar a senha. Um amigo da China disse que obteve acesso a uma página da web, mas não conseguiu modificar a página inicial. Ele descobriu que havia um Trojan ASP nela, mas a senha estava criptografada. Depois há esta animação. Ok, há muita bobagem, então esteja preparado, essa explicação será bem longa.
O código-chave para verificação de senha de login do Trojan asp é o seguinte:
se Epass(trim(request.form("senha")))="q_ux624q|p" então
resposta.cookies("senha")="8811748"
...
<%
final selecionar
função Epass(passar)
temppass=StrReverse(esquerda(pass&"zxcvbnm,./",10))
templon=len(passar)
mmsenha=""
para j = 1 a 10
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
próximo
Epass=substituir(mmpassword,"'","B")
função final
%>
Obviamente, a função Epass é usada para criptografar a senha inserida e então o texto cifrado obtido é comparado com o texto cifrado original. Se você tiver um pouco de base de programação, especialmente VB, o algoritmo de criptografia no Epass ficará claro à primeira vista. Se não, então não importa. Na função, a variável que contém a senha é pass. pass&"zxcvbnm,./" Conecte o conteúdo em pass com zxcvbnm,./ para obter uma nova string. left(pass&"zxcvbnm,./",10) leva os primeiros 10 dígitos. A função StrReverse inverte a ordem da sequência de 10 dígitos resultante. len(pass) obtém o comprimento da senha. Abaixo está um loop. Pegue o código Ascii de cada bit na string obtida - comprimento da senha + arredondamento (posição do caractere * 1,1) e, em seguida, converta o valor obtido em caracteres e reconecte. Por fim, substitua todos os caracteres ' na string obtida por B, para que o texto cifrado seja gerado. Se extrairmos o algoritmo de criptografia e substituirmos o texto cifrado original pelo nosso, a senha correspondente também se tornará sua senha. Mas como eu disse, isso não é realmente uma rachadura.
Se entrarmos no amor, o processo de criptografia é o seguinte:
amor
lovezxcvbnm,./ 'Conectar
lovezxcvbn 'Fique entre os 10 primeiros
nbvcxzevol 'Ordem revertida
n
110(ascii)-4(dígitos)+int(1(posição)*1,1)=107
O código ASCII de 107 é k e assim por diante.
k`ucy|hztsPodemos
deduzir a senha por meio do texto cifrado e do algoritmo de criptografia. Comece na última etapa do algoritmo e vá subindo. A última etapa é substituir todos os ' por B. É necessário substituir B novamente por '? Desde que consigamos obter o texto cifrado final, é possível que a senha seja diferente. Se houver 10 B's, então o número de senhas originais será 2 elevado à décima potência. Embora haja apenas uma senha original, todas as 1.024 senhas estão corretas. Se quiser quebrá-lo perfeitamente, você pode tentar escrever todas as combinações sozinho.
Então esta etapa pode ser ignorada.
O algoritmo acima é muito claro,
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
só precisamos substituir + e -.
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
Mas há outro problema, não sabemos o comprimento da senha com antecedência. a senha tem entre 1 e 10 dígitos muito longa.
Então podemos usar um loop de 1 a 10 para encontrar todas as senhas possíveis e então usar a função StrReverse para reverter a ordem.
Então, como determinamos qual senha finalmente obtivemos? Você pode usar pass&"zxcvbnm,./" para ver se há os primeiros dígitos de zxvbnm,./ no final da senha.
Bem, esta é a senha real. Então se a senha tiver 10 dígitos, ela estará sempre correta, pois não haverá conexão posteriormente. Portanto, podemos obter duas respostas.
A seguir está a função de descriptografia que escrevi:
funçãoCcódigo(código)
para templon1 = 1 a 10
mmcode=""
para j = 1 a 10
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
próximo
Ccode = strReverse (mmcode)
resposta.write "Senha"&templen1&":"&Ccode&"<br>"
se mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) e templon1<>10 então
resultado=esquerda(Ccode,templen1)
próximo
resposta.write "Última senha:"&resultado
A função final
está pronta. O algoritmo pode não ser totalmente dominado em tão pouco tempo. Isso é normal. Então, anexarei a documentação e o código-fonte ASP criptografado e descriptografado no pacote compactado. estude-o cuidadosamente. Da mesma forma, a senha 10 está sempre correta. Então pegaremos o texto cifrado original em asp e veremos qual será o resultado. OK, você pode fazer login com ambas as senhas. Para teste, assumi um IIS localmente. Se o servidor web não puder ser configurado localmente, você pode entrar em contato comigo e escrevê-lo em outros idiomas.