python執(zhí)行js代碼的方法
什么是js代碼混淆?
正常代碼
我們現(xiàn)在看一段js代碼,代碼邏輯很簡(jiǎn)單,就是拼接時(shí)間返回。
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; }
運(yùn)行一下這段代碼,如下圖所示。
混淆代碼
我隨便找了個(gè)在線的js代碼混淆網(wǎng)站。
js代碼
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
上面這個(gè)真的不是我瞎寫(xiě)的,混淆之后就是這樣子的,不信看圖片。
可能我們會(huì)有個(gè)疑問(wèn),js代碼都成這玩意了,還能執(zhí)行嗎? 答案是肯定的。即使js代碼非常亂,但還是可以執(zhí)行的,結(jié)果跟上面的是一樣的。
這就造成了一個(gè)問(wèn)題,我們?cè)谧雠老x(chóng)時(shí),如果需要,多多少少可能都要研究一下js代碼,然后進(jìn)行js解密一下,但是,但是,要是代碼都混淆成了這了,還怎么解?
一點(diǎn)邏輯都看不通了,基本上不可用Python按照js邏輯重寫(xiě)出來(lái)了...
很巧,小編也是卡在這里...后來(lái)我就想,要是Python能執(zhí)行js代碼就好了,不用管函數(shù)里面的邏輯了,只拿函數(shù)返回值就好了。
Python第三方包Execjs
可能是吧,不止我一個(gè)人遇到了這種情況,所以大佬們就開(kāi)發(fā)出來(lái)這種工具包,用于執(zhí)行js代碼。
安裝
在安裝之前,需要有node環(huán)境,這里就不舉栗子了,下一步下一步就好了。
pip3 install PyExecJS
執(zhí)行js
注:由于上述js代碼會(huì)生成window對(duì)象,并不能直接執(zhí)行成功,需要額外的其他輔助,這里簡(jiǎn)單的舉一下其他例子。
正常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))
執(zhí)行結(jié)果如下圖所示:
混淆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í)行結(jié)果如下圖所示:
可以看到,即使再混淆,只要執(zhí)行的是js代碼,都是沒(méi)啥問(wèn)題的。
上述拼接時(shí)間返回的js混淆代碼也是可以執(zhí)行的,但是它多了一個(gè)window對(duì)象,需要node安裝jsdom才行,由于網(wǎng)絡(luò)設(shè)置有問(wèn)題,實(shí)在是下載不了舉例子,實(shí)在是抱歉。
或者使用selenium打開(kāi)游覽器執(zhí)行再返回也行,當(dāng)然,速度更慢。
以上就是python執(zhí)行js代碼的方法的詳細(xì)內(nèi)容,更多關(guān)于python執(zhí)行js代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python中json.dumps()函數(shù)的使用解析
- Python如何把不同類(lèi)型數(shù)據(jù)的json序列化
- Python 如何保存json文件并格式化
- python 調(diào)用js的四種方式
- Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊)
- Python解析JSON對(duì)象的全過(guò)程記錄
- 使用python把json文件轉(zhuǎn)換為csv文件
- Python3中對(duì)json格式數(shù)據(jù)的分析處理
- python實(shí)現(xiàn)xml轉(zhuǎn)json文件的示例代碼
- 基于telepath庫(kù)實(shí)現(xiàn)Python和JavaScript之間交換數(shù)據(jù)
相關(guān)文章
使用python+poco+夜神模擬器進(jìn)行自動(dòng)化測(cè)試實(shí)例
這篇文章主要介紹了使用python+poco+夜神模擬器進(jìn)行自動(dòng)化測(cè)試實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python?獲取今天任意時(shí)刻的時(shí)間戳的方法
本文主要介紹了Python?獲取今天任意時(shí)刻的時(shí)間戳的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>2022-06-06VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令
這篇文章主要給大家介紹了關(guān)于VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令,Python環(huán)境的創(chuàng)建是在VSCode中很常見(jiàn)的一個(gè)需求,特別是當(dāng)我們需要開(kāi)發(fā)或者調(diào)試多個(gè)Python項(xiàng)目時(shí),使用虛擬環(huán)境是一種好的方式,需要的朋友可以參考下2023-10-10Python實(shí)現(xiàn)獲取系統(tǒng)臨時(shí)目錄及臨時(shí)文件的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)獲取系統(tǒng)臨時(shí)目錄及臨時(shí)文件的方法,結(jié)合實(shí)例形式分析了Python文件與目錄操作相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2019-06-06