一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

破解驗(yàn)證,讓爬取更隨心所欲!

 然并卵書屋 2017-05-27

蜘蛛,又叫爬蟲,是專門用來批量的爬去網(wǎng)上數(shù)據(jù)的腳本程序。

其實(shí)對(duì)于一個(gè)爬蟲程序,爬取數(shù)據(jù)方面并沒有很大難度,最大的難度在于如何突破驗(yàn)證和反爬蟲!對(duì)于突破反爬蟲的方法,這里就不討論了,今天主要討論的是解決驗(yàn)證的問題!

對(duì)于很多網(wǎng)站里面的有用數(shù)據(jù),都會(huì)要求客戶登陸后方能查看(甚至要求VIP),這時(shí)候我們要想獲取數(shù)據(jù)就需要按照規(guī)則登陸后才能抓取了,而對(duì)于模擬登陸,網(wǎng)上的教程也有很多,這里簡(jiǎn)單的介紹一下就行了:

前提:你得有一個(gè)賬號(hào)!

做法:

目前大部分的做法是運(yùn)用requests這個(gè)第三方庫實(shí)現(xiàn)登陸,requests庫里面提供了session這個(gè)方法,你只需要通過抓包工具將檢驗(yàn)登陸真實(shí)地址分析出來,然后構(gòu)造登陸信息的表單(一定要構(gòu)造完整的登陸信息),最后POST即可。有很大部分可能會(huì)遇到驗(yàn)證碼,這個(gè)可以采用PIL庫解析驗(yàn)證碼,也可以下載驗(yàn)證碼后手動(dòng)填寫。

當(dāng)然更簡(jiǎn)單粗暴的方法是直接抓取登陸后的cookies添加進(jìn)headers里面再進(jìn)行抓取,不過cookies會(huì)很快失效!

而對(duì)于一些網(wǎng)站,由于數(shù)據(jù)的重要性,會(huì)在請(qǐng)求時(shí)進(jìn)行設(shè)立鑰匙來進(jìn)行驗(yàn)證,從而保證數(shù)據(jù)的完整性和安全性!

典型的就是簽名認(rèn)證!

這種驗(yàn)證具可以限制爬蟲批量的抓取數(shù)據(jù),因?yàn)樗挠行r(shí)間很短,而且這個(gè)鑰匙是第一無二的,例如用md5、RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir數(shù)字簽名算法、Des/DSA,橢圓曲線數(shù)字簽名算法和有限自動(dòng)機(jī)數(shù)字簽名算法等加密算法得出來的字符串,往往是無法被破解的(當(dāng)然利用大數(shù)據(jù)進(jìn)行匹配另算),而且這種驗(yàn)證往往用于關(guān)鍵之處(例如列表頁,沒辦法抓取列表就沒辦法批量抓取數(shù)據(jù))。

解決這種驗(yàn)證的方法就是解析他的加密算法,然后根據(jù)得到的算法構(gòu)造鑰匙:

1.對(duì)于網(wǎng)頁類的抓取,可以分析js代碼

2.對(duì)于APP的抓取,就需要用到反編譯了

第一種情況需要對(duì)js代碼熟悉甚至精通才行,而第二種情況,只能針對(duì)安卓APP,而IOS目前好像還無法反編譯。第一種情況除了分析算法外其他的并不難,這里主要將第二種。

對(duì)于安卓的反編譯,你需要下載APP的apk文件,Apk文件本質(zhì)上其實(shí)是一個(gè)zip包。直接拿解壓工具解壓就可以看到其中包含了什么。下面簡(jiǎn)單介紹一下Apk文件的結(jié)構(gòu)。

AndroidManifest.xml:應(yīng)用的全局配置文件

assets文件夾:原始資源文件夾,對(duì)應(yīng)著Android工程的assets文件夾,一般用于存放原始的網(wǎng)頁、音頻等等,與res文件夾的區(qū)別這里不再贅述,可以參考上面介紹的兩篇文章。

classes.dex:源代碼編譯成class后,轉(zhuǎn)成jar,再壓縮成dex文件,dex是可以直接在Android虛擬機(jī)上運(yùn)行的文件。

