android黑科技系列——解析公眾號文章訊息和連結文章訊息自動開啟原理

來源:互聯網
上載者:User

標籤:設定   實現   分析   sdn   通訊   逆向分析   變數   query   代碼   

一、協助工具功能方案分析

關於WX的各種功能外掛程式已經非常普遍了,而現在的外掛程式都是依賴於Xposed架構進行的,所以個人覺得WX應該在這方便應對Xposed架構的使用防護,防止外掛程式滿天飛的現象,本文來介紹一個WX應用中接收到訊息如果是文章連結就自動開啟瀏覽的功能。這個功能可能有的人用的不是很多,但是本文秉著逆向技術學習點還是來分析這個技術!

關於文章連結訊息自動點開的邏輯,可能有的同學第一個思路就是:用協助工具功能來實現類比點擊,但是這裡有個問題需要解決,就是如何得到訊息內容。首先我們來看一下中發送文章訊息的類型大致有兩種:

一種是純連結樣式的,一種是公眾號圖文樣式;

第一、對於純連結樣式的訊息,用的控制項是TextView,但是沒有對這個TextView做點擊事件處理,而是對TextView中連結內容作了html格式化跳轉。所以我們用協助工具功能擷取到這個控制項,拿不到內容也無法類比點擊,因為這個控制項沒有點擊事件。

第二、對於圖文樣式的訊息,可以類比點擊,但是問題是怎麼判斷這個訊息是圖文樣式的呢?我們不能用控制項的類型來判斷的,因為WX應用中訊息列表中的控制項就那麼幾種,不是每個訊息的控制項類型都是唯一的。

二、Xposed方案分析

所以從上面分析之後,我們知道利用協助工具功能應該是無法實現這個功能了,那麼只能藉助Xposed架構了,這個架構可以攔截WX應用訊息內容,我們需要手動的擷取訊息內容,然後進行內容解析,得到文章連結。然後在Hook他自訂的WebView進行開啟即可。

關於WX應用中如何攔截訊息內容有很多方案,有的同學可能第一個想法就是攔截WX應用的訊息包,但是WX應用的訊息內容是經過加密處理,所以弄起來不叫麻煩了。但是我們之前講解了WX應用的訊息是儲存到本機資料庫的,不瞭解的同學可以看這篇文章:Android中如何擷取WX應用本地訊息和通訊錄資訊 ,在那篇文章中可以瞭解到WX應用將訊息是按照明文進行入庫的,所以我們如果能夠找到儲存資料的方法那就可以操作了,一般儲存資料用到的都是insert方法。

三、尋找Hook點

下面就來開始逆向分析,如何擷取這個插入資料庫訊息的地方,逆向操作過WX應用的同學應該知道本機資料庫名稱:EnMicroMsg.db,這個就是我們的入口,咋們依舊使用WX應用6.3.9版本進行研究,使用Jadx工具開啟WX應用,然後全域搜“EnMicroMsg.db”字串內容:


這裡有很多條記錄,通過過濾排查可以定位元據庫操作的地方,所謂過濾排查就是一個一個地方去看,發現不對勁就立馬停止進行下一個地方查看。所謂不對勁那隻能靠逆向經驗了。這裡沒有技巧可言了,咋們點進去進行查看訊息:


這裡看到一個資訊,就是擷取資料庫密碼的地方,說明這裡應該會開啟資料庫進行操作,繼續往下看:


這裡開始操作資料庫了,看到rawQuery這樣的查詢語句,我們直接點進去看:


這裡是調用了jVM的rawQuery方法,繼續點進去進行查看:


進入到這個類,這裡會發現包括了資料庫操作的封裝方法,看到了有一個插入方法,通過參數資訊可以發現最後一個參數是ContentValues類型的,這個有可能就是儲存資料的列表資訊了。所以到這裡我們可以猜想這個insert方法就是講聊天訊息儲存到本機資料庫的地方,那麼我們就直接進行Hook操作:


hook代碼非常簡單,不多說了,然後在攔截方法之後把參數資訊都列印一下,看看訊息的列表結構:


咋們安裝之後,重啟裝置生效,然後在WX應用中接受一條訊息,看日誌資訊:


