0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是js代碼混淆

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-31 16:05 ? 次閱讀

為什么要引出Python執(zhí)行js這個問題?

都說術(shù)業(yè)有專攻,每個語言也都有自己的長處和短處。在爬蟲方向,Python絕對是扛把子,近幾年隨著AI的火爆,需要各種各樣的數(shù)據(jù),所以,爬蟲需求也跟著水漲船高起來。

做爬蟲的當(dāng)然是爬的爽,但是估計人家后臺在罵街,畢竟誰都不希望自己的數(shù)據(jù)被弄走,所以后臺反爬技術(shù)也在快速提升,一攻一防就這么在拉鋸著。

現(xiàn)在為了防止反爬,前端使用的反爬技術(shù)比較多的是js代碼混淆。

什么是js代碼混淆?

正常代碼

我們現(xiàn)在看一段js代碼,代碼邏輯很簡單,就是拼接時間返回。

function formatDate(now) {
    var now = new Date(1230999938);
    var year=now.getFullYear();
    var month=now.getMonth()+1;
    var date=now.getDate();
    var hour=now.getHours();
    var minute=now.getMinutes();
    var second=now.getSeconds();
    return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
}

混淆代碼

function formatDate(mz1){var KkkGDiH2=new window["\x44\x61\x74\x65"](1230999938);var tsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']();var YMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1;var Ozo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']();var QMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']();var JfXVV_Akq7=KkkGDiH2['\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73']();var $mP8=KkkGDiH2['\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73']();return tsk3+"\x2d"+YMreyP4+"\x2d"+Ozo5+" "+QMYEc$eD6+"\x3a"+JfXVV_Akq7+"\x3a"+$mP8

可能我們會有個疑問,js代碼都成這玩意了,還能執(zhí)行嗎? 答案是肯定的。即使js代碼非常亂,但還是可以執(zhí)行的,結(jié)果跟上面的是一樣的。

這就造成了一個問題,我們在做爬蟲時,如果需要,多多少少可能都要研究一下js代碼,然后進(jìn)行js解密一下,但是,但是,要是代碼都混淆成了這了,還怎么解?

一點邏輯都看不通了,基本上不可用Python按照js邏輯重寫出來了...

后來我就想,要是Python能執(zhí)行js代碼就好了,不用管函數(shù)里面的邏輯了,只拿函數(shù)返回值就好了。

Python第三方包Execjs

安裝

在安裝之前,需要有node環(huán)境,這里就不舉栗子了,下一步下一步就好了。

pip3 install PyExecJS

Execjs用法超級簡單的,幾行代碼。

執(zhí)行js

注:由于上述js代碼會生成window對象,并不能直接執(zhí)行成功,需要額外的其他輔助,這里簡單的舉一下其他例子。

正常js代碼


function add(x, y) {
   return x + y;
}

Python執(zhí)行js代碼


import execjs

ctx = execjs.compile("""
function add(x, y) {
  return x + y;
}
""")
print(ctx.call("add", 1, 2))

混淆js代碼

function add(bi1,Pl$2){return bi1+Pl$2}

Python執(zhí)行混淆js代碼

import execjs

ctx = execjs.compile("""
function add(bi1,Pl$2){return bi1+Pl$2}
""")
print(ctx.call("add", 1, 2))

即使再混淆,只要執(zhí)行的是js代碼,都是沒啥問題的。

