GitHub-Repository: https://github.com/JSREI/js-cookie-monitor-debugger-hook
Vereinfachtes Chinesisch |
In einer Zeit, in der Daten von unschätzbarem Wert sind, ist die Konfrontation zwischen Crawlern und Anti-Crawlern最常见之一
Arten von Anti-Crawlern, die Cookies über JS-Code setzen, was so verwirrend ist, dass dies sogar für Mütter der Fall ist (normalerweise beim Surfen) Server-Fingerabdrücke, Cookies, die bei Anfragen mitgebracht werden müssen usw.), Cookies, die bei Anfragen mitgebracht werden müssen, aber nicht wissen, wo sie generiert werden, Sie kämpfen sich durch Zehntausende verwirrende Zeilen JS-Scheiße, die Ihre Mutter nicht kennt, in der Hoffnung, den Ort zu finden, an dem Cookies generiert werden (wenn das umgekehrte Denken unwissenschaftlich ist, könnten Sie ein paar Mal ersticken ...), und Ich möchte es sogar ein paar Mal finden. Versuchen Sie, sich selbst dazu zu bringen, aufzugeben, oder warum nicht einfach eine Browser-Emulationsmethode wie Selenium verwenden? Wenn Sie ein Feigling sind, ist dieses Skript hier, um Ihnen zu helfen! (Sie und ich wissen beide, dass dieser Absatz nur Unsinn ist, um die Szene zu untermauern. Sie können ihn überspringen, wenn Sie nicht das Pech haben, ihn zu Ende zu lesen ...)
Die Funktion dieses Skripts gliedert sich grob in zwei Teile:
Dieses Skript fügt seinen eigenen JS-Code in die Seite ein und bindet document.cookie
ein, um verschiedene Funktionen auszuführen. Daher müssen Sie vor der Verwendung dieses Skripts zunächst bestätigen, dass das zu generierende Cookie tatsächlich über JS generiert wird (eine ganz spezielle Methode wird später vorgestellt). . Bestimmen Sie einfach, ob das Cookie von JS generiert oder vom Server zurückgegeben wird.
Derzeit weisen viele Hook-Skripte falsche Hook-Positionen auf. Dieses Skript verwendet einmalige und wiederholte Hooks, was keine Auswirkungen auf die integrierte Cookie-Verwaltung des Browsers hat:
Zusätzlich zur Cookie-Breakpoint-Funktion wurde eine Funktion zur Überwachung von Cookie-Änderungen hinzugefügt, mit der die Cookies auf der Seite aus einer eher makroökonomischen Perspektive analysiert werden können:
(Vergiss es, gib das Codieren auf ...)
Die Farbe dient zur Unterscheidung von Vorgangstypen:
Auf jede Operation folgt ein Codespeicherort. Klicken Sie hier, um den Speicherort des JS-Codes zu finden, der den Vorgang ausgeführt hat.
Ab Version 0.6 wurden Haltepunktregeln mit leistungsfähigeren Funktionen und flexibleren Konfigurationen eingeführt, und es wurde ein Ereignismechanismus eingeführt, um Cookie-Änderungen in drei Ereignisse zu unterteilen: Hinzufügen, Löschen und Aktualisieren, wodurch detailliertere Haltepunkte unterstützt werden Weitere Informationen zu Cookie-Ereignissen finden Sie in Teil 5 dieses Artikels.
Warum ist es so konzipiert? Eine relativ häufige Situation besteht darin, dass das Anti-Crawling-Cookie auf der Zielwebsite von JS gesetzt wird, die Logik des JS-Codes jedoch darin besteht, es zuerst hektisch zu löschen und es dann viele Male zu löschen, bevor der eigentliche Wert hinzugefügt wird Auf diese Weise kann dem allgemeinen Cookie-Hook-Debugging genau entgegengewirkt werden.
Hier ist ein Beispiel, wie zum Beispiel der Cookie-Schutz von F5, es gibt ein Cookie TS51c47c46075
, das viele Male gelöscht und dann wieder hinzugefügt wird: In diesem Fall können Sie einen Haltepunkt für das Cookie-Ereignis namens TS51c47c46075
festlegen, um eine Verwechslung der roten Löschereignisse zu vermeiden.
Theoretisch wird das Grease Monkey-Plug-in verwendet, um den JS-Code in die Seite einzufügen, solange der JS-Code dieses Skripts in die Seite eingefügt werden kann.
Das Grease Monkey-Plugin kann im Chrome Store installiert werden:
https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo
Wenn Sie die Mauer nicht umgehen können, können Sie auf Baidu nach „Tampermonkey“ suchen, um eine Website eines Drittanbieters zum Herunterladen zu finden. Bitte achten Sie jedoch darauf, keine gefälschten bösartigen Plug-ins zu installieren. Es wird empfohlen, sie von der offiziellen Website zu installieren speichern.
Es stehen auch andere Tools zur Verfügung, sofern der JS-Code dieses Skripts zur Ausführung oben auf der Seite eingefügt werden kann.
Sie können das Grease Monkey-Skript aus dem offiziellen Store installieren oder den Code kopieren und lokal erstellen.
Diese Methode wird empfohlen. Das im Oil Monkey Store installierte Oil Monkey-Skript kann automatisch aktualisiert werden, wenn nachfolgende Versionen aktualisiert werden. Dieses Skript wurde im Oil Monkey Store bereitgestellt.
https://greasyfork.org/zh-CN/scripts/419781-js-cookie-monitor-debugger-hook
Wenn Ihnen automatische Updates zu nervig sind oder Sie andere Bedenken haben, können Sie den Code dieses Skripts hier kopieren:
https://github.com/CC11001100/js-cookie-monitor-debugger-hook/blob/main/js-cookie-monitor-debugger-hook.js
Nachdem Sie überprüft und bestätigt haben, dass kein Problem vorliegt, können Sie es im Verwaltungsbereich von Oil Monkey hinzufügen.
Beachten Sie, dass es bei der Überwachung um ein umfassendes Verständnis auf Makroebene geht und nicht darum, Details zu lokalisieren (normalerweise kann die korrekte Verwendung von Werkzeugen die Effizienz verbessern). Natürlich ist das Wissen einer Person begrenzt und jeder ist willkommen, Feedback zu interessanteren Möglichkeiten zu geben play), zum Beispiel beim Öffnen einer Seite:
Anhand dieses Bildes können wir allgemein verstehen, welche Cookies auf dieser Website von JS wann und wie verwendet werden.
Ein weiteres Beispiel ist die Verwendung eines Monitors, um das sich ändernde Muster von Cookies zu beobachten. Auf dieser Seite können Sie beispielsweise anhand der Zeit sehen, dass dieses Cookie jede halbe Minute geändert wird:
(2021-1-7 18:27:49 aktualisierte Version 0.4, um diese Funktion hinzuzufügen): Wenn zu viele Informationen von der Konsole gedruckt werden, können Sie sie mit der Filterung des Chrome-Browsers filtern Die gedruckten Protokolle wurden vereinheitlicht, es wird nur noch cookieName = Cookie名字
benötigt, zum Beispiel:
Bitte beachten Sie, dass Sie bei der Suche darauf achten müssen, dass Ihre Suchinformationen URL-dekodiert sind. Andernfalls kann es sein, dass sie nicht übereinstimmen, da die Druckinformationen der Konsole zuerst per URL dekodiert und dann gedruckt werden.
Wenn Sie nicht sicher sind, ob das Cookie, das Sie setzen möchten, lokal generiert oder von einem anfordernden Server set-cookie
zurückgegeben wird, können Sie dieses Skript öffnen, die Seite der Zielwebsite aktualisieren und dann in der Konsole nach dem Cookienamen suchen. Die Methode ist die gleiche wie oben. Wenn der Name des Cookies kurz und nicht eindeutig ist, können Sie cookieName
hinzufügen, um die Positionierung zu erleichtern, zum Beispiel:
cookieName = v
Manchmal setzt die Zielwebsite wiederholt ein Cookie mit demselben Wert. Diese Variable wird verwendet, um solche Ereignisse zu ignorieren:
Behalten Sie im Allgemeinen einfach die Standardeinstellung bei.
@since v0.6
Dieser Teil des Dokuments gilt für die Version v0.6+. Wenn Ihre lokale Version kleiner als 0.6 ist, aktualisieren Sie bitte die Version, bevor Sie das Dokument lesen.
Ab Version 0.6 sind die Haltepunkte, wenn sich der Wert von Cookies ändert, sehr kompliziert und auch sehr einfach geworden. Die Komplexität liegt an der Einführung des Ereignismechanismus und die Einfachheit liegt an der Vereinfachung der Haltepunktregelkonfiguration und flexibler.
Haltepunktregeln können in标准规则
und简化规则
unterteilt werden. Standardregeln dienen der einfachen Implementierung und Verarbeitung am Ende des Programms. Vereinfachte Regeln dienen der einfacheren Konfiguration durch Benutzer. Wenn die vereinfachte Regelkonfiguration nicht möglich ist. Schauen Sie noch einmal vorbei, um zu sehen, wie Sie die Standardregeln konfigurieren können, wenn Ihre Anforderungen erfüllt sind.
Alle Regeln werden im Array debuggerRules
konfiguriert und am Kopf des Skripts befindet sich eine Variable: Wenn Sie es nicht finden können, können Sie Strg+F drücken, um nach dem Namen der Variablen zu suchen:
debuggerRules
Diese Variable ist ein Array-Typ, der einige Regelbedingungen speichert, um zu bestimmen, unter welchen Umständen der Haltepunkt eingegeben wird.
Beachten Sie, dass es sich um ein Array handelt und die Regeln im Array in einer ODER-Beziehung stehen. Wenn das Cookie-Änderungsereignis ausgelöst wird, wird jede Regel nacheinander abgeglichen. Solange eine Regel erfolgreich abgeglichen wird, wird ein Haltepunkt eingegeben.
Geben Sie einen Haltepunkt ein, wenn sich das Cookie namens foo
ändert:
const debuggerRules = [ "foo" ] ;
Die Angabe einer Zeichenfolge auf die oben beschriebene Weise stimmt mit dem Cookie-Namen überein, wenn dieser mit der angegebenen Zeichenfolge übereinstimmt.
Beachten Sie, dass, wenn hier ein URL-codierter Teil der genauen Übereinstimmung vorhanden ist, dieser zuerst URL-decodiert und dann hier eingefügt werden muss. Andere Stellen, an denen Zeichenfolgen beteiligt sind, sind identisch und werden nicht erneut beschrieben.
Wenn der Cookie-Name einen sich ständig ändernden Teil enthält, wie z. B. Zeitstempel, UUID usw., der nicht anhand des Namens lokalisiert werden kann, wird ein regulärer Abgleich verwendet:
const debuggerRules = [ / foo.+ / ] ;
In den meisten Fällen reichen nur diese beiden Konfigurationen aus.
Üben wir es jetzt beim Öffnen dieser Seite
https://www.ishumei.com/trial/captcha.html
Sie können sehen, dass das Skript einige Cookie-Vorgänge erkannt hat:
Einer davon, smidV2
ist verdächtig, deshalb fügen wir einen Haltepunkt dafür hinzu:
Drücken Sie nach dem Ändern debuggerRules
Arrays unbedingt Strg+S, um das Skript zu speichern. Da Oil Monkey den JS-Code einfügt, wenn die Seite geladen wird, müssen Sie die Seite aktualisieren und erneut einfügen Haltepunkt wird automatisch eingetragen:
Im roten Feld A im Bild oben sind einige speziell übergebene Variablen. Indem wir die Maus über diese Variablen bewegen, um die Werte anzuzeigen, können wir einige Bedingungen des aktuellen Haltepunkts grob kennen:
Dann gibt es das rote Kästchen B. Wir setzen den Cookie-Haltepunkt, um den Aufrufstapel zu verfolgen und den Ort zu lokalisieren, an dem das Cookie generiert wird. Es gibt ein klares userscript.html
-Logo Dieser Teil des Aufrufstapels.
Verfolgen Sie dann den Aufrufstapel und Sie können sehen, wo das Cookie gesetzt ist:
Natürlich ist es für uns sinnlos, uns diesen Stapel anzusehen. Wir müssen jedoch schrittweise vorgehen, bis wir den Ort finden, an dem das Cookie tatsächlich generiert wird. Dieses Skript kann Ihnen jedoch nur dabei helfen, einen Haltepunkt festzulegen der Sterne und des Meeres werden später darauf angewiesen sein!
Geben Sie einen Haltepunkt ein, wenn das Cookie mit dem Namen foo
添加
wird:
const debuggerRules = [ { "add" : "foo" } ] ;
Geben Sie einen Haltepunkt ein, wenn das Cookie namens foo
删除
wird:
const debuggerRules = [ { "delete" : "foo" } ] ;
Geben Sie einen Haltepunkt ein, wenn das Cookie namens foo
bereits vorhanden ist, der Wert jedoch更新
wird:
const debuggerRules = [ { "update" : "foo" } ] ;
Es können mehrere Bedingungen gleichzeitig angegeben werden, und beim添加和更新
werden Haltepunkte eingegeben, was dem Ausschluss von Löschungen entspricht:
const debuggerRules = [ { "add|update" : "foo" } ] ;
Zeichenfolgen oder reguläre Ausdrücke können überall dort verwendet werden, wo es um den Abgleich von Cookie-Namen geht:
const debuggerRules = [ { "add" : / foo_d+ / } ] ;
Die oben genannten vereinfachten Regeln werden in Standardregeln umgewandelt. Sie können Standardregeln auch direkt im Array debuggerRules
konfigurieren. Das Format einer Standardregel ist:
{
"events": "{add|delete|update}",
"name": {"cookie-name" | /cookie-name-regex/},
"value": {"cookie-value" | /cookie-value-regex/}
}
Zeichenfolgentyp, der den Ereignistyp angibt, der dieser Regel add
, |
mehrere Ereignisse, z |
B. add|update
Fügen Sie auf beiden Seiten Leerzeichen hinzu, z. B. add | update
Wenn der Ereignistyp konfiguriert ist, wird er nur mit dem angegebenen Ereignistyp übereinstimmen. Wenn diese Option nicht konfiguriert ist, werden standardmäßig alle Ereignistypen abgeglichen.
Es kann eine Zeichenfolge oder ein reguläres Muster sein. Es ist wahr, wenn der Cookie-Name mit der angegebenen Zeichenfolge oder dem regulären Muster übereinstimmt. Dieses Element kann nicht ignoriert werden und muss konfiguriert werden.
Es kann sich um eine Zeichenfolge oder ein reguläres Muster handeln. Diese Regel ist wahr, wenn der Cookie-Wert mit der angegebenen Zeichenfolge oder dem regulären Muster übereinstimmt. Wenn sie nicht konfiguriert ist, wird sie ignoriert.
Die Konfiguration von Haltepunktregeln wurde bereits früher eingeführt und die Ereignistypen wurden mehrfach erwähnt. Wir kennen nur die Zeichenfolge, die jedem Ereignis entspricht, aber wir wissen immer noch nicht, was jedes Ereignis auf der untersten Ebene bedeutet Ereignis. Der Realisierungsmechanismus eines Ereignisses.
Cookie-Änderungen werden in das Hinzufügen von Cookies, das Löschen von Cookies und das Aktualisieren vorhandener Cookie-Werte unterteilt. Jedes Ereignis entspricht einem Ereignisnamen:
Das Cookie war vorher lokal nicht vorhanden und wurde jetzt zum ersten Mal hinzugefügt. Es kann sein, dass Sie diese Website zum ersten Mal besuchen, oder Sie löschen Cookies und besuchen sie erneut, oder es wird jedes Mal, wenn Sie die Website besuchen, ein neues Cookie generiert, oder es kann sogar sein, dass der eigene Code der Website Cookies löscht und erneut hinzufügt sie, was das Hinzufügen von Cookies auslöst.
Führen Sie beispielsweise den folgenden Code aus. Um sicherzustellen, dass das Cookie vorher nicht existiert, wird dem Namen des Cookies ein Zeitstempel hinzugefügt:
document . cookie = "foo_" + new Date ( ) . getTime ( ) + "=bar; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/" ;
Wenn wir diese Codezeile in der Konsole ausführen, wird das Cookie Add-Ereignis ausgelöst:
Wenn ein Cookie bereits lokal vorhanden ist und Sie versuchen, einen Wert dafür festzulegen, wird das Update-Cookie-Ereignis ausgelöst.
Zum Beispiel der folgende Code:
document . cookie = "foo_10086=blabla; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/" ;
document . cookie = "foo_10086=wuawua; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/" ;
Die erste Anweisung zum Setzen von Cookies löst das Ereignis „Cookie New“ aus, und die zweite Anweisung zum Setzen von Cookies löst das Ereignis „Cookie Update“ aus, da das zu setzende Cookie bereits vorhanden ist.
Wenn der Front-End-Entwickler beim Setzen des Cookies eine Ablauffrist vor dem aktuellen Zeitpunkt angibt, bedeutet dies, dass das Cookie gelöscht werden muss. Eine gängige Methode zum Löschen von Cookies ist beispielsweise:
const expires = new Date ( new Date ( ) . getTime ( ) - 1000 * 30 ) . toGMTString ( ) ;
document . cookie = "foo=; expires=" + expires + "; path=/"
Wenn wir diesen Code in der Konsole ausführen, wird das Cookie-Löschereignis ausgelöst:
Aus dem oben Gesagten ist auch ersichtlich, dass das Auslösen des Cookie-Löschereignisses lediglich zur Erkennung von Ablaufdaten dient und nicht tatsächlich prüft, ob das Cookie schon einmal vorhanden war.
Wie bereits erwähnt, gibt es beim Konfigurieren von Cookie-Breakpoint-Regeln tatsächlich einen Flag-Bit, der angibt, ob der Breakpoint dieses Flag-Bits die höchste ist Wenn dies nicht der Fall ist: Wenn der Haltepunkt zum Löschen von Cookies aktiviert ist und ein Cookie-Löschereignis ausgelöst wird, wird zunächst geprüft, ob der Haltepunkt zum Löschen von Cookies aktiviert ist. Wenn er deaktiviert ist, wird das Ereignis ignoriert und es werden keine weiteren Versuche unternommen muss an die Haltepunktregeln angepasst werden (gesteuert durch Entwicklertools). Das Protokoll dieses Löschereignisses wird weiterhin auf der Plattform gedruckt.
Nun ist die Situation sehr kompliziert geworden. Lassen Sie uns den Prozess dieses kleinen Cookie-Haltepunkts durchgehen:
Standardmäßig sind nur die Haltepunkte für Cookie-Hinzufügen-Ereignisse und Cookie-Änderungsereignisse aktiviert:
Denn unter normalen Umständen können das Hinzufügen von Cookies und das Aktualisieren von Cookies verwechselt werden. In den meisten Fällen wird der Fall, dass das Cookie gelöscht wird, nicht berücksichtigt, daher wird es hier so festgelegt. Wenn es Ihren Anforderungen nicht entspricht, können Sie den entsprechenden Wert von enableEventDebugger
selbst ändern.
Wenn Sie während der Verwendung auf Probleme stoßen, können Sie unter Issues
auf GitHub Feedback geben, Sie können auch im Kommentarbereich von Grease Monkey Script Feedback geben oder mir eine E-Mail senden, und ich werde mich umgehend darum kümmern möglich, nachdem ich es gesehen habe.
Ab Version v0.6 wurde eine Variable hinzugefügt, um die Schriftgröße des von diesem Skript auf der Konsole gedruckten Protokolls in px anzupassen:
Während die Version iteriert, befindet sie sich möglicherweise nicht mehr an dieser Stelle. Wenn Sie sie nicht sofort finden können, suchen Sie im Code:
consoleLogFontSize
Ändern Sie dann den Wert dieser Variablen.
Als weitere Lösung können Sie Strg+Mausrad in der Konsole der Entwicklertools gedrückt halten, um zu zoomen und die Gesamtgröße anzupassen. Dies ist eine Funktion, die im Chrome-Browser enthalten ist.
Wie am Anfang dieses Artikels erläutert, muss dieses Skript erfolgreich am Anfang der Seite eingefügt und ausgeführt werden, bevor der Hook erfolgreich sein kann. Für die gesamte Seite wird ähnlich wie bei der ersten Ebene von Accelerator nur ein Skript zurückgegeben die Logik im Inneren:
< script >
document . cookie = 这里是一些奇奇怪怪的JS用于计算出Cookie ;
location . href = "跳转走了" ;
</ script >
Das Cookie wird gesetzt und sofort auf eine neue Seite weitergeleitet. Für diesen Vorgang ist der Hook möglicherweise nicht verfügbar. Dies ist ein Problem mit dem Grease Monkey-Skript. Wenn Sie auf Hooking bestehen, können Sie dieses Skript mit einem hängenden Proxy einfügen Diese URL. Antwortheader.
Nachfolgend finden Sie eine Zusammenfassung einiger praktischer Beispiele für Reverse Engineering mit diesem Skript:
Klicken Sie auf mich, um zur Navigationsseite zu gelangen
Dieses Projekt ist geteilt von: https://github.com/CC11001100/crawler-js-hook-framework-public/tree/master/001-cookie-hook#%E7%9B%91%E6%8E%A7%E5 %AE%9A%E4%BD%8Djavascript%E6%93%8D%E4%BD%9Cookie
Nach der Änderung des Namensraums wurde die Anzahl der Installationen möglicherweise gelöscht. Zur Erinnerung habe ich zum jetzigen Zeitpunkt (29.07.2022, 21:40:01) die Anzahl der Installationen überschritten. Es fühlt sich so an sehr groß für ein kleines Werkzeug in einem so engen Bereich. Es ist nicht mehr einfach ...
Vielen Dank an die begeisterten Internetnutzer für ihr Feedback, vielen Dank für Ihre Unterstützung.
js-cookie-monitor-debugger-hook ist jetzt dem 404 Star Chain Project beigetreten
Scannen Sie den QR-Code, um der Reverse-Technology-Exchange-Gruppe beizutreten:
Wenn der Gruppen-QR-Code abläuft, können Sie mich im persönlichen WeChat hinzufügen und [Reverse Group] senden, um mich Ihnen in der Gruppe anzuschließen:
Klicken Sie hier oder scannen Sie den QR-Code, um der TG-Austauschgruppe beizutreten: