Python網(wǎng)絡(luò)爬蟲(chóng)之js逆向之遠(yuǎn)程調(diào)用(rpc)免去摳代碼補(bǔ)環(huán)境簡(jiǎn)介
大家好,我是黑臉怪。這篇文章主要給大家介紹jsrpc,方便大家日后在遇到JS逆向的時(shí)候派上用場(chǎng)。
前言
jsrpc是指在瀏覽器開(kāi)啟一個(gè)ws和go服務(wù)連接,以調(diào)用http接口的形式來(lái)通信,瀏覽器端收到調(diào)用通信執(zhí)行原先設(shè)置好的js代碼。可以用于js逆向調(diào)用加密函數(shù)直接返回結(jié)果,也可以用來(lái)直接獲取數(shù)據(jù)。
該工具和代碼,已經(jīng)上傳到git,下載即可用。
下載地址:https://github.com/jxhczhl/JsRpc#jsrpc-hliang
代碼目錄結(jié)構(gòu)
-- main.go (服務(wù)器的主代碼)
-- resouces/JsEnv.js (客戶端注入js環(huán)境)
基本介紹
運(yùn)行服務(wù)器程序和js腳本,即可讓它們通信,實(shí)現(xiàn)調(diào)用接口執(zhí)行js獲取想要的值(加解密)
實(shí)現(xiàn)
原理:在網(wǎng)站的控制臺(tái)新建一個(gè)WebScoket客戶端鏈接到服務(wù)器通信,調(diào)用服務(wù)器的接口 服務(wù)器會(huì)發(fā)送信息給客戶端 客戶端接收到要執(zhí)行的方法執(zhí)行完js代碼后把獲得想要的內(nèi)容發(fā)回給服務(wù)器 服務(wù)器接收到后再顯示出來(lái)
說(shuō)明:本方法可以https證書且支持wss
在https的網(wǎng)站想要新建WebSocket連接如果是連接到普通的ws可能會(huì)報(bào)安全錯(cuò)誤,好像連接本地(127.0.0.1)不會(huì)報(bào)錯(cuò)~ 可以用本地和wss 你自己看著玩。
無(wú)https證書者。直接編譯main.go,我試了一下,發(fā)現(xiàn)使用本地ip(127.0.0.1)可以在https的網(wǎng)站直接連接ws使用 默認(rèn)端口12080。
有https證書者。修改main.go文件 把r.Run()注釋掉,把r.RunTls注釋取消掉 并且參數(shù)設(shè)置證書的路徑 直接輸入名字就是當(dāng)前路徑 默認(rèn)端口:12443。
另外的題外話,有域名沒(méi)證書不會(huì)搞的 或者有域名有公網(wǎng)(非固定IP的)都可以搞成的,自己研究研究。
使用方法
首先下載編譯好的文件,下載地址:https://github.com/jxhczhl/JsRpc/releases/tag/Windows
直接雙擊打開(kāi)編譯好的文件,開(kāi)啟服務(wù)。
api 簡(jiǎn)介
- /list :查看當(dāng)前連接的ws服務(wù)
- /ws :瀏覽器注入ws連接的接口
- /result :獲取數(shù)據(jù)的接口 (數(shù)據(jù)格式j(luò)son: {"group":"hhh","hello":"好困啊yes","name":"baidu","status":"200"} )
說(shuō)明:接口用?group和name來(lái)區(qū)分 如注入ws的例子 ws://127.0.0.1:12080/ws?group={}&name={}, group和name都可以隨便,這是調(diào)用的接口:http://127.0.0.1:12080/go?group={}&name={}&action={}?m={},group和name填寫上面注入時(shí)候的,action是注冊(cè)的方法名,param是可選的參數(shù)。
注入JS,構(gòu)建通信環(huán)境
打開(kāi)JsEnv 復(fù)制粘貼到網(wǎng)站控制臺(tái)(注意有時(shí)要放開(kāi)斷點(diǎn))。
注入ws與方法
// 連接通信
var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=hhh&name=baidu");
// 注冊(cè)一個(gè)方法 第一個(gè)參數(shù)hello為方法名,
// 第二個(gè)參數(shù)為函數(shù),resolve里面的值是想要的值(發(fā)送到服務(wù)器的)
// param是可傳參參數(shù),可以忽略
demo.regAction("hello", function (resolve, param) {
var c = "好困啊" + param;
resolve(c);
})
訪問(wèn)接口,獲得數(shù)據(jù)
http://127.0.0.1:12080/go?group=hhh&name=baidu&action=hello¶m=yes
// 其中 hello是會(huì)變的 是action名字。 用代碼訪問(wèn)的時(shí)候要注意這個(gè)名字
{
"group":"hhh",
"hello":"好困啊yes",
"name":"baidu",
"status":"200"
}
總結(jié)
大家好,我是黑臉怪。 這篇文章主要給大家介紹jsrpc,文章的理論性很強(qiáng),看上去十分的粗獷,不過(guò)別擔(dān)心,接下來(lái)我給大家出幾篇關(guān)于使用jsrpc來(lái)進(jìn)行逆向的文章,針對(duì)實(shí)際的網(wǎng)站應(yīng)用此工具,讓大家加深對(duì)該工具的理解和認(rèn)識(shí)。點(diǎn)擊閱讀原文,即可可以前往項(xiàng)目git地址。
jsrpc是指在瀏覽器開(kāi)啟一個(gè)ws和go服務(wù)連接,以調(diào)用http接口的形式來(lái)通信,瀏覽器端收到調(diào)用通信執(zhí)行原先設(shè)置好的js代碼??梢杂糜趈s逆向調(diào)用加密函數(shù)直接返回結(jié)果,也可以用來(lái)直接獲取數(shù)據(jù)。日后用在爬蟲(chóng)中,可以事半功倍。