瑞數4代逆向學習

小马哥逆向發表於2024-05-09

宣告

本文章中所有內容僅供學習交流使用,不用於其他任何目的,不提供完整程式碼,抓包內容、敏感網址、資料介面等均已做脫敏處理,嚴禁用於商業用途和非法用途,否則由此產生的一切後果均與作者無關!
本文章未經許可禁止轉載,禁止任何修改後二次傳播,擅自使用本文講解的技術而導致的任何意外,作者均不負責,若有侵權,請在公眾號【小馬哥逆向】聯絡作者立即刪除!

瑞數介紹

image

瑞數動態安全 Botgate(機器人防火牆)以“動態安全”技術為核心,透過動態封裝、動態驗證、動態混淆、動態令牌等技術對伺服器網頁底層程式碼持續動態變換,增加伺服器行為的“不可預測性”,實現了從使用者端到伺服器端的全方位“主動防護”,為各類 Web、HTML5 提供強大的安全保護。

瑞數 Botgate 多用於政企、金融、運營商行業,曾一度被視為反爬天花板,隨著近年來逆向大佬越來越多,相關的逆向文章也層出不窮,真正到了人均瑞數的時代了,這裡也感謝諸如 Nanda、懶神等逆向大佬,揭開了瑞數神秘的面紗,總結的經驗讓後來人少走了不少彎路。

過瑞數的方法基本上有以下幾種:自動化工具(要隱藏特徵值)、RPC 遠端呼叫、JS 逆向(硬扣程式碼和補環境),本文介紹的是 JS 逆向硬扣程式碼,儘可能多的介紹各種細節。

目標網站

aHR0cDovL3d3dy5mYW5nZGkuY29tLmNuL25ld19ob3VzZS9uZXdfaG91c2VfZGV0YWlsLmh0bWw=

網站分析

https://alidocs.oss-cn-zhangjiakou.aliyuncs.com/res/J9LnWNk86QN8lvDe/img/5e9e3567-86ba-4e43-ba28-6d1766dcb647.jpeg

image

可見首先這是個 202 請求,其次set-cookie: FSSBBIl1UgzbN7N80S。

image

其次他自返回了一個cookie: FSSBBIl1UgzbN7N80S

並且的話還生成了一個 js c.FxJzG50F.dfe1675.js。

第二次

image

第二次需要攜帶第一次的請求 已經一個新的 cookie 才能返回正常的頁面。如下圖

image

逆向流程分析

首先過掉無限 debugger(過不過其實無所謂,後面的分析其實這個基本上沒影響),直接右鍵 Never pause here 永不在此處斷下即可

image

定位 Cookie,首選 Hook 來的最快,透過 Fiddler 等抓包工具、油猴指令碼、瀏覽器外掛等方式注入以下 Hook 程式碼:

# hook cookie
(function() {
    // 嚴謹模式 檢查所有錯誤
    'use strict';
    // document 為要hook的物件 這裡是hook的cookie
 var cookieTemp = "";
    Object.defineProperty(document, 'cookie', {
  // hook set方法也就是賦值的方法 
  set: function(val) {
    // 這樣就可以快速給下面這個程式碼行下斷點
    // 從而快速定位設定cookie的程式碼
    console.log('Hook捕獲到cookie設定->', val);
                debugger;
    cookieTemp = val;
    return val;
  },
  // hook get 方法也就是取值的方法 
  get: function()
  {
   return cookieTemp;
  }
    });
})();

Hook 發現會有生成兩次 Cookie 的情況,斷下之後往上跟棧,可以看到組裝 Cookie 的程式碼,類似如下結構:

其實 我覺得補環境和正常分析區別很大。
我們不需要了解瑞數中的真假 cookie。
只需要定義出一個函式,去接受和返回 docuement.cookie即可。
在正式分析以前。我們需要固定一份靜態程式碼。因為瑞數的網站返回的內容每次都是動態的,不方便我們除錯。後續我們把這份靜態程式碼放到 node 裡就能慢慢的去補了。

image

這裡補環境的話需要四部分內容,如上圖 紅圈中圈中的三個。以及生成的虛擬機器程式碼。這四部分程式碼可以生成FSSBBIl1UgzbN7N80T

這裡簡單說明一下他們的作用

  • meta 標籤中的內容:(即 content 中的內容)會在後續的 eval 中用得到

  • 外鏈的 js :c.FxJzG50F.dfe1675.js這部分程式碼。下面的那個自執行函式會解密這個 js 從而生成虛擬機器程式碼

  • 自執行函式:解密外鏈 js。生成虛擬機器程式碼。並且新增屬性

  • 生成的虛擬機器程式碼。生成新的 cookie

我們需要把這三段程式碼,放到一個檔案中

生成的虛擬機器檔案不需要,他會自己生成的。

分析程式碼,扣程式碼

由扣出的程式碼可見,主要執行步驟在最下邊的while 控制流,以及最後一個函式內部的多個控制流:

image

1、缺window,補個 window=global;
image

2、缺document,補個document={}
image

3、需要document.scripts,定位到瀏覽器程式碼,檢視長度需要是3,補個document.scripts = [1, 2, 3](暫時)
image

4、再執行程式碼,就大功告成了?不! 並沒有,我們在介面上斷住這行程式碼,發現直到最後都斷不住到這裡,所以感覺還是缺點是什麼。
我是透過在控制流斷點和webstorm斷點單步除錯找到的區別,是因為少了一個檔案
image

把這裡 程式碼拿出來 補進去,成功執行 列印 window.$_ts,202介面載入的 主要函式就出來了

image

ret=.call(*, **)

列印出來,就是瑞數的除錯邏輯程式碼(具體操作js基本知識)

結果驗證

如果整個流程沒問題,程式碼也扣得正確,攜帶正確的 Cookie 和正確的字尾,就能成功訪問:

image

image

相關文章