lib文件夾:引用的第三方sdk的so文件。

META-INF文件夾:Apk簽名文件。

res文件夾:資源文件,包括了布局、圖片等等。

resources.arsc:記錄資源文件和資源id的映射關(guān)系。

上面的截圖中每個(gè)文件都是一個(gè)最基本的Apk 文件應(yīng)該包含在內(nèi)的。

但是直接把Apk當(dāng)做zip解壓后的這些文件是沒法直接閱讀的,畢竟他們都是經(jīng)過了build-tools打包工具處理過的。

我們直接用文本編輯器打開這里面的Manifest文件看看。

破解驗(yàn)證,讓爬取更隨心所欲!

反編譯Apk的目的就是Apk拆成我們可以閱讀的文件。

通過反編譯,我們一般想要得到里面的AndroidManifest.xml文件、res文件和java代碼。

Apk反編譯步驟

(1) ApkTo

ol拆包,得到AndroidManifest和res等資源文件

工具下載地址:https:///iBotPeaches/apktool/downloads

功能:拆解Apk文件,反編譯其中的資源文件,將它們反編譯為可閱讀的AndroidManifest.xml文件和res文件。

前面講過,直接把Apk文件當(dāng)做zip解壓,得到的xml資源文件,都是無法直接用文本編輯器打開閱讀的,因?yàn)樗鼈冊(cè)诖虬鼤r(shí)經(jīng)過了build-tools的處理。

用法:https://ibotpeaches./Apktool/documentation/有介紹,最新版本是2.2.0,運(yùn)行環(huán)境需要jre1.7。

這里,我演示一下用apktool來拆解Apk文件的基本方法,只需要在終端里面執(zhí)行下面的命令。

破解驗(yàn)證,讓爬取更隨心所欲!

下面我們看一下java -jar apktool.jar d yourApkFile.apk拆解后的結(jié)果:

破解驗(yàn)證,讓爬取更隨心所欲!

我們已經(jīng)得到一個(gè)可以用文本編輯器打開的閱讀的AndroidManifest.xml文件、assets文件夾、res文件夾、smali文件夾等等。

original文件夾是原始的AndroidManifest.xml文件,res文件夾是反編譯出來的所有資源,smali文件夾是反編譯出來的代碼。

注意,smali文件夾下面,結(jié)構(gòu)和我們的源代碼的package一模一樣,只不過換成了smali語言。它有點(diǎn)類似于匯編的語法,是Android虛擬機(jī)所使用的寄存器語言。

這時(shí),我們已經(jīng)可以文本編輯器打開AndroidManifest.xml文件和res下面的layout文件了。

這樣,我們就可以查看到這個(gè)Apk文件的package包名、Activity組件、程序所需要的權(quán)限、xml布局、圖標(biāo)等等信息。其實(shí)我們把Apk上傳到應(yīng)用市場(chǎng)時(shí),應(yīng)用市場(chǎng)也會(huì)通過類似的方式解析我們的apk。

note1:其實(shí)還有一種方法,可以省去每次解包時(shí),都要輸入java -jar apktool.jar xxx這行命令,官網(wǎng)也有說明,就是將這個(gè)命令包裝成shell腳本,方法見:https://ibotpeaches./Apktool/install/

note2:如果你在編譯的時(shí)候,發(fā)現(xiàn)終端里面提示發(fā)生了brut.android.UndefinedResObject錯(cuò)誤,說明你的apktool.jar版本太低了,需要去下載新版工具了。

note3:如果想要自己實(shí)現(xiàn)一個(gè)解析Apk文件,提取版本、權(quán)限信息的java服務(wù)時(shí),可以引用apktool.jar中的ApkDecoder,調(diào)用decode方法來實(shí)現(xiàn)??梢钥聪聢D中,apktool.jar里面有解析Apk文件的實(shí)現(xiàn)。

破解驗(yàn)證,讓爬取更隨心所欲!

(2) dex2jar反編譯dex文件,得到j(luò)ava源代碼

上一步中,我們得到了反編譯后的資源文件,這一步我們還想看java源代碼。這里要用的工具就是dex2jar。

工具下載地址:https:///projects/dex2jar/

