Crack-Ziel: Das verschlüsselte Login-Passwort eines ASP-Trojaners knacken, das Passwort des ASP-Trojaners knacken. Da es keine Versionsbeschreibung des Trojaners gibt, kenne ich den genauen Namen des Trojaners nicht.
Es gibt zwei Methoden zum Knacken: Ersetzen des Chiffretexts durch das verschlüsselte Passwort und Verwendung des Chiffretexts und des Verschlüsselungsalgorithmus zum Entschlüsseln des Passworts. Ersteres ist überhaupt kein Crack.
Zweck des Knackens: einfach zum Spaß.
Wenn ich den ASP-Quellcode nicht bekomme, habe ich keine Chance, das Passwort zu knacken. Ein Freund aus China sagte, er habe sich Zugang zu einer Webseite verschafft, konnte die Homepage aber nicht ändern. Er stellte fest, dass sich darin ein ASP-Trojaner befand, das Passwort jedoch verschlüsselt war. Dann gibt es diese Animation. Okay, es ist zu viel Unsinn, also seien Sie darauf vorbereitet, diese Erklärung wird ziemlich lang sein.
Der Schlüsselcode für die ASP-Trojaner-Anmeldepasswortüberprüfung lautet wie folgt:
if Epass(trim(request.form("password")))="q_ux624q|p" then
Response.cookies("Passwort")="8811748"
...
<%
Ende auswählen
Funktion Epass(pass)
temppass=StrReverse(left(pass&"zxcvbnm,./",10))
templen=len(pass)
mmpassword=""
für j=1 bis 10
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
nächste
Epass=replace(mmpassword,"'","B")
Endfunktion
%>
Offensichtlich wird die Epass-Funktion verwendet, um das eingegebene Passwort zu verschlüsseln, und dann wird der erhaltene Chiffretext mit dem ursprünglichen Chiffretext verglichen. Wenn Sie über ein wenig Programmierkenntnisse, insbesondere VB, verfügen, ist der Verschlüsselungsalgorithmus in Epass auf einen Blick klar. Wenn nicht, dann ist es egal, ich glaube, Sie werden es bald nach meiner Erklärung verstehen. In der Funktion ist die Variable, die das Passwort enthält, pass. pass&"zxcvbnm,./" Verbinden Sie den Inhalt in pass mit zxcvbnm,./, um eine neue Zeichenfolge zu erhalten. left(pass&"zxcvbnm,./",10) übernimmt die ersten 10 Ziffern. Die StrReverse-Funktion kehrt die Reihenfolge der resultierenden 10-stelligen Zeichenfolge um. len(pass) ermittelt die Länge des Passworts. Unten ist eine Schleife. Nehmen Sie den ASCII-Code jedes Bits in der erhaltenen Zeichenfolge – Passwortlänge + Rundung (Zeichenposition * 1,1), konvertieren Sie dann den erhaltenen Wert in Zeichen und stellen Sie die Verbindung wieder her. Ersetzen Sie abschließend alle '-Zeichen in der erhaltenen Zeichenfolge durch B, damit der Chiffretext generiert wird. Wenn wir den Verschlüsselungsalgorithmus extrahieren und den ursprünglichen Chiffretext durch unseren eigenen ersetzen, wird das entsprechende Passwort auch zu Ihrem Passwort. Aber wie gesagt, das ist nicht wirklich ein Crack.
Wenn wir in die Liebe eintreten, ist der Verschlüsselungsprozess wie folgt:
Liebe
lovezxcvbnm,./ 'Verbinden
lovezxcvbn 'Nimm die Top 10
nbvcxzevol 'Reihenfolge umgekehrt
N
110(ASCII)-4(Ziffern)+int(1(Position)*1.1)=107
Der ASCII-Code von 107 ist k und so weiter. Der endgültige Chiffretext ist:
k`ucy|hztsWir
können das Passwort durch den Chiffretext und den Verschlüsselungsalgorithmus ableiten. Beginnen Sie beim letzten Schritt des Algorithmus und arbeiten Sie sich nach oben. Der letzte Schritt besteht darin, alle „ durch B zu ersetzen. Ist es notwendig, B wieder durch „ zu ersetzen? Die Antwort lautet „Nein“. Solange wir den endgültigen Chiffretext erhalten, ist es möglich, dass das Passwort unterschiedlich ist. Bei 10 B beträgt die Anzahl der Originalpasswörter 2 hoch 10. Obwohl es nur ein Originalpasswort gibt, sind alle 1024 Passwörter korrekt. Wenn Sie es perfekt knacken möchten, können Sie versuchen, alle Kombinationen selbst zu schreiben.
Dann kann dieser Schritt ignoriert werden.
Der obige Algorithmus ist sehr klar:
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
wir müssen nur + und - ersetzen.
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
Aber es gibt noch ein anderes Problem. Wir kennen die Länge des Passworts nicht. Das Passwort ist zwischen 1 und 10 Ziffern zu lang.
Dann können wir eine Schleife von 1 bis 10 verwenden, um alle möglichen Passwörter zu finden, und dann die Funktion StrReverse verwenden, um die Reihenfolge umzukehren.
Wie stellen wir also fest, welches Passwort wir letztendlich erhalten haben? Sie können pass&"zxcvbnm,./" verwenden, um zu sehen, ob am Ende des Passworts die ersten Ziffern von zxvbnm,./ stehen.
Nun, das ist das wahre Passwort. Wenn das Passwort dann 10-stellig ist, ist es immer korrekt, da es später keine Verbindung mehr gibt. Wir könnten also zwei Antworten bekommen.
Das Folgende ist die Entschlüsselungsfunktion, die ich geschrieben habe:
functionCcode(code)
für tempeln1=1 bis 10
mmcode=""
für j=1 bis 10
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
nächste
Ccode=strReverse(mmcode)
Response.write „Password“&templen1&“: „&Ccode&“<br>“
if mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) und templen1<>10 dann
result=left(Ccode,templen1)
nächste
Response.write „Letztes Passwort:“&result
Die Endfunktion
ist möglicherweise nicht in so kurzer Zeit vollständig beherrscht. Dann werde ich die Dokumentation und den verschlüsselten ASP-Quellcode im komprimierten Paket anhängen Studieren Sie es sorgfältig. Ebenso ist Passwort 10 immer korrekt. Dann nehmen wir den ursprünglichen Chiffretext in ASP und sehen, was das Ergebnis sein wird. OK, Sie können sich mit beiden Passwörtern anmelden. Zum Testen habe ich einen IIS lokal angenommen. Wenn der Webserver nicht lokal eingerichtet werden kann, können Sie mich kontaktieren und ihn in anderen Sprachen schreiben.