一、定位到關鍵代碼
第一次嘗試
首先想到使用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:純視頻、視頻+文字動態
由于微信不支持視頻加圖片,所以沒有進行這個測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/153549.html
標籤:其他
