<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          絕了!搜狗輸入法這騷操作!

          共 2182字,需瀏覽 5分鐘

           ·

          2020-10-23 16:53

          點擊上方“逆鋒起筆”,公眾號回復(fù)?pdf
          領(lǐng)取大佬們推薦的學習資料

          前幾天在百度搜索的時候,一不小心誤點搜索候選詞,給我跑到搜狗搜索里面去了,索性花了點時間分析一下這其中的貓膩,不看不知道,一看嚇一跳。

          在瀏覽器中打開百度,使用搜狗輸入法輸入關(guān)鍵詞時將出現(xiàn)搜索候選詞列表:

          隨便點擊列表中的某一個選項后,頁面跳轉(zhuǎn)到了搜狗搜索的結(jié)果頁:

          測試實驗

          測試1:360搜索輸入框并沒有這個候選詞列表,如下圖:

          結(jié)論1:搜狗輸入法應(yīng)該是對當前打開的頁面有判斷,不是隨便哪個網(wǎng)頁下面的輸入框都會出現(xiàn)這個列表


          測試2:在百度頁面,除了主要的搜索框以外,其他入口也會出現(xiàn)這個搜索選項列表,下面是站點內(nèi)搜索輸入框的測試:

          結(jié)論2:搜狗輸入法沒有判斷當前輸入框目標是不是搜索框


          測試3:這一次不用域名,換用IP地址來訪問百度搜索。我的環(huán)境下ping www.baidu.com 解析的IP地址為:220.181.38.149,結(jié)果搜狗輸入法竟然沒有出現(xiàn)這個搜索選項列表:

          結(jié)論3:這個搜索選項列表的出現(xiàn)跟網(wǎng)頁當前的URL有關(guān)


          測試4:這一次來把瀏覽器的進程名字改一下,我這里選擇火狐瀏覽器,將firefox.exe改為firefox1.exe,這個搜索選項列表也沒有出現(xiàn):

          結(jié)論4:除了URL,對進程名字也有判斷,如果不是瀏覽器進程,也不會觸發(fā)


          最終結(jié)論:搜狗輸入法檢測到用戶打開瀏覽器訪問www.baidu.com域名進行搜索時,將彈出搜索選項列表,引導(dǎo)用戶點擊。

          技術(shù)分析

          如何實現(xiàn)瀏覽器進程篩選?

          第一個問題,搜狗輸入法怎么判斷當前是不是在瀏覽器進程中呢?總不能在微信聊天界面也給彈出搜索候選詞列表吧?

          搜狗輸入法核心模塊是一個叫SogouPY.ime的文件,這實際上是一個動態(tài)鏈接庫文件,這個文件會隨你切換輸入法時加載到對應(yīng)的進程中。使用IDA打開分析,發(fā)現(xiàn)這個模塊內(nèi)部有很多瀏覽器進程名字的字符串:

          你看,國內(nèi)外主流的和非主流的瀏覽器基本都被列為了目標。

          進一步分析發(fā)現(xiàn),上面這是一個字符串數(shù)組,找到了遍歷這個數(shù)組,挨個進行比較匹配的處理邏輯:

          當前頁面的URL獲取及判斷

          瀏覽器進程篩選出來了,還要篩選當前是不是在搜索引擎的頁面,接著往下看!

          針對不同瀏覽器使用不同的獲取方式,這里以firefox為例,搜狗輸入法使用了MSAA(Microsoft Active Accessibility)技術(shù)獲取到了當前頁面URL。

          調(diào)試發(fā)現(xiàn),如果修改獲取到的URL內(nèi)容,搜狗輸入法的搜索選項列表就無法展示出來。

          向上追溯可以找到根據(jù)不同瀏覽器進行不同的URL獲取方式分發(fā)入口:

          繼續(xù)追溯,獲取當前瀏覽器信息后,還要進行是否是搜索引擎域名的判斷:

          這個wcsstr函數(shù)就是在進行字符串比較了,調(diào)試得到wcsstr()的參數(shù)1:獲取到的頁面URL,參數(shù)2:搜索引擎域名。又是用一個數(shù)組在進行存儲:

          百度居然還有個小名,www1.baidu.com,有意思。

          我們來挨個試一下這個列表中的搜索引擎:

          www1.baidu.com:

          www.soso.com:

          這個就不用試了,現(xiàn)在是搜狗自家人。

          cn.bing.com:

          www.google.cn:

          so.sowang.com:

          www.chinaso.com:

          www.youdao.com:

          www.zhongsou.com:

          如何打開搜狗搜索頁面呢?

          當發(fā)現(xiàn)是在瀏覽器進程中訪問上面的搜索引擎域名后,就該跳轉(zhuǎn)到搜狗自己的搜索頁面了,那它是如何打開的呢?繼續(xù)往下看!

          打開firefox,使用調(diào)試器WinDbg 掛載到這個進程,執(zhí)行這個命令:bp shell32!ShellExecuteW,給函數(shù)ShellExecuteW下斷點。

          接著打開百度首頁,切換到搜狗中文輸入法,這樣使得SoGouPY.ime模塊加載到firefox的進程空間中。

          然后隨意輸入字符,出現(xiàn)搜狗搜索選項列表,隨便點擊一個,觸發(fā)斷點!來看一下參數(shù):

          可以看到:這里通過啟動當前瀏覽器(firefox.exe)打開了URL。根據(jù)堆棧返回地址,可以進一步往前分析。

          IDA反匯編太多,就不截圖了。總體來說,判斷當前瀏覽器是否是IE內(nèi)核,如果是,就通過獲取到瀏覽器IWebBrowser2接口指針,調(diào)用接口中的Navigate2方法來打開搜狗搜索頁面。如果不是IE內(nèi)核,直接調(diào)用ShellExecuteW打開URL。

          那如何判斷是不是IE內(nèi)核呢?

          可以看搜狗的做法:獲取當前瀏覽器類別,內(nèi)部通過進程名、當前焦點窗口的Class名(”Internet Explorer_Server”)綜合判斷:

          總結(jié)

          和實驗得到的結(jié)論一致。

          一圖勝千言,整個過程就是這個樣子的:

          關(guān)注公眾號 逆鋒起筆,回復(fù) pdf,下載你需要的各種學習資料。

          多說幾句

          事實上,搜狗干這事已經(jīng)有好些年了。幾年前,百度還把搜狗給告了,搜狗敗訴賠錢。不過,輸了是輸了,就是堅決不改


          每個 Python 程序員都讀過這 10 本書!
          Typora 完美結(jié)合 PicGo,寫作體驗更佳!
          滿 400-240 元,這幾本書限時骨折價,抓緊入手!


          贊+在看,小編感恩大家??

          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩特一级 | 日本高清视频一区二区三区 | 亚洲视频在线观看高清无码 | 超碰日韩在线 | 亚洲操屄视频 |