在逆向的時候,碰上有些復雜的js代碼,邏輯弄得人有點混;
因此本帖用來記錄一些棘手的代碼,方便自己記憶,也讓大家拓展認識~
----前言
內容:
function(e, t, n) {try {1 == (e = "{" == e[0] ? JSON.parse(e) : JSON.parse(webInstace.shell(e))).Status || 200 == e.Code ? r(e.Data) : 200 == e.code ? r(e.data) : a(e.Msg)} catch (e) {a(e)}
解析:
總:
? ? 這段 JavaScript 代碼是一個復雜的三元運算符和比較操作的組合。這段代碼主要用于確定如何處理結果對象 e,看是直接作為 JSON 解析,是通過某個 webInstance.shell 函數調用得到解析,以及如何處理成功與否后的調用。
步驟:
1.首先,判斷變量 e 的第一個字符是否是 {:
-
如果 e[0] === "{" 條件為 true,則假定 e 是一個 JSON 字符串,所以嘗試 JSON.parse(e) 來解析它。
-
如果不滿足 e[0] === "{"(即 e 的首字母不是 {),則調用 webInstance.shell(e) 方法,隨后對返回的結果嘗試 JSON.parse。
計算結束后,無論 e 由哪種方式解析,結果會重新賦值給變量 e。
2.接下來的比較操作是在嘗試歸類 e 是否標識了成功的狀態。為此進行了多個等價性比較:
- 首先比較 e.Status 是否等于 1。如果等于,這說明操作是成功的,然后調用函數 r(e.Data) 并傳入 e.Data。
- 如果第一個條件不成立(e.Status 不等于 1),則檢查 e.Code 是否等于 200。如果等于 200,也被認為是成功的,同樣調用函數 r(e.Data)。
- 如果 e.Code 不等于 200,則還會檢查 e.code (注意這里的 code 是小寫)是否等于 200。如此相等,則調用函數 r(e.data) (這里 e.data 是小寫)。
3.如果所有上述都為 false,即 e 的 Status 和 Code(或 code,注意大小寫)都不符合成功的條件,則調用函數 a(e.Msg) 并傳入 e.Msg,它通常代表某種錯誤或狀態消息。
綜上所述,這段代碼的目的是處理一個動態響應體 e。它首先嘗試解析 e, 然后根據 Status 或 Code (或 code) 字段的值來判斷操作是否成功,并根據這些判斷結果調用相應的函數