功能:將dex格式的文件,轉(zhuǎn)換成jar文件。dex文件時(shí)Android虛擬機(jī)上面可以執(zhí)行的文件,jar文件大家都是知道,其實(shí)就是java的class文件。在官網(wǎng)有詳細(xì)介紹。

用法:打開下載的dex2jar-2.0文件夾,里面有shell和bat腳本,進(jìn)入終端,就可以在命令行使用了。

破解驗(yàn)證,讓爬取更隨心所欲!

運(yùn)行后,可以看到classes.dex已經(jīng)變成了classes-dex2jar.jar。

破解驗(yàn)證,讓爬取更隨心所欲!

note1:第一次下載下來后,在mac里運(yùn)行的時(shí)候可能會(huì)提示需要管理員的權(quán)限,這里我給這些sh腳本chmod 777后,即可運(yùn)行它。

破解驗(yàn)證,讓爬取更隨心所欲!

note2:寫完這一節(jié)的時(shí)候,我發(fā)現(xiàn)把dex轉(zhuǎn)換成jar已經(jīng)有了更好的工具enjarify,https://github.com/google/enjarify這個(gè)工具是谷歌官方開源的用于反編譯dex文件的。

使用方法和dex2jar差不多,也是簡(jiǎn)單的命令行操作。

這個(gè)工具的主頁中也提到dex2jar已經(jīng)是一個(gè)比較老的工具,在遇到混淆等等復(fù)雜的情況時(shí),可能無法正常工作。所以這里推薦大家使用enjarify這個(gè)工具。

(3) jd-gui查看java源代碼

工具下載地址:官網(wǎng)http://jd./上選擇自己所需要的版本。

功能:這個(gè)工具不用多說,寫java的人都知道。

有時(shí)候我們自己開發(fā)一個(gè)jar包給別人用,也會(huì)用它來查看class是不是都被正確的打入到了jar內(nèi),我以前介紹的gradle自定義打包jar的博客中也提到過它。

用法:下載后雙擊既可以運(yùn)行這個(gè)工具,直接把上一步得到的classes-dex2jar.jar拖到j(luò)d-gui程序的界面上即可打開了,效果如下圖所示。

破解驗(yàn)證,讓爬取更隨心所欲!

到了這一步,就可以隨心所欲的查看APP的源代碼了,而你要得算法就在里面!

當(dāng)然還有一種更好的方法,那就是直接在線一鍵編譯(現(xiàn)在的輪子太多了),簡(jiǎn)直不要太爽!

End.

作者:jay

來源:公眾號(hào)Python中文社區(qū)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美成人久久久免费播放| 国内九一激情白浆发布| 国产精品久久精品国产| 日本av一区二区不卡| 国产色一区二区三区精品视频| 国产免费自拍黄片免费看| 中日韩免费一区二区三区| 亚洲国产综合久久天堂| 成年人黄片大全在线观看| 国产日韩欧美综合视频| 特黄大片性高水多欧美一级 | 加勒比日本欧美在线观看| 亚洲性生活一区二区三区| 国产成人午夜福利片片| 91香蕉视频精品在线看| 国产毛片对白精品看片| 噜噜中文字幕一区二区| 91人妻人人澡人人人人精品| 色综合伊人天天综合网中文| 亚洲一区在线观看蜜桃| 欧美人妻免费一区二区三区| 护士又紧又深又湿又爽的视频| 国产熟女一区二区精品视频| 亚洲熟妇熟女久久精品| 少妇激情在线免费观看| 成人亚洲国产精品一区不卡| 国产精品亚洲二区三区| 欧美综合色婷婷欧美激情| 欧美国产精品区一区二区三区| 色一欲一性一乱—区二区三区| 精产国品一二三区麻豆| 欧美色婷婷综合狠狠爱| 综合久综合久综合久久| 五月激情婷婷丁香六月网| 亚洲妇女黄色三级视频| 一本久道久久综合中文字幕| 又黄又爽禁片视频在线观看| 成人午夜视频在线播放| 国产在线成人免费高清观看av| 久久亚洲午夜精品毛片| 亚洲第一区欧美日韩在线|