本文僅做研究使用.
研究的是乙個移動的**,12580惠生活
觀察抓包:
分2次請求,才得到了頁面:
加入不處理cookie,直接進行第二次請求:
這樣是獲取不到資料的.
原因:
第一次請求獲取了js**,生成fssbbil1ugzbn7n443t這個cookie.帶著這個cookie請求才是成功的,這也是今天要分析的.
目標:
由於第一次請求獲取js**的資料每次都是變化的,變數也是混淆的,因此要完美的破解的話,必須解決每次多變不一的混淆,因此我們的目標是這樣,每次獲取得到的js**,直接使用乙個eval來執行,偽**:
function
get_data
(jscode)
思路:按照以上的目標,分析還是要以單次獲取的js來分析:
首先來觀察下**:
基本上是無法閱讀的,細心看下:
string物件被替換了
window物件被替換了.
所以要檢視如何呼叫的話,在**裡面基本讀不出來了.
js 扒下來執行,發現
1.id=
"9dhefwqgprzgxep9hpaoag" 的content屬性是乙個關鍵的地方
2.window[
'$_ts'
];這個也是解密相關的引數,是固定的,也可以抓出來.
接著來到了下一層的eval:
呼叫的關係是這樣的:
eval.
call
(window,code)
源**是這樣的,但是我們在node中執行的時候就會出錯.
出錯的原因是:
_$da函式沒有定義
但是函式明顯有定義:
由於我們的目標是不打算替換任何的**和改變任何一處源**的內容,所以我們打算深入的研究一下這個問題:
舉例:在瀏覽器中,我們定義了乙個函式a和全域性變數b,使用window[『a』]和window[『b』]來進行呼叫,發現是可以呼叫成功的
node中:
這樣發現,函式a並沒有新增到全域性的global物件中.window[『a』]和window[『b』]均為undefined
這是乙個非常有意思的結果.在瀏覽器中,var 定義的全域性變數會加到全域性window屬性中去,函式也自動加到了全域性為window呼叫.但是在node中卻不會加到全域性.
這個也是我們使用eval執行出現報錯的原因.
解決辦法:
使用遍歷ast修改**,將全域性的var和**第一層函式新增到window物件上去:
全域性var
首層函式
這樣就不需要改變任何**內容就完美的解決了這個問題
剩下的所有分析都在第二層的eval中了.
有幾個難點:
2.canvas物件:
某數中不僅使用了2d的canvas畫圖也是用了webgl的3d畫圖,所以這一部分的模擬需要很認真.
3.檢測的瀏覽器物件需要一一模擬,當然按照我們追求完美的結果的話需要這樣
接下來python模擬請求:
後面還有乙個引數mmewmd會在接下來的日子裡分享思路.
方格取數 1
problem description 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括乙個整數n 和n n個非負數 n 20 ou...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 由於元素不能重複利用,所以使用j i 1,通過雙迴圈,...