建議先看片尾
文件操作基礎
os模塊
py正則
re模塊
requests庫
可以學學urllib(requests基於urllib寫的)
https://www.cnblogs.com/yhll/p/9760494.html
細碎知識點
b = a.split("_")[1]#從第0個開始,_分割
s = "swww"
c = "aaaaaaaaaa{s}bbb"#字符串拼接
#字符編碼問題解決技巧,例如:出錯嘗試二次編碼
保持登陸姿態
import requests
session = requests.session()
res = session.get()#類似於requests
防盜鏈
通過接收父頁面的鏈接來判斷鏈接的來源(上一級,通常是用來防止其他網站復制抄襲)
refer:通過head參數里的refer來檢查
通過對請求鏈接進行處理
X-Forwarded-For
客戶端請求偽造
json和字典的區別
json 本質上還是字符串,只是按 key:value 這種鍵值對的格式來的字符串
- Python開發中字典和 json的區別?字典是一種數據結構,json 是一種數據的表現形式,字典的 key 值只 要是能 hash 的就行,json 的必須是字符串。
- Python開發中字典和 json的概念區別:
一、字典
字典是一種數據結構,而json是一種數據格式,格式就會有一些形式上的限制,比如json的格式要求必須且只能使用雙引號作為key或者值的邊界符號(值如果是數字可以不用加雙引號),不能使用單引號,用單引號或者不用引號會導致讀取數據錯誤,而且“key”必須使用邊界符(雙引號),但字典就無所謂了,可以使用單引號,也可以使用雙引號。
dict是一個完整的數據結構,是對Hash Table這一數據結構的一種實現,是一套從存儲到提取都封裝好了的方案。它使用內置的哈希函數來規划key對應value的存儲位置,從而獲得O(1)的數據讀取速度。
二、json
json是JavaScript Object Notation的首字母縮寫,字面的意思是javascript對象表示法,這里說的json指的是類似於javascript對象的一種數據格式對象,目前這種數據格式比較流行,逐漸替換掉了傳統的xml數據格式, 前端使用ajax的時候后台返回該前端的數據格式就是json格式的。
json是一種數據格式,是純字符串。可以被解析成Python的dict或者其他形式。
三、json和dict區別對比
json的key只能是字符串,python的dict可以是任何可hash對象(hashtable type);
json的key可以是有序、重復的;dict的key不可以重復。
json的value只能是字符串、浮點數、布爾值或者null,或者它們構成的數組或者對象。
json任意key存在默認值undefined,dict默認沒有默認值;
json訪問方式可以是[],也可以是.,遍歷方式分in、of;dict的value僅可以下標訪問。
json的字符串強制雙引號,dict字符串可以單引號、雙引號;
dict可以嵌套tuple,json里只有數組。
json:true、false、null
python:True、False、None
json中文必須是unicode編碼,如"\u6211".
json的類型是字符串,字典的類型是字典。
四、hashtable
一個對象當其聲明周期內的hash值不發生改變,而且可以跟其他對象進行比較時,這個對象就是hashtable的。
1、python中的基本類型都是Hashtable,如str、bytes、數字類型、tuple等;
2、用戶自定義的類型默認都是hashtable,因為它們的hash值就是id()值;
3、frozenset始終都是hashtable的,因為它們所有的項目都是被定義成hashtable的;
4、只有當tuple內的所有項都是hashtable的時候,tuple才是hashtable;
編碼
encoding、utf-8、gbk、charset等
代理(入獄基礎)
pro = {
"http":"http://*********"
}
res = requests.get(url,proxies = pro)
線程池
多線程加快速度
微信小程序
官方文檔不香?
https://developers.weixin.qq.com/miniprogram/dev/devtools/debug.html
干點臟活(扒微信小程序源碼)
控制台入門
https://www.pianshen.com/article/15161573557/
無限debug
手段羅列
https://blog.csdn.net/Sheation/article/details/112727599
啪一下我把無限debug過了
刷新下之后,再重復跳過幾個debug就過了
這是一個定時器無限debugger,如果兩次時間差大於100,那么就會一直讓我們處於debugger狀態。
當遇到這種反調試的手法時,可在進入debugger狀態后,在console中輸入以下代碼,以此跳過。
for (var i = 1; i < 99999; i++)window.clearInterval(i);
1
對沒錯,它會報錯,但是它不會debug,嗯是的
- hook(此處沒有,按照其他博客文章截圖為例)
- 改變判斷條件
f8一下,就跳轉到下一個點了
- 禁止斷點
f8下就好,但是不建議使用,因為此功能會同步取消打斷點,后期下斷埋下隱患
瑞數
由於加密Js代碼每次請求變量名都不一樣,在線分析會很不方便,所以需要將文件離線下載到本地,再進行分析。
方法1:硬搞JS。這條路我踩了兩個版本的瑞數,過程極其艱難。可謂是一錘更比一錘狠,為了頭發我果斷放棄。
方法2:考慮到瀏覽器。抹掉canvas、webgl 和audio等瀏覽器指紋+鼠標滑動點擊,瀏覽器開一個服務,爬蟲直接用就行了,腦海中這個方案基本完美。
方法3:js對抗。借助chrome瀏覽器注入進去所有被監控的東西,加上干擾。
方法4:去申請瑞數的試用版,還原源碼。
方法5:利用大量R雞兒。就正常去爬,提升他們反爬的誤傷率,假如他們自己都訪問不了自家網站,是不是有可能下線瑞數反爬。
例子
我采用了第五種+第三種,大量的服務端供我使用,目前低成本采集。
方法1:假如你扣出來js,為了速度快你用nodjs起個服務,假如代碼里面有一些刪文件的操作(瀏覽器不能執行,nodejs可以觸發的代碼),你哭吧。
方法2:我使用了miniblink這個所謂打包后8M的瀏覽器,實際上是20多M,可我只需要能打開網頁,能ajax訪問就行了。於是乎找了老版本去搞。
方法3:emm,我能說具體的,正在用呢。看思路就能自己實現。
方法4:你自測吧,我沒成功,對方非要來公司聊。
方法5:你自己找渠道買雞兒,就讓他看到一賊正常的客戶在訪問,他能咋辦。
ob混淆
jsvm
wasm
MD5 ars rsa base64
設計密碼學知識,有的請求會加密后提交,要通過js代碼解決加密問題
嚴格意義base之類只能說編碼方式,不算加密
常識+理解+專業知識+js調試
app
逆向,反編譯,接口提取等
AAEncode混淆
JSFunck混淆
JJEncode混淆
eavl混淆
加速樂
第一次訪問時會返回一段加密的js,檢查瀏覽器環境,符合預設才會進一步請求其他資源文件,不符合直接返回521狀態碼。登錄賬號后,服務器端返回cookie,包括獲取目標數據的關鍵cookie鍵jsl_clearance,每二三十分鍾后jsl_clearance失效,若用戶有其他發起請求數據的操作,本地加密js文件會請求服務器端刷新__jsl_clearance,沒刷新時返回521狀態碼,無法獲取目標數據。
字體加密
字體庫和參數偏移
驗證碼
各種,處理方法有:
- 圖像處理訓練
- 調接口,花錢找專業的
cookie參數生成加密
追生成就完事了
ua反爬
基礎部分,設置ua頭
接口返回的數據加密
ip138Ajax接口請求返回值需解密js代碼
請求參數加密
通過對特定請求參數進行加密變換,例如base64,MD5加密后傳輸
往往會因為傳輸安全問題進行加密再提交,例如銀行系統有時會采用MD5加密后用salt再進行MD5包裹,加密充分后傳輸
驗證碼
驗證碼又分為普通的字符數字 滑塊 點選
還有就是一些驗證碼的廠商 比如數美 極驗 易盾 谷歌 阿里
cookie綁定常登陸ip
字面意思
自動化工具
selenium
fiddle、burp
中間抓包
js基礎
會看js代碼邏輯、吧
js在py運行
js2py
execjs
webpack
打包好,下一步本地分析,有些操作往往都是在本地調試的,不為啥,,,方便
本地分析代碼
例如hubuilder,sublime3,vscode等
最后
本人在出學爬蟲之后總感覺差點意思,好多東西爬不下來的,我一個朋友需要某些睡不着覺網站內容時,參數給全還是不返回東西,很惱火直到后來,才發現,除了大型項目需要的數據庫和框架,反爬和反反爬更令人振奮,做web安全時也會有知識點的重合。
所以這篇文章交給你思路,具體你來學,幫你少踩坑。
感謝下十一大佬(在職爬蟲工程師),比較低調,好多思路都是他幫我想的,平時也指導了我很多東西;還有早睡早起大哥,幫我審核文章,兩位都是亦師亦友。
文章比較雜,思路比較多,后期會補充,聯系教父再發一篇文章的
個人博客:
www.cnblogs.com/l1j1ng
東西很少很少,以后會整理一些東西放出來的,希望大家關注