Haftungsausschluss: Dieser Artikel dient nur zum Lernen und zur Kommunikation und darf nicht für illegale Zwecke, kommerzielle Aktivitäten usw. verwendet werden. Ansonsten geschieht dies auf eigenes Risiko. Wenn es einen Verstoß gibt, informieren Sie ihn bitte und löschen Sie ihn. Vielen Dank! Dieses Tutorial ist nicht speziell für eine bestimmte Website geschrieben, sondern dient lediglich der technischen Recherche
Inhaltsverzeichnis
Fall Analyse
Zielfall: aHR0cHM6Ly9mYW55aS5iYWlkdS5jb20v
1. Entsprechende Schnittstellen und Schwierigkeiten
Parametrische Analyse
Durch Beobachtung sieht es nicht wie eine Verschlüsselung aus, aber wir haben festgestellt, dass sein Wert nicht gefunden wurde. Zu diesem Zeitpunkt sollte unser Denken näher an der Verschlüsselung liegen, also suchen wir direkt nach diesem Parameter. Es wurde jedoch festgestellt, dass bei der Suche viele Werte gefunden wurden. Daher müssen wir versuchen, mehrere Haltepunkte festzulegen und dann zu debuggen.
Am Ende kann festgestellt werden, dass es sich an dieser Position befindet
. Sie können die von dieser Funktion durchgeführte Verschlüsselung sehen. Wenn Sie zum ersten Mal Reverse Engineering lernen, können Sie es abziehen und ausführen und dann versuchen, es wiederherzustellen Nachdem wir es verstanden haben, wird Reverse Engineering natürlich verwendet, um Kunden zu lösen. Brauchen Sie es, stellen Sie es also nicht in Eile wieder her.
Kopieren Sie diese Funktion und führen Sie sie aus. Sie können „Hallo“ sehen, wenn Sie den Parameter eingeben, und das dann finden Es wird ein Fehler gemeldet. Keine Panik, Sie können sehen, welche Zeile das Problem hat, und dann gehen wir zur entsprechenden Schnittstelle
. Sie können sehen, dass es sich um einen Nullwert handelt
handelt Dann wird es bestanden.
Wir fahren mit der Ausführung fort und stellen fest, dass der n-Wert tatsächlich derselbe ist wie oben, und wir stellen fest, dass es sich um eine Funktion handelt
. Es kann ausgeführt werden, und dann können wir sehen, dass andere Parameter von der Seite oder dem generiert werden aktueller Zeitstempel, diese Website ist also hier! ! !
Ideal für Anfänger zum Üben! ! !
Tschüss! !
Codeanzeige
var r = '';
function n(t, e) {
for (var n = 0; n < e.length - 2; n += 3) {
var r = e.charAt(n + 2);
r = "a" <= r ? r.charCodeAt(0) - 87 : Number(r),
r = "+" === e.charAt(n + 1) ? t >>> r : t << r,
t = "+" === e.charAt(n) ? t + r & 4294967295 : t ^ r
}
return t
};
function jiami(t) {
var o, i = t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
if (null === i) {
var a = t.length;
a > 30 && (t = "".concat(t.substr(0, 10)).concat(t.substr(Math.floor(a / 2) - 5, 10)).concat(t.substr(-10, 10)))
} else {
for (var s = t.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), c = 0, l = s.length, u = []; c < l; c++)
"" !== s[c] && u.push.apply(u, function (t) {
if (Array.isArray(t))
return e(t)
}(o = s[c].split("")) || function (t) {
if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"])
return Array.from(t)
}(o) || function (t, n) {
if (t) {
if ("string" == typeof t)
return e(t, n);
var r = Object.prototype.toString.call(t).slice(8, -1);
return "Object" === r && t.constructor && (r = t.constructor.name),
"Map" === r || "Set" === r ? Array.from(t) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? e(t, n) : void 0
}
}(o) || function () {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
}()),
c !== l - 1 && u.push(i[c]);
var p = u.length;
p > 30 && (t = u.slice(0, 10).join("") + u.slice(Math.floor(p / 2) - 5, Math.floor(p / 2) + 5).join("") + u.slice(-10).join(""))
}
for (var d = "".concat(String.fromCharCode(103)).concat(String.fromCharCode(116)).concat(String.fromCharCode(107)), h = (null !== r ? r : (r = window[d] || "") || "").split("."), f = Number(h[0]) || 0, m = Number(h[1]) || 0, g = [], y = 0, v = 0; v < t.length; v++) {
var _ = t.charCodeAt(v);
_ < 128 ? g[y++] = _ : (_ < 2048 ? g[y++] = _ >> 6 | 192 : (55296 == (64512 & _) && v + 1 < t.length && 56320 == (64512 & t.charCodeAt(v + 1)) ? (_ = 65536 + ((1023 & _) << 10) + (1023 & t.charCodeAt(++v)),
g[y++] = _ >> 18 | 240,
g[y++] = _ >> 12 & 63 | 128) : g[y++] = _ >> 12 | 224,
g[y++] = _ >> 6 & 63 | 128),
g[y++] = 63 & _ | 128)
}
for (var b = f, w = "".concat(String.fromCharCode(43)).concat(String.fromCharCode(45)).concat(String.fromCharCode(97)) + "".concat(String.fromCharCode(94)).concat(String.fromCharCode(43)).concat(String.fromCharCode(54)), k = "".concat(String.fromCharCode(43)).concat(String.fromCharCode(45)).concat(String.fromCharCode(51)) + "".concat(String.fromCharCode(94)).concat(String.fromCharCode(43)).concat(String.fromCharCode(98)) + "".concat(String.fromCharCode(43)).concat(String.fromCharCode(45)).concat(String.fromCharCode(102)), x = 0; x < g.length; x++)
b = n(b += g[x], w);
return b = n(b, k),
(b ^= m) < 0 && (b = 2147483648 + (2147483647 & b)),
"".concat((b %= 1e6).toString(), ".").concat(b ^ f)
};