Skip to content

Commit

Permalink
add saveconfig
Browse files Browse the repository at this point in the history
  • Loading branch information
Thehepta committed Aug 24, 2024
1 parent b899e23 commit 55180c6
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 126 deletions.
17 changes: 0 additions & 17 deletions Manager/src/main/cpp/check.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,24 +112,7 @@ Java_hepta_rxposed_manager_util_CheckTool_chekc_1GetArtmethodNative_1init(JNIEnv
return false;
}
}
extern "C"
JNIEXPORT jboolean JNICALL
Java_hepta_rxposed_manager_util_CheckTool_chekc_1android_1os_1Process_1getUidForName(JNIEnv *env,
jobject thiz) {
//如果rxposed已经激活了,那么这个检测应该是失败的
jclass Process_cls = env->FindClass("android/os/Process");
jmethodID javamethod = env->GetStaticMethodID(Process_cls,"getUidForName", "(Ljava/lang/String;)I");

uintptr_t getUidForName = reinterpret_cast<uintptr_t>(linkerResolveElfInternalSymbol("libandroid_runtime.so","_Z32android_os_Process_getUidForNameP7_JNIEnvP8_jobjectP8_jstring"));
// LOGE("getUidForName = %lx",getUidForName);

uintptr_t native_get_addr = getJmethod_JniFunction(env,Process_cls,javamethod);

if(getUidForName == native_get_addr){
return true;
}
return false;
}
extern "C"
JNIEXPORT jboolean JNICALL
Java_hepta_rxposed_manager_util_CheckTool_ELFresolveSymbol(JNIEnv *env, jobject thiz) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package hepta.rxposed.manager.fragment

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
Expand All @@ -34,9 +33,11 @@ import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import hepta.rxposed.manager.R
import hepta.rxposed.manager.RxposedApp
import hepta.rxposed.manager.util.Consts
import hepta.rxposed.manager.util.InjectConfig
import hepta.rxposed.manager.util.LogFileHelper
import hepta.rxposed.manager.util.MmkvManager
import hepta.rxposed.manager.widget.DialogUtil