上述拼接時間返回的js混淆代碼也是可以執(zhí)行的,但是它多了一個window對象,需要node安裝jsdom才行,或者使用selenium打開游覽器執(zhí)行再返回也行,當(dāng)然,速度更慢。
審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JS
    JS
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    17983
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67770
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84081
收藏 人收藏

    評論

    相關(guān)推薦

    推薦一個支持js的嵌入式設(shè)備開發(fā)平臺

    可以通過vscode開發(fā)js,實時推送js代碼到設(shè)備里運行,無需編譯,支持屏幕,感興趣的可以看看 https://github.com/duoxianwulian/dxdop 提供很多js
    發(fā)表于 09-04 14:04

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回源代碼的過程。反編譯后的代碼可以進(jìn)行修改,但是需要注意,反編譯代碼的質(zhì)量和可讀性可能會受到原始編譯代碼
    的頭像 發(fā)表于 09-02 11:00 ?174次閱讀

    工程師必備!Node.js和常見管理工具介紹(附操作演示)

    語言及其相關(guān)生態(tài)中的一些基礎(chǔ)而關(guān)鍵的概念,以及它們是如何在互聯(lián)網(wǎng)歷史浪潮中產(chǎn)生的。一JavaScript與Node.js1JavaScriptJavaScript,即JS,
    的頭像 發(fā)表于 08-30 12:34 ?98次閱讀
    工程師必備!Node.<b class='flag-5'>js</b>和常見管理工具介紹(附操作演示)

    分享IP地址混淆知識

    由于IPv4 地址資源的枯竭促使 IPv6 技術(shù)的廣泛應(yīng)用,從而形成了 IPv4 和 IPv6 并存的局面。這就逐漸出現(xiàn)了 IP 地址混淆導(dǎo)致的網(wǎng)絡(luò)問題。
    的頭像 發(fā)表于 07-31 16:54 ?173次閱讀

    DX1008JS 晶體諧振器——輕薄與高性能的完美結(jié)合

    DX1008JS 晶體諧振器——輕薄與高性能的完美結(jié)合
    的頭像 發(fā)表于 07-24 14:15 ?160次閱讀

    【鴻蒙】NAPI 框架生成工具實現(xiàn)流程

    NAPI 框架生成工具 可以根據(jù)用戶指定路徑下的 ts(typescript)接口文件一鍵生成 NAPI 框架代碼、業(yè)務(wù)代碼框架、GN 文件等。在開發(fā) JS 應(yīng)用與 NAPI 間接口時,底層框架
    的頭像 發(fā)表于 02-28 17:00 ?545次閱讀
    【鴻蒙】NAPI 框架生成工具實現(xiàn)流程

    【鴻蒙】OpenHarmony 4.0藍(lán)牙代碼結(jié)構(gòu)簡析

    OpenHarmony藍(lán)牙模塊 代碼倉和目錄結(jié)構(gòu) 當(dāng)前藍(lán)牙完整的代碼涉及多個代碼代碼路徑 說明 應(yīng)用接口https://gitee.com/openharmony/interfac
    的頭像 發(fā)表于 02-26 16:08 ?1121次閱讀
    【鴻蒙】OpenHarmony 4.0藍(lán)牙<b class='flag-5'>代碼</b>結(jié)構(gòu)簡析

    JavaScript壓縮、混淆和加密技術(shù)原理解析

    前端代碼都是公開的,為了提高代碼的破解成本、保證JS代碼里的一些重要邏輯不被居心叵測的人利用,需要使用一些加密和混淆的防護(hù)手段。
    的頭像 發(fā)表于 12-26 09:41 ?2392次閱讀
    JavaScript壓縮、<b class='flag-5'>混淆</b>和加密技術(shù)原理解析

    js文件可以直接瀏覽器運行嗎

    載和運行。 在Web開發(fā)中,JS常被用于實現(xiàn)動態(tài)交互效果和頁面邏輯控制。通過將JS代碼嵌入到網(wǎng)頁的HTML文件中,瀏覽器可以在頁面加載過程中自動執(zhí)行JS,實現(xiàn)網(wǎng)頁的動態(tài)效果和用戶交互。
    的頭像 發(fā)表于 11-27 16:45 ?3201次閱讀

    怎么用js保存數(shù)據(jù)

    JS保存數(shù)據(jù)是Web開發(fā)中非常重要的一個功能,它能夠?qū)⒂脩舻妮斎牖蛘咂渌麛?shù)據(jù)存儲在瀏覽器中,隨后方便地讀取和使用。在本文中,我們將討論不同的數(shù)據(jù)保存方式以及如何使用JS在客戶端中實現(xiàn)數(shù)據(jù)的保存
    的頭像 發(fā)表于 11-27 16:10 ?812次閱讀

    基于MC9S08JS16和AES的USB+Key設(shè)計案例

    電子發(fā)燒友網(wǎng)站提供《基于MC9S08JS16和AES的USB+Key設(shè)計案例.pdf》資料免費下載
    發(fā)表于 11-08 14:38 ?0次下載
    基于MC9S08<b class='flag-5'>JS</b>16和AES的USB+Key設(shè)計案例

    Python調(diào)用JS的 4 種方式

    1. 前言 日常 Web 端爬蟲過程中,經(jīng)常會遇到參數(shù)被加密的場景,因此,我們需要分析網(wǎng)頁源代碼 通過調(diào)式,一層層剝離出關(guān)鍵的 JS 代碼,使用 Python 去執(zhí)行這段代碼,得出參數(shù)
    的頭像 發(fā)表于 10-30 09:41 ?575次閱讀

    【開源三方庫】Fuse.js:強(qiáng)大、輕巧、零依賴的模糊搜索庫

    開源項目 OpenHarmony 是每個人的 OpenHarmony 曹天恒 公司:中國科學(xué)院軟件研究所 小組:知識體系工作組 1.簡介 Fuse.js是一款功能強(qiáng)大且輕量級的JavaScript
    發(fā)表于 10-12 15:05

    OpenHarmony 的js引擎用的是方舟編譯器嗎

    OpenHarmony 的js引擎用的是方舟編譯器嗎?方舟編譯器不是用來編譯嗎?
    發(fā)表于 10-09 09:32

    java中的代碼混淆技術(shù)

    今天和大家一起學(xué)習(xí)下java中的代碼混淆技術(shù),后面你也可以讓你的代碼不再裸露在外了,讓人輕易窺視 代碼混淆技術(shù) 當(dāng)需要閱讀jar文件的內(nèi)容時
    的頭像 發(fā)表于 09-25 11:48 ?1358次閱讀
    java中的<b class='flag-5'>代碼</b><b class='flag-5'>混淆</b>技術(shù)