Vídeo gravado: Clique para ir
查看历史消息
. Clique para abrir esta página da web e continue rolando para ver todos os artigos publicados. Nesta etapa, com base em anyproxy, o html da página web é modificado e um script js é injetado para fazer a página rolar para baixo continuamente. Ao rolar para baixo, é obtida uma lista de todos os artigos. Essencialmente, um ataque man-in-the-middle.Como mostrado na imagem:
Obtenha uma demonstração da lista de artigos:
Abra os links dos artigos um por um:
A primeira etapa é instalar o anyproxy com êxito. Para esta etapa, leia o tutorial oficial do anyproxy em detalhes. Ele está escrito em detalhes para garantir que você possa fazer proxy de https com sucesso e visualizar o conteúdo do corpo de https.
yarn install
yarn start
Um result.html será aberto automaticamente para visualizar o conteúdo dos artigos rastreados em tempo real. Clique em uma conta oficial do WeChat e clique para visualizar o histórico de mensagens. Depois disso, a página do histórico continuará a rolar até o final. os artigos serão abertos um por um e o conteúdo será rastreado.
1. O primeiro passo é obter todos os artigos históricos de uma conta pública. Na máquina real onde o proxy anyproxy foi configurado, verifique as mensagens históricas. Neste momento, o WeChat abrirá a página do artigo histórico. Obtenha um documento HTML: var msgList
são os dados históricos do artigo que precisamos, a correspondência regular simples é usada para substituir caracteres ilegais e JSON.parse é convertido no formato que precisamos. Com base em anyproxy, injetamos um script neste documento HTML para fazer a página rolar sozinha e acionar o navegador para obter mais artigos.
var scrollKey = setInterval ( function ( ) {
window . scrollTo ( 0 , document . body . scrollHeight ) ;
} , 1000 ) ;
Quando a página da web rola até o final, o artigo é obtido novamente. Neste momento, é a mesma solicitação get, mas o formato com Content-Type como application/json
é retornado. O mesmo método aqui, a correspondência regular é usada. encontre e formate-o no formato que precisamos.
Ao mesmo tempo, quando can_msg_continue
é 0, significa que foi puxado para baixo e todos os artigos foram obtidos.
Neste ponto, todos os artigos de uma conta pública foram obtidos, incluindo título do artigo, autor e URL. Mas não há leituras e curtidas. Você precisa abrir o link do artigo específico para vê-lo.
socket . on ( 'url' , function ( data ) {
window . location = data . url ;
} ) ;
O número de leituras e curtidas pode ser verificado continuamente no lado do navegador para ver se os elementos DOM são renderizados e então coletados e enviados ao servidor. Você também pode verificá-los diretamente com anyproxy (eu uso o método anterior aqui).
key = setInterval ( function ( ) {
var readNum = $ ( '#readNum3' ) . text ( ) . trim ( ) ;
if ( ! readNum ) return ;
var likeNum = $ ( '#likeNum3' ) . text ( ) . trim ( ) ;
var postUser = $ ( '#post-user' ) . text ( ) . trim ( ) ;
var postDate = $ ( '#post-date' ) . text ( ) . trim ( ) || $ ( '#publish_time' ) . text ( ) . trim ( ) ;
var activityName = $ ( '#activity-name' ) . text ( ) . trim ( ) ;
var js_share_source = $ ( '#js_share_source' ) . attr ( 'href' ) ;
socket . emit ( 'crawler' , {
readNum : readNum ,
likeNum : likeNum ,
postUser : postUser ,
postDate : postDate ,
activityName : activityName ,
js_share_source : js_share_source
} ) ;
} , 1000 ) ;
O princípio é muito simples. Baseado em rastreadores de máquinas reais, ataques man-in-the-middle e injeção de scripts javascript, deixe o navegador simular o processo de operação humana.
// 删除微信网页的安全策略
delete header [ 'Content-Security-Policy' ] ;
delete header [ 'Content-Security-Policy-Report-Only' ] ;
header [ 'Expires' ] = 0 ;
header [ 'Cache-Control' ] = 'no-cache, no-store, must-revalidate' ;