百度企業信用js加密研究

一、簡單說明

      企業相關信息對於預測企業發展狀況十分重要。基於公司業務,最近分析企業信息查詢網站,瞭解了很多相關的網站,有全國企業信用信息公示天眼查企查查啓信寶水滴信用百度企業信用阿土伯等企業查詢網站。今天以百度企業信用爲例,研究這個網站的js反爬措施

二、發現問題   

     通過在搜索框中輸入小米科技有限責任公司,得到企業列表頁面

     公司詳情頁面url爲:

    發現url中有關鍵標識pid,似乎是js生成的。如果我們能夠生成pid參數,是不是就能少發送次請求,直接通過url拿到詳情頁公司信息。想象很豐富,現實很殘酷啊!再次請求就能發現,每次生成的pid參數都是變化的,不過也無傷大雅,只是多發送一次請求。

     進入到詳情頁面,關鍵性信息全都是ajax動態加載,這樣拿到完整信息發送的請求大量增加,相對的大大減少分析數據時間,

    進一步分析所有ajax請求,發現一個令人激動的現象,所有ajax請求url兩個關鍵參數是一樣的,例如基本信息和變更記錄的url

     我們只需要拿到pid和tot兩個關鍵參數,豈不是可以拿到所有的公司信息!接下來開始我們的js研究破解之路

三、分析破解js

     pid和tot參數似乎不是簡單的基於加密算法生成的,我們在全局搜索找到生成參數的js,並在ch'rome中調試生成過程。

 

    經過一番艱苦的奮鬥,終於不負苦心人。終於找到了,pid在詳情頁面請求的js中

     tk的生成同樣存在

    再次刷新,發現和前面一篇的openlaw網站加密類似,tk的生成每次都在變化,所以不能單純的通過python生成jk抓取數據。使用PyExecJS(Python3)運行js生成必要數據。避免麻煩直接上代碼吧!

import re
import time
import requests
from lxml import etree
from utils.get_proxy import func_proxy
from utils.headers import headers
import execjs
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全請求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

ip_list = []
ip_list.append(func_proxy())
resp = requests.get(url="https://xin.baidu.com/s?q=%E5%B0%8F%E7%B1%B3%E7%A7%91%E6%8A%80&t=0", headers=headers, proxies=ip_list[0], verify=False)
response = resp.content.decode()
html = etree.HTML(response)
url = "https://xin.baidu.com" + html.xpath('//*[@class="zx-list-wrap"]/div[1]//a[@class="zx-list-item-url"]/@href')[0]
resp = requests.get(url, headers=headers, proxies=ip_list[0], verify=False)
text = resp.text
response = resp.content.decode()
html2 = etree.HTML(response)
d = html2.xpath('//*[@id="baiducode"]/text()')[0]
pid = eval(re.findall(r'"pid":(.*?)\,.*?"defTags"', text, re.S)[0])
id1, att = re.findall(r"document\.getElementById\('(.*?)'\)\.getAttribute\('(.*?)'\)", text)[0]
tk_func = "function mix(" +re.findall(r'mix\((.*?)\(function', text, re.S)[0]
'//*[@id="baiducode"]/text()'
print(tk_func)
tk = re.findall(att + r'="(.*?)"\>', text)[0]
print(tk, d)
tk = execjs.compile(tk_func).call('mix', tk, d)
print(tk)
time1 = int(time.time() * 1000)
url1 = "https://xin.baidu.com/detail/basicAjax?pid={}&tot={}&_={}".format(pid, tk, time1)
resp1 = requests.get(url1, headers=headers, proxies=ip_list[0])
print(resp1.content.decode('unicode_escape'))

得到的結果如下:

