aHR0cHM6Ly9mZW5iaS5jb20vcGFnZS9ob21ljavascript
參數加密的邏輯分析
先抓包看看此次分析的參數【圖1-1】java
這個參數的值看着像Base64
,咱們不急着下結論,先搜索參數名看看。python
有讀者朋友糾結於搜索password = or password:
這樣須要搜索兩遍是否是浪費時間了,不如直接搜索password
來的方便快捷。web
鹹魚之因此這樣搜索是出於本身的習慣,定位加密位置的方法有不少你們有興趣能夠多嘗試不要侷限於搜索參數,例如:Js Hook,XHR 斷點等等,怎麼舒服怎麼來就好。微信
通過搜索參數名password:
在一個文件中定位到 3 處疑似加密的位置。【圖1-2】app
這裏有兩種方法判斷加密位置:編輯器
給全部搜索到的結果打上斷點,再次刷新看看進入到哪一個斷點當中函數
閱讀上下文,分析大概的代碼邏輯測試
咱們用第一種試試,打上斷點從新發起請求,能夠看到成功斷上了。【圖1-3】網站
這裏的this.password
是測試的密碼,咱們須要分析的就是這個this.encrypt
的邏輯是什麼樣的。
咱們進入到this.encrypt
這個函數中,發現有熟悉的 RSA 加密標誌this.publicKey
【圖1-4】
在文件中再搜索一次publicKey
,可以看到文件中已經聲明瞭這個變量【圖1-5】
繼續進入到函數內部查看邏輯,發現進入的就是加密邏輯的文件了。【圖1-6】
這一整個流程分析下來,能夠發現前面的傳參部分,在Python
調用中咱們徹底能夠跳過,只要給【圖1-6】中的Js加密邏輯傳入publicKey
與明文密碼
就能夠實現這個網站的密碼加密邏輯了,既然這麼簡單,咱們就動手試試。
參數加密的代碼實現
接上面的分析,咱們直接複製了【圖1-6】截圖所示的所有代碼。
接着在編輯器中加上一些咱們本身的邏輯相似這樣【圖2-1】。
注:前939行都是複製的 Js 文件代碼
試着運行一下,看看報錯。
運行的報錯提示,window is undefine
【圖2-2】,遇到這種狀況咱們能夠試試在代碼上加上window
的聲明。
var window = {}
再次運行看看,這裏再次提示{} is not a function
,【圖2-3】到這裏新手朋友有點慌了,不知道怎麼處理。
比較方便的處理方式是直接在(function(av) {
前加上!
,就是這麼簡單。
具體用法,這裏套用一下百度:
使用括號包裹定義函數體,解析器將會以函數表達式的方式去調用定義函數。也就是說,任何能將函數變成一個函數表達式的做法,均可以使解析器正確的調用定義函數。而 ! 就是其中一個,而 + - || 都有這樣的功能。
繼續調試,此次提示變成了navigator is not defined
【圖2-4】
有了上次的經驗,咱們在代碼里加入聲明navigator
。
var navigator = {}
再次運行就獲得加密後的結果咯~【圖2-5】
總結
此次的加密是比較簡單的 RSA 加密,使用文件中包含的公鑰對密碼的值進行加密,且Js代碼沒有進過混淆,適合新手練手增長手感。
本文分享自微信公衆號 - 鹹魚學Python(xianyuxuepython)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。