Skip to content

Commit

Permalink
添加 小爱同学 浏览器修改功能
Browse files Browse the repository at this point in the history
  • Loading branch information
Haocen2004 committed Jan 17, 2022
1 parent 6c7bdd9 commit c1941ea
Show file tree
Hide file tree
Showing 9 changed files with 125 additions and 39 deletions.
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ android {
applicationId "xyz.hellocraft.portalhook"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
versionCode 3
// versionCode Integer.parseInt(System.currentTimeMillis().toString()[7..12])
versionName "1.1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down
17 changes: 11 additions & 6 deletions app/src/main/java/xyz/hellocraft/portalhook/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import xyz.hellocraft.portalhook.databinding.ActivityMainBinding;
Expand All @@ -14,22 +13,28 @@
public class MainActivity extends AppCompatActivity {

private ActivityMainBinding binding;
private boolean haveRoot;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
haveRoot = RootKit.haveRoot();
binding.button.setOnClickListener(view -> {
if (haveRoot) {
// haveRoot = RootKit.haveRoot();
binding.btnPortal.setOnClickListener(view -> {
if (RootKit.haveRoot()) {
RootKit.execRootCmdSilent("am force-stop com.miui.contentextension");
} else {
Toast.makeText(this, "未获取Root权限!", Toast.LENGTH_SHORT).show();
}
});
binding.button2.setOnClickListener(view -> {
binding.btnAssist.setOnClickListener(view -> {
if (RootKit.haveRoot()) {
RootKit.execRootCmdSilent("am force-stop com.miui.voiceassist");
} else {
Toast.makeText(this, "未获取Root权限!", Toast.LENGTH_SHORT).show();
}
});
binding.btnGithub.setOnClickListener(view -> {
Uri uri = Uri.parse("https://github.com/Haocen2004/PortalHook");
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Expand Down
31 changes: 8 additions & 23 deletions app/src/main/java/xyz/hellocraft/portalhook/MainHook.java
Original file line number Diff line number Diff line change
@@ -1,33 +1,18 @@
package xyz.hellocraft.portalhook;

import android.content.Intent;
import android.net.Uri;

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 xyz.hellocraft.portalhook.hook.PortalHook;
import xyz.hellocraft.portalhook.hook.XiaoAiHook;

public class MainHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if(!lpparam.packageName.equals("com.miui.contentextension")) return;
XposedBridge.log("Hook到传送门进程!");
final Class<?> clazz = XposedHelpers.findClass("com.miui.contentextension.utils.AppsUtils", lpparam.classLoader);
//getClassInfo(clazz);

XposedHelpers.findAndHookMethod(clazz, "getIntentWithBrowser", String.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("Hook到方法,目标URL:"+param.args[0].toString());
Uri uri = Uri.parse(param.args[0].toString());
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.setData(uri);
return intent;
}
});

switch (lpparam.packageName) {
case "com.miui.contentextension":
new PortalHook(lpparam);
case "com.miui.voiceassist":
new XiaoAiHook(lpparam);
}
}
}
30 changes: 30 additions & 0 deletions app/src/main/java/xyz/hellocraft/portalhook/hook/PortalHook.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package xyz.hellocraft.portalhook.hook;

import android.content.Intent;
import android.net.Uri;

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;

public class PortalHook {

public PortalHook(XC_LoadPackage.LoadPackageParam lpparam) {
XposedBridge.log("Hook到传送门进程!");
final Class<?> clazz = XposedHelpers.findClass("com.miui.contentextension.utils.AppsUtils", lpparam.classLoader);
//getClassInfo(clazz);

XposedHelpers.findAndHookMethod(clazz, "getIntentWithBrowser", String.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("Hook到方法,目标URL:"+param.args[0].toString());
Uri uri = Uri.parse(param.args[0].toString());
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.setData(uri);
return intent;
}
});
}
}
43 changes: 43 additions & 0 deletions app/src/main/java/xyz/hellocraft/portalhook/hook/XiaoAiHook.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package xyz.hellocraft.portalhook.hook;

import android.content.Intent;
import android.net.Uri;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class XiaoAiHook {
public XiaoAiHook(XC_LoadPackage.LoadPackageParam lpparam) {

XposedBridge.log("Hook到小爱同学进程!");
try {
Class<?> clazz = XposedHelpers.findClass("e.D.L.pa.Wa", lpparam.classLoader);
XposedHelpers.findAndHookMethod(clazz,"startActivityWithIntent", Intent.class, boolean.class,int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
XposedBridge.log("0)Hook到Activity启动,开始判断");
Intent intent = (Intent) param.args[0];
XposedBridge.log(intent.toString());
try {
if (intent.getPackage().equals("com.android.browser")) {
XposedBridge.log("发现浏览器目标 Intent!");
XposedBridge.log("目标URL:" + intent.getDataString());
Uri uri = Uri.parse(intent.getDataString());
Intent newIntent = new Intent();
newIntent.setAction("android.intent.action.VIEW");
newIntent.setData(uri);
param.args[0] = newIntent;
}
} catch (Exception e) {
XposedBridge.log(e);
}
}
});
} catch (Exception e) {
XposedBridge.log(e);
}
}
}
34 changes: 27 additions & 7 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,49 @@
tools:context=".MainActivity">

<Button
android:id="@+id/button"
android:id="@+id/btnPortal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重启传送门(Root)"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3" />

<Button
android:id="@+id/btnAssist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="重启小爱同学(ROOT)"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnPortal" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="52dp"
android:text="测试传送门版本:2.5.17\n测试URL:https://www.google.com/\n需要自己修改默认浏览器"
android:layout_marginTop="40dp"
android:text="测试传送门版本:2.5.17\n测试小爱同学版本:5.116.6\n测试URL:https://www.google.com/\n需要自己修改默认浏览器"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.473"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
app:layout_constraintTop_toBottomOf="@+id/btnAssist" />

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="Powered By Hao_cen"
app:layout_constraintBottom_toTopOf="@+id/btnGithub"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

<Button
android:id="@+id/button2"
android:id="@+id/btnGithub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/array.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
<resources>
<string-array name="xposed_scope">
<item>com.miui.contentextension</item>
<item>com.miui.voiceassist</item>
</string-array>
</resources>

0 comments on commit c1941ea

Please sign in to comment.