/**
Expand Down Expand Up @@ -71,31 +72,10 @@ class SettingsFragment : Fragment() {
when(menuItem.itemId){
R.id.set_save->{

val initinject_type = view?.findViewById<Spinner>(R.id.sp_initInject)
if(initinject_type?.selectedItemId?.toInt() == 0){
MmkvManager.putInjectConfigBoolean("injectInit", true)
}else{
MmkvManager.putInjectConfigBoolean("injectInit", false)
}

val inject_type = view?.findViewById<Spinner>(R.id.inject_type)
if(inject_type?.selectedItemId?.toInt() == InjectConfig.HIED_MAPS){
MmkvManager.putInjectConfigInt("injectType", InjectConfig.HIED_MAPS)
ic.updateConfigSave()
parentFragmentManager.popBackStack()
}else{
MmkvManager.putInjectConfigInt("injectType", InjectConfig.MOUNT_TMP)

val mountPath = view?.findViewById<EditText>(R.id.et_mount_path)
if(mountPath?.text.toString().isEmpty()){
Toast.makeText(requireContext(), "mountWorkDir is not null", Toast.LENGTH_LONG).show()

}else{
MmkvManager.putInjectConfigString("mountWorkDir", mountPath?.text.toString())
ic.updateConfigSave()
parentFragmentManager.popBackStack()
}
}
DialogUtil.DidalogSimple(requireContext(),R.string.savdConfig, {
savd_config()
})

}
}
return false
Expand All @@ -105,6 +85,35 @@ class SettingsFragment : Fragment() {

}

private fun savd_config() {
val initinjectType = view?.findViewById<Spinner>(R.id.sp_initInject)
if(initinjectType?.selectedItemId?.toInt() == 0){
MmkvManager.putInjectConfigBoolean("injectInit", true)
}else{
MmkvManager.putInjectConfigBoolean("injectInit", false)
}

val injectType = view?.findViewById<Spinner>(R.id.inject_type)
if(injectType?.selectedItemId?.toInt() == Consts.HIDE_MAPS){
MmkvManager.putInjectConfigInt("injectType", Consts.HIDE_MAPS)
ic.updateConfigSave()
parentFragmentManager.popBackStack()
}else{
MmkvManager.putInjectConfigInt("injectType", Consts.MOUNT_TMP)

val mountPath = view?.findViewById<EditText>(R.id.et_mount_path)
if(mountPath?.text.toString().isEmpty()){
Toast.makeText(requireContext(), "mountWorkDir is not null", Toast.LENGTH_LONG).show()

}else{
MmkvManager.putInjectConfigString("mountWorkDir", mountPath?.text.toString())
ic.updateConfigSave()
parentFragmentManager.popBackStack()
}
}
}


private fun init_ui() {
val ll_mount = view?.findViewById<LinearLayout>(R.id.ll_mount)
val inject_type = view?.findViewById<Spinner>(R.id.inject_type)
Expand All @@ -116,15 +125,15 @@ class SettingsFragment : Fragment() {
val injectArg = view?.findViewById<EditText>(R.id.et_inject_arg)
remarks?.setText(ic.config_name)
suPath?.setText(ic.su_path)
injectArg?.setText(InjectConfig.InjectArg)
injectArg?.setText(Consts.InjectArg)

if (ic.injectType == InjectConfig.HIED_MAPS){
inject_type?.setSelection(InjectConfig.HIED_MAPS)
if (ic.injectType == Consts.HIDE_MAPS){
inject_type?.setSelection(Consts.HIDE_MAPS)
ll_mount?.visibility = View.GONE
libPath?.setText( ic.arm32_InjectSo)
lib64Path?.setText( ic.arm32_InjectSo)
}else{
inject_type?.setSelection(InjectConfig.MOUNT_TMP)
inject_type?.setSelection(Consts.MOUNT_TMP)
mountPath?.setText(ic.mountWorkDir)
ll_mount?.visibility = View.VISIBLE
libPath?.setText( ic.arm32_InjectSo)
Expand All @@ -141,7 +150,7 @@ class SettingsFragment : Fragment() {
inject_type?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
// 获取选择的项
if(position == InjectConfig.HIED_MAPS){
if(position == Consts.HIDE_MAPS){
ll_mount?.visibility = View.GONE
}else{
mountPath?.setText(ic.mountWorkDir)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,6 @@ public ItemBean Found_getConstructorsMethod(String className, String Method, Cla

public native boolean chekc_GetArtmethodNative_init();


public native boolean chekc_android_os_Process_getUidForName();

public native boolean ELFresolveSymbol();

public void addCheckItem(ArrayList<ItemBean> itemBeans) {
Expand Down
40 changes: 35 additions & 5 deletions Manager/src/main/java/hepta/rxposed/manager/util/Consts.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,49 @@
package hepta.rxposed.manager.util;

import hepta.rxposed.manager.BuildConfig;
import hepta.rxposed.manager.RxposedApp;

public class Consts {

public static final int START_FRAGMENT_MODULE = 1 ;
public static final int START_FRAGMENT_FRAMEWORK = 2 ;

public static final int MODULE_TYPE_XPOSED = 1 ;
public static final int MODULE_TYPE_RXPOSED = 2 ;
public static final int MODULE_TYPE_DEPEND = 3;
public static final int MODULE_TYPE_APP = 4;


// -------------------------------------------
//注入参数
public static String InjectArg;
//修改selinux策略工具路径
public static String policy_tool_path;
//要修改的selinux策略
public static String policy_te_path;
//注入工具的路径,app目录下,没必要移动到别的路径中
public static String arm64_InjectTool ;
public static String arm32_InjectTool;
// 执行挂载脚本
public static String mntSh32_tool_path;
public static String mntSh64_tool_path;
public static String shell_script_path;

//原始so路径,不会删除,用作初始化和修改后备份 (app files目录下)
public static String appfiles_arm64_InjectSo ;
public static String appfiles_arm32_InjectSo;




public final static String SO_NAME = "lib"+ BuildConfig.Rxposed_Inject_So+".so";
public final static String HOST_PROVIDER_NAME = BuildConfig.APPLICATION_ID+".Provider";
public final static String ASSETS_MNT_SH64_TOOL = "assets/arm64_mntSh";
public final static String ASSETS_MNT_SH32_TOOL = "assets/armv7_mntSh";
public final static String ASSETS_SHELL_SCRIPT = "assets/Inject.sh";
public final static String ASSETS_POLICY_TOOL = "assets/magiskpolicy";
public final static String ASSETS_POLICY_TE = "assets/rxposed.te";
public final static String ASSETS_ARM_64_INJECT_TOOL = "assets/arm64_generalInjectTool";
public final static String ASSETS_ARM_32_INJECT_TOOL = "assets/armv7_generalInjectTool";

public static final int MOUNT_TMP = 1;
public static final int HIDE_MAPS = 2;
public static final int HIDE_MAPS = 0;


public static final String INJECT_FRAGMENT_ARGE = "injectProcess";
Expand Down
75 changes: 22 additions & 53 deletions Manager/src/main/java/hepta/rxposed/manager/util/InjectConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,60 +19,40 @@
public class InjectConfig {
public String config_name;
public String su_path;

public String arm64_InjectSo ;
public String arm32_InjectSo;
public String mountWorkDir;
//是否隐藏注入到zygote中的so的 maps(隐藏是不需要本地路径的)
public int injectType;
//注入1号进程init,开启server注入功能,开发中
public boolean injectInit;
// =========================
//注入参数
public static String InjectArg;
//修改selinux策略工具路径
public static String policy_tool_path;
//要修改的selinux策略
public static String policy_te_path;
//注入工具的路径,app目录下,没必要移动到别的路径中
public static String arm64_InjectTool ;
public static String arm32_InjectTool;
// 自定一个的mount工具
public static String mntSh32_tool_path;
public static String mntSh64_tool_path;
public static String shell_script_path;


//原始so路径,不会删除,用作初始化和修改后备份 (app files目录下)
public static String appfiles_arm64_InjectSo ;
public static String appfiles_arm32_InjectSo;

InjectConfig(){
Context context = RxposedApp.getRxposedContext();
int App_Uid = context.getApplicationInfo().uid;
InjectArg = App_Uid+":"+BuildConfig.APPLICATION_ID+":"+ HOST_PROVIDER_NAME;;
Consts.InjectArg = App_Uid+":"+BuildConfig.APPLICATION_ID+":"+ Consts.HOST_PROVIDER_NAME;;

String AppFilePath = context.getFilesDir().getAbsolutePath()+ File.separator;
unziplib(context.getApplicationInfo().sourceDir,AppFilePath);
policy_tool_path = AppFilePath+InjectConfig.ASSETS_POLICY_TOOL;
policy_te_path = AppFilePath+InjectConfig.ASSETS_POLICY_TE;
mntSh32_tool_path = AppFilePath+InjectConfig.ASSETS_MNT_SH32_TOOL;
mntSh64_tool_path = AppFilePath+InjectConfig.ASSETS_MNT_SH64_TOOL;
shell_script_path = AppFilePath+InjectConfig.ASSETS_SHELL_SCRIPT;
Consts.policy_tool_path = AppFilePath+Consts.ASSETS_POLICY_TOOL;
Consts.policy_te_path = AppFilePath+Consts.ASSETS_POLICY_TE;
Consts.mntSh32_tool_path = AppFilePath+Consts.ASSETS_MNT_SH32_TOOL;
Consts.mntSh64_tool_path = AppFilePath+Consts.ASSETS_MNT_SH64_TOOL;
Consts.shell_script_path = AppFilePath+Consts.ASSETS_SHELL_SCRIPT;

arm64_InjectTool = AppFilePath+InjectConfig.ASSETS_ARM_64_INJECT_TOOL;
arm32_InjectTool = AppFilePath+InjectConfig.ASSETS_ARM_32_INJECT_TOOL;
Consts.arm64_InjectTool = AppFilePath+Consts.ASSETS_ARM_64_INJECT_TOOL;
Consts.arm32_InjectTool = AppFilePath+Consts.ASSETS_ARM_32_INJECT_TOOL;

appfiles_arm64_InjectSo = AppFilePath+"lib/arm64-v8a/"+InjectConfig.SO_NAME;
appfiles_arm32_InjectSo = AppFilePath+"lib/armeabi-v7a/"+InjectConfig.SO_NAME;
Consts.appfiles_arm64_InjectSo = AppFilePath+"lib/arm64-v8a/"+Consts.SO_NAME;
Consts.appfiles_arm32_InjectSo = AppFilePath+"lib/armeabi-v7a/"+Consts.SO_NAME;

try {
Runtime.getRuntime().exec("chmod +x "+InjectConfig.arm64_InjectTool);
Runtime.getRuntime().exec("chmod +x "+InjectConfig.arm32_InjectTool);
Runtime.getRuntime().exec("chmod +x "+InjectConfig.policy_tool_path);
Runtime.getRuntime().exec("chmod +x "+InjectConfig.mntSh32_tool_path);
Runtime.getRuntime().exec("chmod +x "+InjectConfig.mntSh64_tool_path);
Runtime.getRuntime().exec("chmod +x "+InjectConfig.ASSETS_SHELL_SCRIPT);
Runtime.getRuntime().exec("chmod +x "+Consts.arm64_InjectTool);
Runtime.getRuntime().exec("chmod +x "+Consts.arm32_InjectTool);
Runtime.getRuntime().exec("chmod +x "+Consts.policy_tool_path);
Runtime.getRuntime().exec("chmod +x "+Consts.mntSh32_tool_path);
Runtime.getRuntime().exec("chmod +x "+Consts.mntSh64_tool_path);
Runtime.getRuntime().exec("chmod +x "+Consts.ASSETS_SHELL_SCRIPT);

} catch (IOException e) {
throw new RuntimeException(e);
Expand All @@ -86,15 +66,15 @@ public void updateConfigSave() {

this.config_name = MmkvManager.INSTANCE.getInjectConfigString("config_name","default");
this.su_path = MmkvManager.INSTANCE.getInjectConfigString("supath","su");
this.injectType = MmkvManager.INSTANCE.getInjectConfigInt("injectType",HIED_MAPS);
this.injectType = MmkvManager.INSTANCE.getInjectConfigInt("injectType",Consts.HIDE_MAPS);
this.injectInit = MmkvManager.INSTANCE.getInjectConfigBoolean("injectInit",false);
this.mountWorkDir = MmkvManager.INSTANCE.getInjectConfigString("mountWorkDir","/apex/com.android.i18nrxp");
if(injectType == HIED_MAPS){
this.arm32_InjectSo = InjectConfig.appfiles_arm32_InjectSo;
this.arm64_InjectSo = InjectConfig.appfiles_arm64_InjectSo;
if(injectType == Consts.HIDE_MAPS){
this.arm32_InjectSo = Consts.appfiles_arm32_InjectSo;
this.arm64_InjectSo = Consts.appfiles_arm64_InjectSo;
}else {
this.arm32_InjectSo = mountWorkDir+"/lib/"+InjectConfig.SO_NAME;
this.arm64_InjectSo = mountWorkDir+"/lib64/"+InjectConfig.SO_NAME;
this.arm32_InjectSo = mountWorkDir+"/lib/"+Consts.SO_NAME;
this.arm64_InjectSo = mountWorkDir+"/lib64/"+Consts.SO_NAME;
}

}
Expand Down Expand Up @@ -142,17 +122,6 @@ public static void unziplib(String zippath,String resourcepath){
e.printStackTrace();
}
}
public final static int HIED_MAPS = 0;
public final static int MOUNT_TMP = 1;
public final static String SO_NAME = "lib"+BuildConfig.Rxposed_Inject_So+".so";
public final static String HOST_PROVIDER_NAME = BuildConfig.APPLICATION_ID+".Provider";
public final static String ASSETS_MNT_SH64_TOOL = "assets/arm64_mntSh";
public final static String ASSETS_MNT_SH32_TOOL = "assets/armv7_mntSh";
public final static String ASSETS_SHELL_SCRIPT = "assets/Inject.sh";
public final static String ASSETS_POLICY_TOOL = "assets/magiskpolicy";
public final static String ASSETS_POLICY_TE = "assets/rxposed.te";
public final static String ASSETS_ARM_64_INJECT_TOOL = "assets/arm64_generalInjectTool";
public final static String ASSETS_ARM_32_INJECT_TOOL = "assets/armv7_generalInjectTool";

public static InjectConfig instance = null;

Expand Down
Loading

0 comments on commit 55180c6

Please sign in to comment.