1. 程式人生 > >Android"掛逼"修煉之行---解析公眾號文章訊息和連結文章訊息如何自動開啟原理

Android"掛逼"修煉之行---解析公眾號文章訊息和連結文章訊息如何自動開啟原理

一、輔助功能方案分析

關於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應用安全防護和逆向分析》

點選立即購買:京東  天貓

更多內容:點選這裡

關注微信公眾號,最新技術乾貨實時推送

掃一掃加小編微信
新增時請註明:“編碼美麗”非常感謝!