1. 程式人生 > >Chrome-逆向分析JS-1分析google網站翻譯器原文存放位置

Chrome-逆向分析JS-1分析google網站翻譯器原文存放位置

劇透:就是使用了一下Chrome DevTools的Memory功能,通過已知的JS變數的值查詢JS記憶體中變數的引用 # 一:不分析一下現有的網頁翻譯方法麼? 總所周知,(As is well known to us all,)谷歌的網頁翻譯很強大,根據我的使用經驗谷歌有五個途徑進行網頁翻譯: 1. 使用Chrome的《翻譯此頁》功能:這是唯一沒有被牆的方法直接就能用,但無法顯示原文 2. 使用google翻譯的網頁翻譯:這個方法可以顯示原文(並且原文直接加到了dom裡)並且處理起來方便,但這種方法不好呼叫且複雜的頁面會亂掉(因為翻譯時是將頁面下載到google後臺翻譯,然後由google後臺將頁面返回) 3. 《本次使用的方法》使用google網站翻譯器:這個方法可以顯示原文並且呼叫方便,但原文在JS深處(後面會寫) 4. 使用譯者翻譯工具:網頁放到這裡翻譯後完全是亂的,但願以後能好用 5. 使用付費的google翻譯:暫時沒有試過,不知道能不能處理複雜的網頁標籤巢狀 經過挺長時間的分析我最後選擇了《使用google網站翻譯器》進行翻譯,現在要解決的就是獲取到原文 # 二:不分析一下使用google網站翻譯器翻譯後的網頁的原文可能存放的位置麼? 好長的標題。。 可能存在的位置: 1. DOM樹中?:F12->Elements->Ctrl+F->輸入原文查詢。 沒有找到,不在DOM樹中儲存。 1. 本地儲存中?:F12->Application->檢視Local Storage等。 沒有找到,不在本地儲存中儲存。 1. 伺服器上?:雖然一像就不可能,但還是看了一下,F12->Network->滑鼠移到文字上看看顯示原文是有網路請求沒。 沒有網路請求,不在伺服器上。 1. iframe中?:沒有。。 1. 檔案上?:你是在逗我? 1. JavaScript記憶體中?:沒的跑,一定在這裡了。(這個雖然是最有可能的,但因為我之前就嘗試找過浪費好久也沒找到,所以這回我先排除了其他可能,確定在JS記憶體中再進行專攻) # 三:不想法找到JS記憶體中的變數麼? 一開始我是嘗試使用Source逆向《element\_main.js》,但《element_main.js》過於複雜最後決定換方法。 然後我決定遞迴遍歷window物件 ``` function TraversalObject(obj) { for (var i in obj) { if (typeof (obj[i]) == "object") { console.log('===recursion===',i) TraversalObject(obj[i]); //遞迴遍歷 } else { console.log(i) } } } TraversalObject(window); ``` 然後到frames死迴圈了(貌似這種無限的遞迴引用有很多) 那麼,有一款可以查詢JS記憶體中的變數的的器麼? 當然有!!!Chrome DevTools的Memory就可以輕鬆查詢到JS記憶體中的變數!!! # 四:不使用Chrome DevTools的Memory來查詢JS記憶體中的變數麼? 1. 翻譯後建立快照 ![翻譯後建立快照](https://note.youdao.com/yws/api/personal/file/5FE321FCA9194DB3A230142F4144BD7A?method=download&shareKey=eb7a1b4f76fcfb6e33a47c4525e433e6) 2. Ctrl+F在快照中查詢字串,將找到的該值的引用按距離GC根的距離升序排列(該值的引用為`window.closure_lm_452827.a.focus[0].Hd.o[9].l[0]`) ![image](https://note.youdao.com/yws/api/personal/file/11558711666341ADB26C8606749D5B1B?method=download&shareKey=1fc113469534c5bd65c855691d0f0941) 3. 原文的引用為`window.closure_lm_452827.a.focus[0].Hd.o`這個陣列 ![image](https://note.youdao.com/yws/api/personal/file/54D332E924EE481A8247CE95307A3FC3?method=download&shareKey=782e0c4f042208b454415eae4275f651) 4. 進一步測試使用`window.closure_lm_《數字》.a.focus[0].Hd.ia.c`這個陣列可以獲取到原文,譯文,原文對應的譯文的DOM。使用這個陣列就可以達到我儲存網站翻譯結果的需求了。可喜可賀!可喜可賀! ![image](https://note.youdao.com/yws/api/personal/file/D381EA24FA4248B4AB2E17470A8DCA39?method=download&shareKey=8935de64e7820d744fe81966ef30a4f9) # 五:不看看花絮麼? Source除錯過程: 1. 檢視DOM發現上面沒掛事件 1. Global Listeners檢視blur和focus,發現《element_main.js》中註冊了這個事件 1. 使用{}美化《element_main.js》 1. 進行偷稅的除錯 通過Source除錯《element_main.js》時我發現她的執行的過程是: 1. 滑鼠移動到翻譯後的文字上執行一堆程式碼後將這句話高亮(這句話包含的font標籤依次高亮) 2. popup中的文字替換成原文 3. 顯示popup