成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

某網(wǎng)站高度加密混淆的javascript的分析

newsning / 1546人閱讀

摘要:前言對(duì)某網(wǎng)站加密混淆后的代碼也算分析了一段時(shí)間了,雖然還沒(méi)搞出來(lái),但多少有些心得,這里記錄一下。因此,應(yīng)該將局部變量也替換成唯一且更有意義的名字,比如函數(shù)名變量索引因此,正確的方法是基于編譯原理進(jìn)行語(yǔ)法級(jí)別的替換。

前言

對(duì)某網(wǎng)站加密混淆后的javascript代碼也算分析了一段時(shí)間了,雖然還沒(méi)搞出來(lái),但多少有些心得,這里記錄一下。

工具和資料

QQ群 - Javascript高級(jí)爬蟲(chóng) - 作者自建群,歡迎加入!

awesome-java-crawler - 我收集的爬蟲(chóng)相關(guān)工具和資料

中國(guó)商標(biāo)網(wǎng)加密接口 - 僅作演示

前一篇文章 - 記錄了之前嘗試的一些初步研究成果

java-curl - java HTTP庫(kù),可用來(lái)替換chrome網(wǎng)絡(luò)后端,更方便控制底層行為,如緩存、代理、監(jiān)控、修改請(qǐng)求和應(yīng)答等

cdp4j - java版的Chrome Devtools Protocol實(shí)現(xiàn),用于控制Chrome瀏覽器。最大的特點(diǎn)就是沒(méi)有“特點(diǎn)”,你懂的……

beautifier.io - js代碼在線(xiàn)格式化

estree - ECMAScript抽象語(yǔ)法樹(shù)(AST)業(yè)界標(biāo)準(zhǔn)

ECMAScript262語(yǔ)言規(guī)范 - 幫助理解estree

acornjs - ECMAScript編譯器前端,將js源碼解析成estree格式的AST

astring - ECMAScript代碼生成器,將AST重新還原成js源碼

nashorn - java8以上自帶的javascript解釋器,性能接近原生node

java中調(diào)用npm模塊 - 我的工作語(yǔ)言是java和kotlin,使用此方案調(diào)用js原生庫(kù)

商標(biāo)局網(wǎng)站分析 - 類(lèi)似的加密,神箭手云的大佬寫(xiě)的

裁判文書(shū)網(wǎng)分析 - 另一篇類(lèi)似網(wǎng)站分析

很早的一篇分析文 - 看特征是這種加密的早期版本

分析過(guò)程 獲取javascript代碼

加密的核心代碼只有一小部分是直接寫(xiě)在網(wǎng)頁(yè)的
處理前:一團(tuán)亂麻,完全不知所云

處理后:雖然還很費(fèi)勁,起碼看得出來(lái)這是在掛各種事件監(jiān)聽(tīng)器。另外,看看人家監(jiān)聽(tīng)多少種事件啊……

代碼分析

上面步驟完成后,這代碼至少勉強(qiáng)能看了,別放松,后面還有無(wú)數(shù)的坑……
還原前的代碼只能是讓人一臉懵逼,還原后的代碼則足以讓人咬牙切齒啊,多大仇啊,滿(mǎn)滿(mǎn)登登5000行全是正面硬懟的……
這里記錄一部分已經(jīng)發(fā)現(xiàn)的反破解手法吧。

不斷主動(dòng)中斷干擾調(diào)試,并檢測(cè)是否有動(dòng)態(tài)分析行為
    var eI_v1 = window["eval"]("(function() {var a = new Date(); debugger; return new Date() - a > 100;}())");
    _$n1 = _$n1 || eI_v1;
    //這個(gè)在上篇文章分析了,在這找到調(diào)用來(lái)源了。注意,在可讀性還原之前這貨長(zhǎng)這樣:
    var _$pW = _$u9[_$mz()](_$oi());
    _$n1 = _$n1 || _$pW;
js代碼動(dòng)態(tài)混淆

上一篇文章已經(jīng)說(shuō)過(guò)了,每次刷新js代碼都會(huì)完全變化,包括全局/局部變量名、函數(shù)排列順序等

設(shè)斷點(diǎn)會(huì)被干擾,且代碼無(wú)法重復(fù)執(zhí)行對(duì)于調(diào)試意味著什么?

檢查關(guān)鍵函數(shù)是否被注入替換
    function __RW_checkNative(rh_p0, rh_p1) { // 函數(shù)名我手動(dòng)改的
      try {
        var rh_v2 = Function["prototype"]["toString"]["apply"](rh_p0);
        var rh_v3 = new RegExp("{s*[native code]s*}");
        if (typeof rh_p0 !== "function" || !rh_v3["test"](rh_v2) || rh_p1 != undefined && rh_p0 !== rh_p1) __GL_undefined_$sy = true;
      } catch (_$r0) {}
    }

會(huì)用這個(gè)函數(shù)檢測(cè)eval, Function, setTimeout, setInterval幾個(gè)系統(tǒng)函數(shù)是不是被注入了

知道這塊邏輯,就可以用一些手段騙過(guò)去,不知道的話(huà)……

檢測(cè)當(dāng)前窗口是否隱藏狀態(tài)
document["addEventListener"]("visibilitychange", _$r0);

會(huì)監(jiān)控當(dāng)前窗口是否在最上方,如果多開(kāi)瀏覽器并行爬取……

