首先想到使用adb shell dumpsys activity top
程式碼
獲取朋友圈介面的Activity,com.tencent.mm/.plugin.sns.ui.SnsUploadUI
,直接反編譯微信得到原始碼
然後發現程式碼實在太多,很難瀏覽,然後想到DDMS的軌跡追蹤功能,我們錄取一個發表朋友圈的軌跡,查詢OnClick方法,果然找到一個OnMenuItemClick
直接搜尋這個方法
無奈程式碼還是太多,感覺很難繼續分析下去
這裡考慮到使用DDMS的Dump View Hierarchy for UlAutomator功能,首先微信進入傳送朋友圈的介面,然後dump
最後找到「測試測試」對應的id,然後通過搜尋findViewById,得到了關鍵的程式碼
分析znn的呼叫情況
沒有發現函數的呼叫,但是發現了一個賦值,那就搜尋一下this.desc
果然找到一個賦值,但是當我們開始分析zno的a方法時,發現他只是一個介面
既然如此,那就只能考慮搜尋zno類的賦值了,全域性搜尋一下,檢視每一個賦值操作
終於找到關鍵的類QA
QA這裡先對傳入的引數進行了判斷,然後返回對應的類範例
this.ziU=0時:
this.ziU=14時:
這裡應該已經可以猜測這個引數和朋友圈傳送的方式有關係了,繼續分析ziU的值
使用frida指令碼列印一下各種情況的this.ziU引數
import frida
import sys
jscode ='''
Java.perform(function(){
var SnsUploadUI = Java.use('com.tencent.mm.plugin.sns.ui.SnsUploadUI');
var ao = SnsUploadUI.ao.overload("android.os.Bundle");//過載
ao.implementation = function(bundle)
{
var ret = ao.call(this, bundle);//呼叫方法獲取返回值
send("sns type = " + this.ziU.value);//列印ziU的值
return ret;
}
}
);
'''
def message(message,data):
if message["type"] == 'send':
print("[*] {0}".format(message["payload"]))
else:
print(message)
process = frida.get_remote_device().attach("com.tencent.mm")
script = process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()
最後總結如下:
9:純文字動態
,0:純圖片、圖片+文字動態
,14:純視訊、視訊+文字動態
由於微信不支援視訊加圖片,所以沒有進行這個測試