Cible du crack : cracker le mot de passe de connexion crypté d'un cheval de Troie asp, cracker le mot de passe du cheval de Troie asp. Puisqu’il n’existe aucune description de la version du cheval de Troie, je ne connais pas le nom spécifique du cheval de Troie.
Il existe deux méthodes de piratage : remplacer le texte chiffré par le mot de passe crypté et utiliser le texte chiffré et l'algorithme de cryptage pour déchiffrer le mot de passe. Le premier n’est pas vraiment un crack du tout.
But du crack : juste pour le plaisir.
Si je ne parviens pas à obtenir le code source asp, je n'ai aucune chance de déchiffrer le mot de passe. Un ami chinois a déclaré qu'il avait accédé à une page Web, mais qu'il n'avait pas pu modifier la page d'accueil. Il a découvert qu'elle contenait un cheval de Troie ASP, mais que le mot de passe était crypté. Ensuite, il y a cette animation. Bon, il y a trop de bêtises, alors préparez-vous, cette explication sera assez longue.
Le code clé pour la vérification du mot de passe de connexion du cheval de Troie asp est le suivant :
si Epass(trim(request.form("password")))="q_ux624q|p" alors
réponse.cookies("mot de passe")="8811748"
...
<%
fin de la sélection
fonction Epass(pass)
temppass=StrReverse(gauche(pass&"zxcvbnm,./",10))
templen=len(passer)
mmmot de passe=""
pour j=1 à 10
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
suivant
Epass=remplacer(mmpassword,"'","B")
fonction de fin
%>
Évidemment, la fonction Epass est utilisée pour crypter le mot de passe saisi, puis le texte chiffré obtenu est comparé au texte chiffré d'origine. Si vous avez un peu de base en programmation, en particulier en VB, alors l'algorithme de cryptage d'Epass sera clair en un coup d'œil. Si ce n'est pas le cas, cela n'a pas d'importance. Je pense que vous le comprendrez peu de temps après mon explication. Dans la fonction, la variable qui contient le mot de passe est pass. pass&"zxcvbnm,./" Connectez le contenu de pass avec zxcvbnm,./ pour obtenir une nouvelle chaîne. left(pass&"zxcvbnm,./",10) prend les 10 premiers chiffres. La fonction StrReverse inverse l'ordre de la chaîne de 10 chiffres résultante. len(pass) obtient la longueur du mot de passe. Ci-dessous se trouve une boucle. Prenez le code Ascii de chaque bit de la chaîne obtenue - longueur du mot de passe + arrondi (position du caractère * 1,1), puis convertissez la valeur obtenue en caractères et reconnectez-vous. Enfin, remplacez tous les caractères ' de la chaîne obtenue par B, afin que le texte chiffré soit généré. Si nous extrayons l'algorithme de cryptage et remplaçons le texte chiffré d'origine par le nôtre, le mot de passe correspondant deviendra également votre mot de passe. Mais comme je l'ai dit, ce n'est pas vraiment une fissure.
Si nous entrons dans l’amour, le processus de cryptage est le suivant :
amour
lovezxcvbnm,./ 'Connecter
lovezxcvbn 'Prenez le top 10
nbvcxzevol 'Ordre annulé
n
110(ascii)-4(chiffres)+int(1(position)*1.1)=107
Le code ASCII de 107 est k, et ainsi de suite. Le texte chiffré final est :
k`ucy|hztsNous
pouvons déduire le mot de passe grâce au texte chiffré et à l'algorithme de cryptage. Commencez par la dernière étape de l’algorithme et progressez. La dernière étape consiste à remplacer tous les ' par B. Est-il nécessaire de remplacer B par ' La réponse est non. Tant que nous pouvons obtenir le texte chiffré final, il est possible que le mot de passe soit différent. S'il y a 10 B, alors le nombre de mots de passe d'origine est de 2 à la puissance 10. Bien qu'il n'y ait qu'un seul mot de passe d'origine, les 1 024 mots de passe sont tous corrects. Si vous voulez le déchiffrer parfaitement, vous pouvez essayer d'écrire vous-même toutes les combinaisons.
Cette étape peut alors être ignorée.
L'algorithme ci-dessus est très clair,
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
il suffit de remplacer + et -.
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
Mais il y a un autre problème, nous ne connaissons pas la longueur du mot de passe à l'avance. le mot de passe contient entre 1 et 10 chiffres trop longs.
Ensuite, nous pouvons utiliser une boucle de 1 à 10 pour trouver tous les mots de passe possibles, puis utiliser la fonction StrReverse pour inverser l'ordre.
Alors, comment déterminer quel mot de passe nous avons finalement obtenu ? Vous pouvez utiliser pass&"zxcvbnm,./" pour voir s'il y a les premiers chiffres de zxvbnm,./ à la fin du mot de passe.
Eh bien, c'est le vrai mot de passe. Ensuite, si le mot de passe est à 10 chiffres, il sera toujours correct, car il n'y aura pas de connexion par la suite. Nous pourrions donc obtenir deux réponses.
Voici la fonction de décryptage que j'ai écrite :
fonctionCcode(code)
pour templen1=1 à 10
mmcode=""
pour j=1 à 10
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
suivant
Ccode=strReverse(mmcode)
réponse.écrire "Mot de passe"&templen1&":"&Ccode&"<br>"
si mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) et templen1<>10 alors
résultat=gauche(Ccode,templen1)
suivant
réponse.write "Dernier mot de passe :"&résultat
La fonction finale
est prête. L'algorithme peut ne pas être entièrement maîtrisé dans un laps de temps aussi court. Ensuite, je joindrai la documentation et le code source ASP crypté et déchiffré dans le package compressé. étudiez-le attentivement. De même, le mot de passe 10 est toujours correct. Ensuite, nous prendrons le texte chiffré original en asp et verrons quel sera le résultat. OK, vous pouvez vous connecter avec les deux mots de passe. Pour les tests, j'ai supposé un IIS localement. Si le serveur Web ne peut pas être configuré localement, vous pouvez me contacter et l'écrire dans d'autres langues.