Repositorio de GitHub: https://github.com/JSREI/js-cookie-monitor-debugger-hook
Chino simplificado | Inglés
En una era donde los datos no tienen precio, la confrontación entre rastreadores y anti-rastreadores se ha vuelto intensa. Los anti-rastreadores de cookies son最常见之一
de anti-rastreadores. Los sitios web configuran cookies a través de un código JS que es tan confuso que incluso las madres lo hacen. no reconocerlo (generalmente al navegar) Huellas digitales del servidor, cookies que deben traerse al realizar solicitudes, etc.), Cookies que deben traerse al enfrentar solicitudes pero no sé dónde se generan, Estás luchando entre decenas de miles de líneas confusas de mierda JS que tu madre no reconoce, con la esperanza de encontrar el lugar donde se generan las cookies (si el pensamiento inverso no es científico, es posible que te ahogues un par de veces...), y Incluso quiero encontrarlo algunas veces. ¿Estás tratando de engañarte para que te rindas o por qué no simplemente usar un método de emulación de navegador como Selenium? Si eres un cobarde, ¡este guión está aquí para ayudarte! (Tú y yo sabemos que este párrafo no tiene sentido para apoyar la escena, puedes omitirlo, si no tienes la mala suerte de terminar de leerlo...)
La función de este script se divide aproximadamente en dos partes:
Este script inyecta su propio código JS en la página y enlaza document.cookie
para completar varias funciones. Por lo tanto, antes de usar este script, primero debe confirmar que la cookie que se generará se genera a través de JS (más adelante se presentará un método muy especial). Simplemente determine si la cookie es generada por JS o devuelta por el servidor).
En la actualidad, muchos scripts de Hook tienen posiciones de enlace incorrectas. Este script utiliza Hooks únicos y repetidos, lo que no tiene ningún impacto en la gestión de cookies integrada del navegador:
Además de la función de punto de interrupción de cookies, se ha agregado una función de monitoreo de modificación de cookies, que puede analizar las cookies en la página desde una perspectiva más macro:
(Olvídalo, deja de codificar...)
El color se utiliza para distinguir los tipos de operación:
Cada operación irá seguida de una ubicación de código. Haga clic para ubicar la ubicación del código JS que realizó la operación.
A partir de la versión 0.6, se introdujeron reglas de puntos de interrupción con funciones más potentes y configuraciones más flexibles, y se introdujo un mecanismo de eventos para subdividir las modificaciones de las cookies en tres eventos: agregar, eliminar y actualizar, lo que admite puntos de interrupción más detallados. Eventos de cookies; consulte la Parte 5 de este artículo para obtener más detalles.
¿Por qué está diseñado de esta manera? Una situación relativamente común es que JS establece la cookie anti-rastreo en el sitio web de destino, pero la lógica del código JS es eliminarla frenéticamente primero y luego eliminarla muchas veces antes de agregar el valor real. de esta manera se puede contrarrestar exactamente la depuración general de Cookie Hook.
Aquí hay un ejemplo, como la protección de cookies de F5, hay una cookie TS51c47c46075
, que se elimina muchas veces y luego se agrega nuevamente: En este caso, puede establecer un punto de interrupción para el evento de cookie denominado TS51c47c46075
para evitar confundir los eventos de eliminación rojos.
En teoría, siempre que el código JS de este script se pueda inyectar en la página, se utiliza el complemento Grease Monkey para inyectar el código JS en la página.
El complemento Grease Monkey se puede instalar desde Chrome Store:
https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo
Si no puede eludir el muro, puede buscar "Tampermonkey" en Baidu para encontrar sitios web de terceros para descargar. Sin embargo, tenga cuidado de no instalar complementos maliciosos falsos. Se recomienda instalarlo desde la tienda oficial.
También hay otras herramientas disponibles, siempre que el código JS de este script se pueda inyectar en la parte superior de la página para su ejecución.
Puedes instalar el script de Grease Monkey desde la tienda oficial o puedes copiar el código y crearlo localmente.
Se recomienda este método. El script Oil Monkey instalado desde Oil Monkey Store se puede actualizar automáticamente cuando se actualicen versiones posteriores. Este script se ha colocado en Oil Monkey Store:
https://greasyfork.org/zh-CN/scripts/419781-js-cookie-monitor-debugger-hook
Si las actualizaciones automáticas le resultan demasiado molestas o tiene otras inquietudes, puede copiar el código de este script aquí:
https://github.com/CC11001100/js-cookie-monitor-debugger-hook/blob/main/js-cookie-monitor-debugger-hook.js
Luego de revisar y confirmar que no hay ningún problema, podrás agregarlo en el panel de administración de Oil Monkey.
Tenga en cuenta que el seguimiento consiste en tener una comprensión general a nivel macro, no en localizar detalles (normalmente el uso correcto de las herramientas puede mejorar la eficiencia. Por supuesto, el conocimiento de una persona es limitado y todos pueden dar su opinión sobre formas más interesantes de play), por ejemplo al abrir una página:
Basándonos en esta imagen, podemos tener una idea general de qué cookies de este sitio web utiliza JS, cuándo y cómo lo hacen.
Otro ejemplo es utilizar un monitor para observar el patrón cambiante de las cookies. Por ejemplo, en esta página, puede ver en función del tiempo que la cookie cambiará cada medio minuto:
(2021-1-7 18:27:49 actualizado v0.4 para agregar esta función): si la consola imprime demasiada información, puede usar el filtrado que viene con el navegador Chrome para filtrar el formato. Los registros impresos se han unificado y solo se necesita cookieName = Cookie名字
, por ejemplo:
Tenga en cuenta que al realizar una búsqueda, asegúrese de que la información de búsqueda esté decodificada en URL; de lo contrario, es posible que no coincida, porque la información de impresión de la consola se decodifica en URL primero y luego se imprime.
Si no está seguro de si la cookie que desea configurar se genera localmente o la devuelve un servidor solicitante set-cookie
, puede abrir este script, actualizar la página del sitio web de destino y luego buscar el nombre de la cookie en la consola. El método es el mismo que el anterior. Esta sección es similar. Cuando el nombre de la cookie es corto y no distintivo, puede agregar cookieName
para ayudar al posicionamiento, por ejemplo:
cookieName = v
A veces, el sitio web de destino puede configurar una cookie repetidamente con el mismo valor. Esta variable se utiliza para ignorar dichos eventos:
Generalmente, mantenga el valor predeterminado.
@since v0.6
Esta parte del documento se aplica a la versión v0.6+. Si su versión local es inferior a 0.6, actualice la versión antes de leer el documento.
A partir de v0.6, los puntos de interrupción cuando cambia el valor de la cookie se han vuelto muy complicados y también muy simples. La complejidad se debe a la introducción del mecanismo de eventos y la simplicidad se debe a que la configuración de las reglas de puntos de interrupción se simplifica. y más flexible.
Las reglas de punto de interrupción se pueden dividir en标准规则
y简化规则
. Las reglas estándar son para una fácil implementación y procesamiento en la parte inferior del programa. Las reglas simplificadas son para que los usuarios las configuren de manera más conveniente. En circunstancias normales, solo necesita comprender las reglas simplificadas. Cuando la configuración de reglas simplificada no puede Vuelva a consultar para ver cómo configurar las reglas estándar cuando se satisfagan sus necesidades.
Todas las reglas están configuradas en la matriz debuggerRules
y hay una variable al principio del script: Si no puede encontrarlo, puede presionar Ctrl+F para buscar por el nombre de la variable:
debuggerRules
Esta variable es un tipo de matriz, que almacena algunas condiciones de regla para determinar bajo qué circunstancias se ingresará el punto de interrupción.
Tenga en cuenta que se trata de una matriz y las reglas de la matriz están en una relación OR. Cuando se activa el evento de modificación de cookies, cada regla coincidirá secuencialmente, siempre que una regla coincida correctamente, se ingresará un punto de interrupción.
Ingrese un punto de interrupción cuando cambie la cookie denominada foo
:
const debuggerRules = [ "foo" ] ;
Especificar una cadena de la forma anterior coincidirá con el nombre de la cookie si es igual a la cadena proporcionada.
Tenga en cuenta que si hay una parte codificada en URL de la coincidencia exacta aquí, primero debe decodificarla en URL y luego pegarla aquí. Otros lugares que involucran cadenas son los mismos y no se describirán nuevamente.
Si el nombre de la cookie contiene una parte que cambia constantemente, como marca de tiempo, UUID, etc., que no se puede localizar por nombre, entonces se utiliza la coincidencia regular:
const debuggerRules = [ / foo.+ / ] ;
En la mayoría de los casos, sólo estas dos configuraciones son suficientes.
Practiquémoslo ahora al abrir esta página.
https://www.ishumei.com/trial/captcha.html
Puede ver que el script ha detectado algunas operaciones de cookies:
Uno de ellos, smidV2
es sospechoso, por lo que le agregamos un punto de interrupción:
Después de modificar debuggerRules
, asegúrese de presionar Ctrl + S para guardar el script. Debido a que Oil Monkey inyecta el código JS cuando se carga la página, debe actualizar la página y volver a inyectarla. El punto de interrupción se ingresará automáticamente:
En el cuadro rojo A en la imagen de arriba hay algunas variables pasadas especialmente. Al mover el mouse sobre estas variables para ver los valores, podemos conocer aproximadamente algunas condiciones del punto de interrupción actual:
Luego está el cuadro rojo B. Configuramos el punto de interrupción de la cookie para rastrear la pila de llamadas y ubicar el lugar donde se genera la cookie. El cuadro rojo es la pila de llamadas de este script. Hay un logotipo claro userscript.html
. esta parte de la pila de llamadas.
Luego rastrea la pila de llamadas y podrás ver dónde está configurada la cookie:
Por supuesto, es inútil que miremos esta pila. Lo que tenemos que hacer es avanzar gradualmente hasta localizar el lugar donde realmente se genera la cookie. Sin embargo, este script solo puede ayudarlo a establecer un punto de interrupción. de las estrellas y del mar dependerá de ello más adelante ¡Tú mismo!
Ingrese un punto de interrupción cuando se添加
la cookie denominada foo
:
const debuggerRules = [ { "add" : "foo" } ] ;
Introduzca un punto de interrupción cuando se删除
la cookie denominada foo
:
const debuggerRules = [ { "delete" : "foo" } ] ;
Ingrese un punto de interrupción cuando la cookie denominada foo
ya exista pero el valor esté更新
:
const debuggerRules = [ { "update" : "foo" } ] ;
Se pueden especificar varias condiciones al mismo tiempo y se ingresan puntos de interrupción al添加和更新
, lo que equivale a excluir eliminaciones:
const debuggerRules = [ { "add|update" : "foo" } ] ;
Se pueden utilizar cadenas o expresiones regulares siempre que se trate de una coincidencia de nombres de cookies:
const debuggerRules = [ { "add" : / foo_d+ / } ] ;
Las reglas simplificadas anteriores se convertirán en reglas estándar. También puede configurar reglas estándar directamente en debuggerRules
. El formato de una regla estándar es:
{
"events": "{add|delete|update}",
"name": {"cookie-name" | /cookie-name-regex/},
"value": {"cookie-value" | /cookie-value-regex/}
}
Tipo de cadena, que indica el tipo de evento que coincide con esta regla |
Puede ser un evento único, como add
, o múltiples eventos. |
para separar múltiples eventos, como add|update
. Agregue espacios en ambos lados, como add | update
Cuando el tipo de evento esté configurado, solo coincidirá con el tipo de evento dado. Cuando esta opción no esté configurada, todos los tipos de eventos coincidirán de forma predeterminada.
Puede ser una cadena o un patrón regular. Es verdadero cuando el nombre de la cookie coincide con la cadena o el patrón regular dado. Este elemento no se puede ignorar y debe configurarse.
Puede ser una cadena o un patrón regular. Esta regla es verdadera cuando el valor de la cookie coincide con la cadena o el patrón regular dado. Si no se configura, esta opción se ignorará.
La configuración de las reglas de punto de interrupción se introdujo anteriormente y los tipos de eventos se mencionaron muchas veces. Solo conocemos la cadena de nombre correspondiente a cada evento, pero aún no sabemos qué significa cada evento en el nivel inferior. Esta sección explica cada evento. El mecanismo de realización de un evento.
Los cambios de cookies se subdividen en agregar cookies, eliminar cookies y actualizar valores de cookies existentes. Cada evento corresponde a un nombre de evento:
La cookie no existía localmente antes y esta es la primera vez que se agrega. Puede que sea la primera vez que visita este sitio web, o puede que borre las cookies y vuelva a visitarlo, o se generará una nueva cookie cada vez que visite el sitio web, o incluso puede ser que el propio código del sitio web borre las cookies y las vuelva a agregar. ellos, lo que activará el evento de adición de cookies.
Por ejemplo, ejecute el siguiente código para garantizar que la cookie no exista antes, se agrega una marca de tiempo al nombre de la cookie:
document . cookie = "foo_" + new Date ( ) . getTime ( ) + "=bar; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/" ;
Cuando ejecutamos esta línea de código en la consola, se activará el evento Agregar cookie:
Cuando una cookie ya existe localmente e intenta establecer un valor para ella, se activará el evento Actualizar cookie.
Por ejemplo, el siguiente código:
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=/" ;
La primera declaración para configurar Cookie activará el evento Cookie New, y la segunda declaración para configurar Cookie activará el evento Cookie Update porque la Cookie que se configurará ya existe.
Si el desarrollador front-end indica que caduca antes de la hora actual al configurar la cookie, significa que la cookie debe eliminarse. Por ejemplo, una forma común de eliminar cookies es:
const expires = new Date ( new Date ( ) . getTime ( ) - 1000 * 30 ) . toGMTString ( ) ;
document . cookie = "foo=; expires=" + expires + "; path=/"
Cuando ejecutamos este código en la consola, se activará el evento de eliminación de cookies:
También se puede ver en lo anterior que activar el evento de eliminación de cookies es únicamente para detectar caducidad y en realidad no verificará si la cookie existía antes.
Como se mencionó anteriormente, hay un tipo de evento al configurar las reglas de punto de interrupción de cookies. De hecho, cada tipo de evento corresponde a un bit de bandera que indica si el punto de interrupción de este tipo de evento está activado. Si no es así, cuando el punto de interrupción de eliminación de cookies está activado y se activa un evento de eliminación de cookies, primero verificará si el punto de interrupción de eliminación de cookies está activado. Si está desactivado, el evento se ignorará y no se realizarán más intentos. se hará para que coincida con las reglas de punto de interrupción (controladas por herramientas de desarrollador). El registro de este evento de eliminación aún se imprimirá en la plataforma).
Ahora la situación se ha vuelto muy complicada. Repasemos el proceso de este pequeño punto de interrupción de Cookies:
De forma predeterminada, solo están habilitados los puntos de interrupción para eventos de adición de cookies y eventos de modificación de cookies:
Porque en circunstancias normales, agregar cookies y actualizar cookies pueden confundirse. Ambos asignan un valor a la cookie y, en la mayoría de los casos, no prestaremos atención al evento de que la cookie se elimine, así es como se configura aquí. Si no satisface sus necesidades Si es necesario, puede modificar el valor correspondiente de enableEventDebugger
usted mismo.
Si encuentra algún problema durante el uso, puede proporcionar comentarios en Issues
en GitHub, también puede proporcionar comentarios en el área de comentarios de Grease Monkey Script, o puede enviarme un correo electrónico y lo solucionaré lo antes posible. posible después de verlo.
A partir de la versión v0.6, se agregó una variable para ajustar el tamaño de fuente del log impreso por este script en la consola, en px:
A medida que la versión se repite, es posible que ya no esté en esta ubicación. Si no puede encontrarlo de inmediato, simplemente busque en el código:
consoleLogFontSize
Luego modifique el valor de esta variable.
O como otra solución, puede mantener presionada la tecla Ctrl + rueda del mouse en la consola de herramientas del desarrollador para hacer zoom y ajustar el tamaño general. Esta es una función que viene con el navegador Chrome.
Como se explicó al principio de este artículo, este script debe inyectarse con éxito al principio de la página y ejecutarse antes de que el Hook pueda tener éxito. Para toda la página, similar a la primera capa de Accelerator, solo se devuelve un script. la lógica en el interior:
< script >
document . cookie = 这里是一些奇奇怪怪的JS用于计算出Cookie ;
location . href = "跳转走了" ;
</ script >
La cookie se configura y se redirige a una nueva página inmediatamente. Para esta operación, es posible que el enlace no esté disponible. Esto es un problema con el script de Grease Monkey. Si insiste en conectarse, puede utilizar un proxy colgante para inyectar este script. esta URL.
Debajo de esta página hay un resumen de algunos ejemplos prácticos de ingeniería inversa utilizando este script:
Haz clic en mí para ingresar a la página de navegación.
Este proyecto está separado de: 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
Después de cambiar el espacio de nombres, es posible que se borre la cantidad de instalaciones. Tomé una captura de pantalla para conmemorarlo. A partir de ahora (2022-7-29 21:40:01), la cantidad de instalaciones ha superado las 300. Parece que sí. Muy grande para una herramienta pequeña en un campo tan estrecho. Ya no es fácil...
Gracias a los entusiastas internautas por sus comentarios, gracias por su apoyo.
js-cookie-monitor-debugger-hook ahora se ha unido al Proyecto 404 Star Chain
Escanea el código QR para unirte al grupo de intercambio de tecnología inversa:
Si el código QR del grupo caduca, puedes agregarme a WeChat personal y enviar [Grupo inverso] para unirme a ti en el grupo:
Haga clic aquí o escanee el código QR para unirse al grupo de comunicación de TG: