Skip to content

Commit

Permalink
remove baidu input's contact suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
5ec1cff committed Dec 22, 2024
1 parent f6da7f9 commit 78c2e6f
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
80 changes: 80 additions & 0 deletions app/src/main/java/five/ec1cff/myinjector/BaiduIMEHandler.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package five.ec1cff.myinjector

import android.util.Log
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XC_MethodReplacement
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
import org.luckypray.dexkit.DexKitBridge
import java.io.File

class BaiduIMEHandler : IXposedHookLoadPackage {
companion object {
private const val TAG = "MyInjector-BaiduIMEHandler"
}

private lateinit var lpparam: XC_LoadPackage.LoadPackageParam
private var cacheFile: File? = null
private var showMethodName = ""
private var showMethodClass = ""

override fun handleLoadPackage(param: XC_LoadPackage.LoadPackageParam) {
lpparam = param
doFind()
doHook()
}

private fun doHook() {
XposedBridge.hookAllMethods(
XposedHelpers.findClass(
showMethodClass, lpparam.classLoader
), showMethodName, XC_MethodReplacement.DO_NOTHING
)
}

private fun doFind() {
val f = File(lpparam.appInfo.dataDir, "dexkit.tmp")
cacheFile = f
if (f.isFile) {
try {
val lines = f.inputStream().use { f.readLines() }
val apkPath = lines[0]
if (apkPath == lpparam.appInfo.sourceDir) {
showMethodClass = lines[1]
showMethodName = lines[2]
Log.d(TAG, "prepare: use cached result")
return
} else {
Log.d(TAG, "prepare: need invalidate cache!")
f.delete()
}
} catch (t: Throwable) {
Log.e(TAG, "prepare: failed to read", t)
f.delete()
}
}
Log.d(TAG, "prepare: start deobf")
System.loadLibrary("dexkit")
val bridge = DexKitBridge.create(lpparam.classLoader, true)
val showMethod = bridge.findMethod {
matcher {
declaredClass {
usingStrings("android.permission.READ_CONTACTS", "layout_inflater")
}
addInvoke {
name = "getWindowToken"
declaredClass = "android.view.View"
}
}
}.single()
Log.d(TAG, "prepare: found method: $showMethod")
showMethodClass = showMethod.className
showMethodName = showMethod.methodName
f.bufferedWriter().use {
it.write("${lpparam.appInfo.sourceDir}\n")
it.write("$showMethodClass\n")
it.write("$showMethodName\n")
}
}
}
1 change: 1 addition & 0 deletions app/src/main/java/five/ec1cff/myinjector/Entry.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class Entry : IXposedHookLoadPackage, IXposedHookZygoteInit {
"com.tencent.mobileqq" -> QQXposedHandler()
"com.zhihu.android" -> ZhihuXposedHandler()
"com.android.chrome", "com.kiwibrowser.browser" -> ChromeHandler()
"com.baidu.input" -> BaiduIMEHandler()
else -> return
}
handler.handleLoadPackage(lpparam)
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@
<item>com.zhihu.android</item>
<item>com.android.chrome</item>
<item>com.kiwibrowser.browser</item>
<item>com.baidu.input</item>
</string-array>
</resources>

0 comments on commit 78c2e6f

Please sign in to comment.