看到了吧,上面的那個insert方法的第一個參數是表格名稱,第二個參數不知道,但是通過多次列印日誌可以看到只要是聊天資訊的話,都是msgId值,然後把ContentValues值列印了一下,發現了有一列content訊息內容,就是聊天資訊,所以我們需要對這一列進行操作了:


這裡簡單的對訊息內容作了判斷,如果發現是以http://開頭的就用WX應用的WebView開啟即可。如何開啟後面會介紹。

上面看到是訊息內容是純連結的,但是還有一種是圖文樣式的,訊息樣式又是怎麼樣的呢?我們依然查看列印結果:


這裡看到,還是message表格,也是content這一列,但是不同的是內容變了,訊息內容是一個xml格式的,把這段內容拷出來網上線上格式化一下:


看到格式化之後的xml內容中的url標籤內容就是文章的原始連結資訊了。所以對於這種圖文樣式的,我們還需要進行xml本地解析了,Android中對xml解析有很多種方式,這裡用Pull方式進行了:


這樣我們就得到了純文字連結樣式和圖文樣式兩種文章的原始連結了,下面還有最後一個問題就是如何用的WebView進行開啟這個連結呢?

四、擷取WX的頁面WebView對象

在上面步驟完成之後,就可以拿到文章的連結了,下面還需要用內建的WebView開啟頁面,我們先來擷取WX應用中頁面的類,這裡可以先開啟一個頁面,然後用adb shell dumpsys activity top命令查看:


這個類是WebViewUI,然後去Jadx中搜這個類即可:


進入之後,我們可以直接全域搜尋loadUrl這個欄位內容,因為這是載入頁面的入口:


搜到了這個,也可以看到這裡做了連結處理了,然後在搜尋全域變數aGy這個值怎麼得到的:


因為我們是想找到這個值被賦值的地方,所以搜尋內容可以是”aGY = “這樣搜尋結果就非常快了,也是個小技巧了:


在這裡可以看到,這個值是通過getIntent的rawUrl這個key來擷取到的。那這裡就好辦了,我們可以構造一個intent,然後得到WebViewUI這個class對象,把上面的原始連結設定到intent中即可:


這裡啟動intent的時候是需要一個activity的,所以我們還得hook一下首頁的Activity資訊:


首頁Activity類是LauncherUI,然後hook他的onResume方法,攔截之後就可以得到這個方法所屬的類對象了。

五、運行效果分析

有了這些之後,咋們就可以進行操作了,編譯模組,安裝重啟生效之後,我們類比發送一個純文字文章連結和圖文樣式文章連結,效果如下:

                 

到這裡我們就完成了,WX應用中攔截訊息實現文章連結的自動點開邏輯功能。

本文學到的逆向技巧:

1、學會快速尋找突破口,比如這裡擷取訊息內容的入口是資料庫名稱。

2、要敢於猜想,比如本文中猜想訊息儲存到資料庫中是明文,而且是用insert語句進行插入的。

關於WX應用如何防止現在滿天飛的外掛程式功能?個人覺得應該做到一些防止Xposed攔截的功能,這個網上其實已經有人在討論這個問題了,這個也是後面需要講解的內容,如何做到應用被Xposed攔截的防護功能。

對於使用者,個人覺得最好不要去嘗試安裝這些外掛程式,因為這些外掛程式都是非正規的開發人員弄出來的,有很大的安全隱患,而且這些外掛程式的使用前提是裝置需要root,但是一個裝置被root之後,安全係數直接下降到0了,有些使用者為了更好的玩耍,不顧安全風險安裝外掛程式,最後如果導致自己的一些利益損失就得不償失了!安裝任何應用一定要從正規渠道安裝。

嚴重聲明:本文的目的只有一個,通過一個案例來學習逆向知識邏輯,如果有人利用本文內容進行任何商業目的和非法牟利,帶來的任何法律責任將由操作者本人承擔,和本文作者沒有任何關係,所以還是由衷的希望大家秉著技術學習的目的閱讀此文,非常感謝!

五、總結

本文用WX應用自動點開文章訊息連結作為案例,分析了如何快速定位突破口,找到hook的地方,學會大膽的猜想,加上逆向經驗,可以快速的找到我們想要的地方。

android黑科技系列——解析公眾號文章訊息和連結文章訊息自動開啟原理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.