檢測(cè)Selenium, WebDriver, PhantomJS等
      var rm_v5 = "_Selenium_IDE_Recorder,_selenium,callSelenium"
        , rm_v6 = "__driver_evaluate,__webdriver_evaluate,__selenium_evaluate,__fxdriver_evaluate,__driver_unwrapped,__webdriver_unwrapped,__selenium_unwrapped,__fxdriver_unwrapped,__webdriver_script_func,__webdriver_script_fn"
        , rm_v7 = ["selenium", "webdriver", "driver"];
        if (_$un(window, "callPhantom,_phantom")) { ... }

看到這里想必就知道會(huì)發(fā)生些什么了……

Hook住AJAX
  var ec_v4 = window["XMLHttpRequest"];
  if (ec_v4) {
    var ec_v5 = ec_v4["prototype"];
    if (ec_v5) {
      __GL_f_open = ec_v5["open"];
      __GL_f_send = ec_v5["send"];
      ec_v5["open"] = function () {
        _$t5();
        arguments[1] = _$pK(arguments[1]);
        return __GL_f_open["apply"](this, arguments);
      };
    } else { ... }
  }

會(huì)自動(dòng)在ajax請(qǐng)求后添加一個(gè)加密參數(shù)MmEwMD,參數(shù)值中可能包括鼠標(biāo)軌跡等信息

檢查navigator是否是偽造的
  var hi_v14 = window["navigator"];
  for (hi_v11 in hi_v14) {
    try {
      hi_v13 = hi_v14["hasOwnProperty"](hi_v11);
    } catch (_$r0) {
      hi_v13 = false;
    }
  }

如果你注入的navigator對(duì)象是用{...}創(chuàng)建的水貨版本,那就露餡了……

檢查瀏覽器特征

這塊代碼很長(zhǎng)很復(fù)雜,還沒(méi)分析完,現(xiàn)在能看出來(lái)的包括:
navigator.languages - 在headless chrome中是沒(méi)有這個(gè)字段的
navigator.plugins - 無(wú)頭和有頭的chrome返回的插件列表不一樣

WebGL能力檢查

有一大段代碼是在canvas上用webgl繪圖,沒(méi)搞過(guò)webgl,現(xiàn)在還不明白,但肯定也是檢查瀏覽器特征手段之一

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100461.html

相關(guān)文章

  • 網(wǎng)站高度加密混淆javascript分析

    摘要:前言對(duì)某網(wǎng)站加密混淆后的代碼也算分析了一段時(shí)間了,雖然還沒(méi)搞出來(lái),但多少有些心得,這里記錄一下。因此,應(yīng)該將局部變量也替換成唯一且更有意義的名字,比如函數(shù)名變量索引因此,正確的方法是基于編譯原理進(jìn)行語(yǔ)法級(jí)別的替換。 showImg(https://segmentfault.com/img/remote/1460000018765904); 前言 對(duì)某網(wǎng)站加密混淆后的javascript...

    godiscoder 評(píng)論0 收藏0
  • 數(shù)加密流程與原理簡(jiǎn)析

    摘要:前言啃了這么長(zhǎng)時(shí)間,基本上已經(jīng)把某數(shù)的套路摸了個(gè)八九不離十,不愧是中國(guó)反爬界的集大成者,感覺(jué)收獲滿(mǎn)滿(mǎn),這里就簡(jiǎn)單記錄一下分析成果。注意某數(shù)在不同的網(wǎng)站上有不同的版本,其流程也略有不同,這里的流程不一定適用于其它網(wǎng)站。 showImg(https://segmentfault.com/img/remote/1460000018765904); 前言 啃了這么長(zhǎng)時(shí)間,基本上已經(jīng)把某數(shù)的套路...

    dkzwm 評(píng)論0 收藏0
  • 數(shù)加密流程與原理簡(jiǎn)析

    摘要:前言啃了這么長(zhǎng)時(shí)間,基本上已經(jīng)把某數(shù)的套路摸了個(gè)八九不離十,不愧是中國(guó)反爬界的集大成者,感覺(jué)收獲滿(mǎn)滿(mǎn),這里就簡(jiǎn)單記錄一下分析成果。注意某數(shù)在不同的網(wǎng)站上有不同的版本,其流程也略有不同,這里的流程不一定適用于其它網(wǎng)站。 showImg(https://segmentfault.com/img/remote/1460000018765904); 前言 啃了這么長(zhǎng)時(shí)間,基本上已經(jīng)把某數(shù)的套路...

    msup 評(píng)論0 收藏0
  • 在線(xiàn)視頻常見(jiàn)加密方式及安全性透析

    摘要:協(xié)議由來(lái)已久,是公司推出的視頻播放協(xié)議,穩(wěn)定性和安全性較更好,應(yīng)用廣泛。但是加密算法過(guò)于簡(jiǎn)單,通過(guò)解密,即可實(shí)現(xiàn)本地觀看??梢钥吹揭曨l采用了的加密算法。目前尚無(wú)解密方案出現(xiàn),安全級(jí)別極高。 信息化時(shí)代,多媒體的應(yīng)用日漸成為人們生活中不可或缺的部分,無(wú)論是獲取最新資訊還是教育學(xué)習(xí),視頻都是直觀高效的媒介之一。 基于互聯(lián)網(wǎng)的快速傳播,眾多培訓(xùn)機(jī)構(gòu)也逐漸將線(xiàn)下原創(chuàng)版權(quán)課程遷移到在線(xiàn)平臺(tái)中,一...

    kohoh_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<