วิดีโอที่บันทึก: คลิกเพื่อไป
查看历史消息
คลิกเพื่อเปิดหน้าเว็บนี้และเลื่อนดูบทความที่เผยแพร่ทั้งหมด ในขั้นตอนนี้ ขึ้นอยู่กับ anyproxy html ของหน้าเว็บจะถูกแก้ไข และสคริปต์ js จะถูกฉีดเข้าไปเพื่อให้หน้าเลื่อนลงอย่างต่อเนื่อง เมื่อเลื่อนไปที่ด้านล่างสุด จะได้รับรายการบทความทั้งหมด โดยพื้นฐานแล้วเป็นการโจมตีแบบคนกลางดังแสดงในภาพ:
รับการสาธิตรายการบทความ:
เปิดลิงก์บทความทีละรายการ:
ขั้นตอนแรกคือการติดตั้ง anyproxy ให้สำเร็จ สำหรับขั้นตอนนี้ โปรดอ่านบทช่วยสอนอย่างเป็นทางการของ anyproxy โดยละเอียด มีการเขียนไว้อย่างละเอียดเพื่อให้แน่ใจว่าคุณสามารถพร็อกซี https และดูเนื้อหาเนื้อหาของ https ได้สำเร็จ
yarn install
yarn start
result.html จะถูกเปิดโดยอัตโนมัติเพื่อดูเนื้อหาของบทความที่รวบรวมข้อมูลแบบเรียลไทม์ คลิกที่บัญชีอย่างเป็นทางการของ WeChat และคลิกเพื่อดูข้อความในอดีต หลังจากนั้น หน้าประวัติจะเลื่อนต่อไปจนสุด บทความจะถูกเปิดทีละบทความและรวบรวมข้อมูลเนื้อหา
1. ขั้นตอนแรกคือการได้รับบทความทางประวัติศาสตร์ทั้งหมดของบัญชีสาธารณะ บนเครื่องจริงที่ตั้งค่าพร็อกซี anyproxy ให้ตรวจสอบข้อความประวัติ ในเวลานี้ WeChat จะเปิดหน้าเว็บบทความประวัติ รับเอกสาร html: var msgList
คือข้อมูลบทความในอดีตที่เราต้องการ การจับคู่ปกติแบบธรรมดาใช้เพื่อแทนที่อักขระที่ไม่ถูกต้อง และ JSON.parse จะถูกแปลงเป็นรูปแบบที่เราต้องการ ตาม anyproxy เราแทรกสคริปต์ลงในเอกสาร HTML นี้เพื่อให้หน้าเว็บเลื่อนลงเองและทริกเกอร์เบราว์เซอร์ให้รับบทความเพิ่มเติม
var scrollKey = setInterval ( function ( ) {
window . scrollTo ( 0 , document . body . scrollHeight ) ;
} , 1000 ) ;
เมื่อหน้าเว็บเลื่อนไปจนสุด บทความจะได้รับอีกครั้ง ในขณะนี้ เป็นคำขอรับแบบเดียวกัน แต่รูปแบบที่มี Content-Type เป็น application/json
จะถูกส่งคืน วิธีเดียวกันนี้จะใช้การจับคู่แบบปกติ ค้นหาและจัดรูปแบบเป็นรูปแบบที่เราต้องการ
ในเวลาเดียวกัน เมื่อ can_msg_continue
เป็น 0 หมายความว่ามันถูกดึงไปที่ด้านล่างสุดและได้รับบทความทั้งหมดแล้ว
ณ จุดนี้ บทความทั้งหมดของบัญชีสาธารณะได้รับแล้ว รวมถึงชื่อบทความ ผู้แต่ง และ URL แต่ไม่มีการอ่านและการถูกใจ คุณต้องเปิดลิงก์บทความเฉพาะเพื่อดู
socket . on ( 'url' , function ( data ) {
window . location = data . url ;
} ) ;
สามารถตรวจสอบจำนวนการอ่านและการถูกใจได้อย่างต่อเนื่องบนฝั่งเบราว์เซอร์เพื่อดูว่าองค์ประกอบ DOM ถูกเรนเดอร์แล้วรวบรวมและส่งไปยังเซิร์ฟเวอร์หรือไม่ คุณยังสามารถตรวจสอบได้โดยตรงด้วย anyproxy (ฉันใช้วิธีเดิมที่นี่)
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 ) ;
หลักการนี้ง่ายมาก ให้เบราว์เซอร์จำลองกระบวนการทำงานของมนุษย์โดยใช้โปรแกรมรวบรวมข้อมูลของเครื่องจริง การโจมตีแบบแทรกกลาง และการฉีดสคริปต์จาวาสคริปต์
// 删除微信网页的安全策略
delete header [ 'Content-Security-Policy' ] ;
delete header [ 'Content-Security-Policy-Report-Only' ] ;
header [ 'Expires' ] = 0 ;
header [ 'Cache-Control' ] = 'no-cache, no-store, must-revalidate' ;