Introducción práctica al rastreador inverso JS (1)

El sitio web rastreado en este artículo es el siguiente (puede encontrar la herramienta de descifrado para decodificar)

aHR0cHM6Ly9uZXdyYW5rLmNuLw==

El contenido rastreado es la información de noticias de la sección de información del sitio web.

Haga clic con el mouse para pasar la página, vea el paquete de solicitud en la herramienta para desarrolladores, es fácil ver la dirección y los parámetros de la solicitud,

Los parámetros de la solicitud de publicación son los siguientes:

 Los parámetros modificados son nonce y xyz. Nuestro objetivo es descubrir el principio de cifrado de estos dos parámetros, que es la función de cifrado. Luego use el código python para escribir una función para generar el parámetro encriptado, o extraiga el código JS, luego llámelo en python para generar el parámetro encriptado y luego pase la solicitud posterior para realizar el rastreador.

Proceso inverso:
1. Busque el parámetro nonce, habrá los siguientes resultados:

 2. Seleccione cualquier resultado, seleccione el código de embellecimiento y busque la posición del parámetro en el código JS.

 3. En este momento, es fácil ver la posición de los dos parámetros y establecer un punto de interrupción. Tenga en cuenta que el parámetro nonce es i, y la línea anterior muestra que i es la función j

4. Establezca un punto de interrupción en la línea 658 y haga clic en Depurar. Muestre el enlace de la función j, haga clic en él y encontrará la compra de proxy de la función j, que es el principio de generar el parámetro nonce.

Siempre que tenga algo de experiencia en lenguaje java o js o C, no es difícil ver que este código es para generar aleatoriamente una cadena compuesta por 9 números o letras.

En este punto, podemos crear un nuevo archivo JS (como newrank.js) en nuestro propio compilador (yo uso Vscode o Notepad), y luego copiar directamente el código JS anterior, que resuelve el primer parámetro. (También puede usar python para escribir directamente una función aleatoria para generar)

 5. Continúe con la depuración para encontrar el principio de cifrado del segundo parámetro xyz.
xyz es la función D. A través de la depuración, la función D es la función B, como se muestra en la siguiente figura.

 Damos clic para ingresar a la función b, el resultado es el siguiente  

 De hecho, la función de esta función es cifrar los parámetros con md5, ¡eso es todo! Si no lo entiende, también puede extraer directamente el código JS, después de todo, es una función. Al excavar, asegúrese de desenterrar todo, de lo contrario, será una función no válida. Conocerá este gran hoyo después de probarlo usted mismo, especialmente para los principiantes. Copiamos el código JS de esta función, lo agregamos al archivo JS recién creado arriba y lo guardamos.

6. Busque también los parámetros de la función de cifrado que genera el parámetro xyz. Repita la depuración justo ahora y podrá ver que el parámetro de la función d que genera xyz es h, y la línea anterior muestra que el parámetro h está compuesto por '/xdnphb/index/getMedia?AppKey=joker&keyword=&pageNumber=page number&pageSize=10' y la cadena '&nonce =' concatenada con el parámetro nonce.

Hasta ahora, hemos encontrado la función de generación de parámetros y la fuente de sus parámetros.
A continuación, solo necesitamos llamar a la función correspondiente en nuestro archivo js recién creado, generar parámetros cifrados y luego pasar la solicitud de publicación para completar el rastreador.

Preste atención al método de llamar al código js, ​​consulte el código completo del rastreador para obtener más información.

import requests
import pprint,time
import execjs
import hashlib

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64;` rv:47.0) Gecko/20100101 Firefox/47.0",
    "referer": "https://www.newrank.cn/public/news.html?",
  }

with open(r'D:\pythoncode\JS\newrank.js',encoding='utf-8') as f: 
        #上面这个newrank.js文件就是我们新建的js文件,里面放入了从网站JS源码抠出的两个函数。
        js=f.read()
        ctx=execjs.compile(js) 
for page in range(1,21):    
        nonce=ctx.call('j') #调用JS代码中的函数生成第一个加密参数nonce
        xyz=f'/xdnphb/index/getMedia?AppKey=joker&keyword=&pageNumber={page}&pageSize=10&nonce=' + nonce
        xyz=ctx.call('b',xyz) #调用JS代码中的函数生成第二个加密参数xyz
        #xyz参数也可以直接用python的MD5加密实现
        # xyz=hashlib.md5(xyz.encode(encoding='utf-8')).hexdigest()        
        data = {
        'keyword': '',
        'pageNumber': str(page),
        'pageSize': '10',
        'nonce': nonce,
        'xyz': xyz
        }
        # print(nonce, xyz)
        response = requests.post('https://www.newrank.cn/xdnphb/index/getMedia', headers=headers, data=data)
        print(response.status_code)
        # print(response.text)
        response_data=response.json()['value']
        # pprint.pprint(response_data)
        for item in response_data:
                print('资讯标题:',item['title'],'发布时间:',item['public_time'])

Ver los siguientes resultados de rastreo son los siguientes, me siento bastante renovado. ¡Bienvenidos todos a dejar un mensaje e intercambiar! Quienes necesiten el código JS también pueden dejar un mensaje.

Supongo que te gusta

Origin blog.csdn.net/weixin_45387160/article/details/122333002
Recomendado
Clasificación