11package monkeylord .XServer ;
22
3+ import android .annotation .SuppressLint ;
34import android .content .pm .ApplicationInfo ;
45import android .content .res .XModuleResources ;
56import android .os .Build ;
7+ import android .os .MemoryFile ;
68import android .os .Process ;
9+ import android .system .Os ;
10+ import android .system .OsConstants ;
11+ import android .util .Log ;
712
13+ import java .io .BufferedInputStream ;
14+ import java .io .BufferedReader ;
15+ import java .io .File ;
16+ import java .io .FileDescriptor ;
17+ import java .io .FileInputStream ;
18+ import java .io .FileOutputStream ;
19+ import java .io .IOException ;
20+ import java .io .InputStreamReader ;
21+ import java .io .OutputStream ;
22+ import java .io .RandomAccessFile ;
23+ import java .lang .reflect .Constructor ;
24+ import java .lang .reflect .InvocationTargetException ;
825import java .lang .reflect .Member ;
26+ import java .lang .reflect .Method ;
927import java .util .HashMap ;
1028
1129import de .robv .android .xposed .IXposedHookLoadPackage ;
2038import monkeylord .XServer .handler .Hook .XServer_MethodHook ;
2139import monkeylord .XServer .handler .Hook .XServer_Param ;
2240import monkeylord .XServer .handler .HookHandler ;
41+ import monkeylord .XServer .handler .MemoryHandler ;
2342
2443/*
2544 某些Android 4版本,需要修改依赖库的配置才能兼容,否则会报pre-verifed错误。
@@ -38,12 +57,32 @@ public class XposedEntry implements IXposedHookLoadPackage, IXposedHookZygoteIni
3857 Boolean isFirstApplication ;
3958 String processName ;
4059 ApplicationInfo appInfo ;
60+ long smAddr ;
4161
4262 @ Override
4363 public void initZygote (StartupParam startupParam ) throws Throwable {
4464 res = XModuleResources .createInstance (startupParam .modulePath , null );
4565 sPrefs = new XSharedPreferences (this .getClass ().getPackage ().getName ().toLowerCase (), "XServer" );
4666 sPrefs .makeWorldReadable ();
67+ try {
68+ String targetApp = sPrefs .getString ("targetApp" , "MadMode" );
69+ File file = new File ("/dev/zero" );
70+ RandomAccessFile randomAccessFile = new RandomAccessFile (file ,"rw" );
71+ FileDescriptor fd = randomAccessFile .getFD ();
72+ if (!fd .valid ())smAddr = 0 ;
73+ else {
74+ try {
75+ smAddr = MemoryHandler .mmap (0 , 1024 , OsConstants .PROT_READ | OsConstants .PROT_WRITE , OsConstants .MAP_SHARED , fd , 0 );
76+ MemoryHandler .writeMemory (smAddr ,(targetApp +"\0 " ).getBytes ());
77+ }catch (InvocationTargetException e ){
78+ throw e .getTargetException ();
79+ }finally {
80+ randomAccessFile .close ();
81+ }
82+ }
83+ }catch (Exception e ){
84+ Log .e ("[XServer Experiment]" , e .getMessage ()+e .toString ());
85+ }
4786 }
4887
4988 @ Override
@@ -52,12 +91,14 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam)
5291 //告知界面模块已启动,同时解除Android N以上对MODE_WORLD_READABLE的限制
5392 if (loadPackageParam .packageName .equals ("monkeylord.xserver" )) {
5493 XposedHelpers .findAndHookMethod ("monkeylord.XServer.MainActivity" , loadPackageParam .classLoader , "isModuleActive" , XC_MethodReplacement .returnConstant (true ));
94+ XposedHelpers .findAndHookMethod ("monkeylord.XServer.MainActivity" , loadPackageParam .classLoader , "getSharedMem" , XC_MethodReplacement .returnConstant (smAddr ));
5595 if (Build .VERSION .SDK_INT >= 24 )XposedHelpers .findAndHookMethod ("android.app.ContextImpl" , loadPackageParam .classLoader , "checkMode" ,int .class , XC_MethodReplacement .returnConstant (null ));
5696 XposedBridge .log ("XServer handleLoadPackage: " + Build .VERSION .SDK_INT );
5797 }
5898 //获取目标包名
5999 sPrefs .reload ();
60100 String targetApp = sPrefs .getString ("targetApp" , "MadMode" );
101+ if (targetApp .equals ("MadMode" )&&smAddr !=0 )targetApp = new String (MemoryHandler .readMemory (smAddr ,1024 )).split ("\0 " )[0 ];
61102 //if(targetApp.equals("MadMode"))XposedBridge.log("XServer Cannot Figure Out TargetApp...Hooking Everyone Now!!");
62103 if (!targetApp .equals ("MadMode" )&&!loadPackageParam .packageName .equals (targetApp )) return ;
63104 gatherInfo (loadPackageParam );
0 commit comments