一、前言
上篇文章已經介紹瞭如何用Xposed實現調一個小功能的方法(Xposed快速入門例子(一)----- 拉黑好友)
那麼這個程式碼在什麼時機呼叫呢?我主要想到了以下兩個模式。
二、兩種呼叫模式
1.發廣播(主要用於測試)
具體思路就是往Xposed模組中註冊廣播,然後在其它app中傳送廣播過去。
那麼在什麼地方註冊廣播呢? 網上大佬們給的方法很多,但是很多都會出現重複接收的情況。
所以介紹一下我的思路。看以下程式碼
//注意:這是kotlin程式碼,kotlin中"=="相當於java中的"equals"
if (lpparam.processName=="com.tencent.mm"){
//在此處註冊廣播!
val intentFilter = IntentFilter().apply {
addAction("action_pull_black")
}
context.registerReceiver(myReceiver, intentFilter)
}
複製程式碼
可以看到註冊廣播的時候,我是用程式過濾的。因為微信的程式很多,所以不要用包名過濾。這樣保證不會收到重複的廣播!
/**
* 廣播接收器
* */
private val myReceiver = object :BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent) {
if (intent.action=="action_pull_black"){
val wxid = intent.getStringExtra("extra_wxid")
Handle.setBlack(wxid)
}
}
}
複製程式碼
通過廣播接收器,可以看到收到了一個wxid,直接調拉黑的方法就可以了。
上圖是我在app主頁,寫了一個EditText和一個Button。點拉黑就把廣播傳送了過去。看以下程式碼
btn_pull_black.setOnClickListener {
val wxid = et_wxid.text.toString()
if (wxid==""){
Toast.makeText(this, "wxid不能為空!", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
sendBroadcast(Intent().setAction("action_pull_black").apply {
putExtra("extra_wxid", wxid)
})
}複製程式碼
這樣,第一種模式就完成了!
2.hook到微信的方法之後,再調相應的Xposed程式碼
一般做Xposed模組的專案,主要用到的就是這種模式。
我們可以設想一個實際場景,如果好友說了一句罵人的話,我們就把他拉黑。
所以我們現在要做的就是hook到這個聊天內容和好友的wxid。
如何hook呢。我看大佬們的方法也是千奇百怪。
我覺得做實用的思路就是微信巫師所提供的------trace微信的資料庫。
這種方式的好處就是簡單明瞭,不用適配微信的版本。
以下是開啟微信的db檔案(db檔案是加密的,網上有很多解密的方法,請自行百度),通過分析找到了聊天記錄的表所在的地方。
我們只要hook插入資料庫的方法就可以了。
// Hook SQLiteDatabase to trace all the database operations.
@JvmStatic
fun traceDatabase() {
XposedHelpers.findAndHookMethod(
pkg.SQLiteDatabase, "insertWithOnConflict",
String::class.java, String::class.java, ContentValues::class.java, Int::class.java, object : XC_MethodHook() {
@Throws(Throwable::class)
override fun beforeHookedMethod(param: MethodHookParam) {
try {
val table = param.args[0] as String?
val values = param.args[2] as ContentValues?
val talker = values?.get("talker").toString()
if (table == "message") {
val content = values?.get("content").toString()
Log.e("Developer","hook到的---->content:$content\n" +
"talker--->$talker")
if (content == "滾") {
Handle.setBlack(talker)
}
}
} catch (e: Exception) {
}
}
})
}
複製程式碼
下面測試一下這個hook。我用我的微信給測試的微訊號發一個“你好啊”
下圖可以看到日誌已經列印到logcat裡了
所以這種方式也可以實時監控聊天記錄。
如果我給測試的微訊號發一個內容為“滾”的訊息,那麼測試的微訊號肯定就拉黑我了!
三、Xposed修改免重啟
修改Xposed程式碼的時候,每次都得重啟裝置,給測試工作帶來了不少麻煩。
微信巫師中有一套免重啟的方案,我拿來用了。文章最後會給出原始碼。
只要在原始碼的app主頁,點選【重啟微信】的按鈕,就可以了。
原始碼下載地址:github.com/syxxjujing/…
下一篇文章計劃分享利用群發助手,按照標籤群發訊息。
歡迎加QQ群:536941874 群裡會實時分享技巧。包括一些簡單實用的原始碼。我有時間也會回答大家的問題