Skip to content

Commit 8ec6705

Browse files
HChenXSevtingeFan095
authored
新增:安全模式 (#506)
* 推送安全模式测试 * test * 是船新的安全模式! * 更改计数 * Update MainActivity.java * 新增 系统界面-锁屏-允许使用三方应用锁屏时使用人脸及指纹识别 * Update AllowThirdLockScreenUseFace.java * Update SystemUI.java * Update AllowThirdLockScreenUseFace.java * 同步 * test * 同步 * test * Update MultiActionSettings.java * 优化AlertDialog布局 * 安全模式线同步上游 * 更新Shell执行 * 同步上游 * 完善安全模式核心逻辑 * 完善安全模式核心逻辑 * update theme * 完善安全模式 * 同步上游 * 更新检查的作用域 --------- Co-authored-by: 绀漓丨Sevtinge <89193494+Sevtinge@users.noreply.github.com> Co-authored-by: MoralNorm <732388462@qq.com>
1 parent 898ecd6 commit 8ec6705

18 files changed

Lines changed: 896 additions & 47 deletions

app/src/main/AndroidManifest.xml

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,36 @@
6767
android:name=".ui.MainActivity"
6868
android:exported="true"
6969
android:screenOrientation="portrait"
70-
tools:ignore="DiscouragedApi,LockedOrientationActivity">
70+
tools:ignore="DiscouragedApi,LockedOrientationActivity"
71+
android:theme="@style/Theme.HyperCeiler.SystemBarBackgrounds">
7172
<intent-filter>
7273
<action android:name="android.intent.action.MAIN" />
7374
<category android:name="de.robv.android.xposed.category.MODULE_SETTINGS" />
7475
</intent-filter>
7576
</activity>
7677

78+
<activity
79+
android:name=".safe.CrashReportActivity"
80+
android:configChanges="keyboardHidden|orientation|screenSize"
81+
android:excludeFromRecents="true"
82+
android:exported="true"
83+
android:finishOnTaskLaunch="true"
84+
android:launchMode="singleTask"
85+
android:theme="@style/Theme.HyperCeiler.Translucent.NoActionBar">
86+
<intent-filter>
87+
<action android:name="android.intent.action.Crash" />
88+
<category android:name="android.intent.category.CrashDailog" />
89+
</intent-filter>
90+
</activity>
91+
<!--<activity
92+
android:name=".ui.MainActivity"
93+
android:exported="true">
94+
<intent-filter>
95+
<action android:name="android.intent.action.MAIN" />
96+
<category android:name="de.robv.android.xposed.category.MODULE_SETTINGS" />
97+
</intent-filter>
98+
</activity>-->
99+
77100
<activity-alias
78101
android:name=".ui.LauncherActivity"
79102
android:exported="true"
@@ -135,6 +158,15 @@
135158
<meta-data
136159
android:name="xposedscope"
137160
android:resource="@array/xposed_scope" />
161+
162+
<service
163+
android:name="com.sevtinge.hyperceiler.safe.CrashService"
164+
android:enabled="true"
165+
android:exported="true">
166+
<intent-filter>
167+
<action android:name="com.sevtinge.hyperceiler.crash.Service" />
168+
</intent-filter>
169+
</service>
138170
</application>
139171

140172
</manifest>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.sevtinge.hyperceiler.module.app;
22

33
import com.sevtinge.hyperceiler.module.base.BaseModule;
4+
import com.sevtinge.hyperceiler.module.hook.demo.CrashDemo;
45
import com.sevtinge.hyperceiler.module.hook.demo.ToastTest;
56

67
public class Demo extends BaseModule {
78
@Override
89
public void handleLoadPackage() {
910
initHook(new ToastTest(), true);
11+
initHook(new CrashDemo(), true);
1012
}
1113
}

app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseModule.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,32 @@
2222
import com.sevtinge.hyperceiler.XposedInit;
2323
import com.sevtinge.hyperceiler.module.base.dexkit.DexKit;
2424
import com.sevtinge.hyperceiler.module.base.dexkit.InitDexKit;
25+
import com.sevtinge.hyperceiler.safe.CrashData;
2526
import com.sevtinge.hyperceiler.utils.ContextUtils;
27+
import com.sevtinge.hyperceiler.utils.PropUtils;
2628
import com.sevtinge.hyperceiler.utils.api.ProjectApi;
2729
import com.sevtinge.hyperceiler.utils.log.XposedLogUtils;
2830
import com.sevtinge.hyperceiler.utils.prefs.PrefsMap;
2931

32+
import java.util.ArrayList;
33+
import java.util.Arrays;
34+
import java.util.HashMap;
35+
3036
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
3137

3238
public abstract class BaseModule implements IXposedHook {
3339

3440
public LoadPackageParam mLoadPackageParam = null;
3541
public String TAG = getClass().getSimpleName();
3642
public final PrefsMap<String, Object> mPrefsMap = XposedInit.mPrefsMap;
43+
private static HashMap<String, String> swappedMap = CrashData.swappedData();
3744

3845
public void init(LoadPackageParam lpparam) {
46+
if (swappedMap.isEmpty()) swappedMap = CrashData.swappedData();
47+
if (needIntercept(lpparam.packageName)) {
48+
XposedLogUtils.logI(TAG, "进入安全模式: " + lpparam.packageName);
49+
return;
50+
}
3951
EzXHelper.initHandleLoadPackage(lpparam);
4052
EzXHelper.setLogTag(TAG);
4153
EzXHelper.setToastTag(TAG);
@@ -73,6 +85,26 @@ public void init(LoadPackageParam lpparam) {
7385
}
7486
}
7587

88+
private boolean needIntercept(String pkg) {
89+
ArrayList<String> report = getReportCrashProp();
90+
for (String s : report) {
91+
String mPkg = swappedMap.get(s);
92+
if (mPkg != null) {
93+
return mPkg.equals(pkg);
94+
}
95+
}
96+
return false;
97+
}
98+
99+
private ArrayList<String> getReportCrashProp() {
100+
String data = PropUtils.getProp("persist.hyperceiler.crash.report", "");
101+
if (data.isEmpty()) {
102+
return new ArrayList<>();
103+
}
104+
String[] sp = data.split(",");
105+
return new ArrayList<>(Arrays.asList(sp));
106+
}
107+
76108
@Override
77109
public void initZygote() {
78110
}

app/src/main/java/com/sevtinge/hyperceiler/module/base/BaseXposedInit.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package com.sevtinge.hyperceiler.module.base;
2020

21+
import static com.sevtinge.hyperceiler.callback.ITAG.TAG;
2122
import static com.sevtinge.hyperceiler.utils.Helpers.getPackageVersionCode;
2223
import static com.sevtinge.hyperceiler.utils.Helpers.getPackageVersionName;
2324
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.getAndroidVersion;
@@ -26,6 +27,7 @@
2627
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;
2728
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreHyperOSVersion;
2829
import static com.sevtinge.hyperceiler.utils.log.LogManager.logLevelDesc;
30+
import static com.sevtinge.hyperceiler.utils.log.XposedLogUtils.logE;
2931
import static com.sevtinge.hyperceiler.utils.log.XposedLogUtils.logI;
3032

3133
import androidx.annotation.CallSuper;
@@ -82,8 +84,8 @@
8284
import com.sevtinge.hyperceiler.module.app.VoiceAssist;
8385
import com.sevtinge.hyperceiler.module.app.Weather;
8486
import com.sevtinge.hyperceiler.module.base.tool.ResourcesTool;
87+
import com.sevtinge.hyperceiler.safe.CrashHook;
8588
import com.sevtinge.hyperceiler.utils.api.ProjectApi;
86-
import com.sevtinge.hyperceiler.utils.log.AndroidLogUtils;
8789
import com.sevtinge.hyperceiler.utils.log.XposedLogUtils;
8890
import com.sevtinge.hyperceiler.utils.prefs.PrefsMap;
8991
import com.sevtinge.hyperceiler.utils.prefs.PrefsUtils;
@@ -190,7 +192,7 @@ public void setXSharedPrefs() {
190192
mPrefsMap.putAll(allPrefs);
191193
}
192194
} catch (Throwable t) {
193-
AndroidLogUtils.logD("setXSharedPrefs", t);
195+
XposedLogUtils.logE("setXSharedPrefs", t);
194196
}
195197
}
196198
}
@@ -208,12 +210,12 @@ public void init(LoadPackageParam lpparam) {
208210
mSystemFramework.init(lpparam);
209211
mVariousSystemApps.init(lpparam);
210212
}
211-
// try {
212-
// new CrashHook(lpparam);
213-
// logI(TAG.TAG, "Success Hook Crash");
214-
// } catch (Exception e) {
215-
// logE(TAG.TAG, "Hook Crash E: " + e);
216-
// }
213+
try {
214+
new CrashHook(lpparam);
215+
logI(TAG, "Success Hook Crash");
216+
} catch (Exception e) {
217+
logE(TAG, "Hook Crash E: " + e);
218+
}
217219
}
218220
case "com.android.systemui" -> {
219221
if (isSystemUIModuleEnable() && isMoreAndroidVersion(33)) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.sevtinge.hyperceiler.module.hook.demo;
2+
3+
import com.sevtinge.hyperceiler.module.base.BaseHook;
4+
5+
import de.robv.android.xposed.XposedHelpers;
6+
7+
public class CrashDemo extends BaseHook {
8+
@Override
9+
public void init() throws NoSuchMethodException {
10+
XposedHelpers.findAndHookMethod("com.hchen.demo.MainActivity", lpparam.classLoader,
11+
"crash", int.class, new MethodHook() {
12+
@Override
13+
protected void before(MethodHookParam param) throws Throwable {
14+
int o = (int) param.args[0];
15+
param.args[0] = 0;
16+
logE(TAG, "int: " + o);
17+
}
18+
}
19+
);
20+
}
21+
}

0 commit comments

Comments
 (0)