{'http': 'http://42.232.197.9:26360'}
function mix(tk, bid) {var tk = tk.split("").reverse().join("");return tk.substring(0, tk.length - bid.length);}
626216235492OUQmETa1XojxMQSJt*Fll8xus-CsToUa42yy 294532612626
yy24aUoTsC-sux8llF*tJSQMxjoX1aTEmQUO
{"status":0,"msg":"","data":{"entLogo":"\/static\/pc\/photo\/logo.png","shareLogo":"https:\/\/ts.bdimg.com\/biz\/ecom\/vmp\/[email protected]","entName":"小米科技有限責任公司","bdCode":294532612626,"openStatus":"開業","entType":"有限責任公司(自然人投資或控股)","isClaim":4,"claimUrl":"-","benchMark":true,"regNo":"91110108551385082Q","orgNo":"55138508-2","taxNo":"110108551385082","scope":"技術開發;貨物進出口、技術進出口、代理進出口;銷售通訊設備、廚房用品、衛生用品(含個人護理用品)、日用雜貨、化妝品、醫療器械I類、II類、避孕器具、玩具、體育用品、文化用品、服裝鞋帽、鐘錶眼鏡、針紡織品、家用電器、傢俱(不從事實體店鋪經營)、花、草及觀賞植物、不再分裝的包裝種子、照相器材、工藝品、禮品、計算機、軟件及輔助設備、珠寶首飾、食用農產品、寵物食品、電子產品、摩托車、電動車、自行車及零部件、智能卡、五金交電(不從事實體店鋪經營)、建築材料(不從事實體店鋪經營);維修儀器儀表;維修辦公設備;承辦展覽展示活動;會議服務;籌備、策劃、組織大型慶典;設計、製作、代理、發佈廣告;攝影擴印服務;文藝演出票務代理、體育賽事票務代理、展覽會票務代理、博覽會票務代理;手機技術開發;手機生產、手機服務(限海淀區永捷北路2號二層經營);從事互聯網文化活動;出版物零售;出版物批發;銷售第三類醫療器械;銷售食品;零售藥品;廣播電視節目製作。(企業依法自主選擇經營項目,開展經營活動;從事互聯網文化活動、出版物批發、出版物零售、銷售食品、廣播電視節目製作、零售藥品、銷售第三類醫療器械以及依法須經批准的項目,經相關部門批准後依批准的內容開展經營活動;不得從事本市產業政策禁止和限制類項目的經營活動。)","regAddr":"北京市海淀區清河中街68號華潤五彩城購物中心二期13層","legalPerson":"雷軍","startDate":"2010-03-03","openTime":"2010-03-03 至 2030-03-02","annualDate":"2018-06-20","regCapital":"185,000萬(元)","industry":"其他科技推廣和應用服務業","telephone":"6060****-1000","district":"北京市海淀區","authority":"北京市工商行政管理局海淀分局","realCapital":"-","orgType":"企業法人","scale":"-","directors":[{"name":"雷軍","gender":"未知","title":"董事長","img":"\/static\/pc\/photo\/directors.png"},{"name":"林斌","gender":"未知","title":"董事","img":"\/static\/pc\/photo\/directors.png"},{"name":"劉芹","gender":"未知","title":"董事","img":"\/static\/pc\/photo\/directors.png"},{"name":"許達來","gender":"未知","title":"董事","img":"\/static\/pc\/photo\/directors.png"},{"name":"黎萬強","gender":"未知","title":"監事","img":"\/static\/pc\/photo\/directors.png"},{"name":"雷軍","gender":"未知","title":"經理","img":"\/static\/pc\/photo\/directors.png"}],"shares":[{"name":"雷軍","type":"自然人股東","img":"\/static\/pc\/photo\/shares.png","amount":"143,934萬(元)"},{"name":"黎萬強","type":"自然人股東","img":"\/static\/pc\/photo\/shares.png","amount":"18,724萬(元)"},{"name":"洪鋒","type":"自然人股東","img":"\/static\/pc\/photo\/shares.png","amount":"18,623萬(元)"},{"name":"劉德","type":"自然人股東","img":"\/static\/pc\/photo\/shares.png","amount":"3,718萬(元)"}],"districtCode":"1004:110108"}}

本博客僅用於學習研究,切勿用於商業用途

尊重原創,轉載請註明,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章