向活动注入上下文

时间:2014-02-10 22:52:52

标签: java android

我将静态代码分析与动态分析相结合。我基本上创建了一个新活动并将其设置为启动活动。在运行期间,应该调用现有活动中的各种方法。

我可以打电话给但是,来自外部的onCreate,对Activity的超级调用将失败(或调用SharedPreferences或其他有趣的类),因为Android在使用意图调用活动时执行一些初始化操作(例如设置上下文)。但我需要以某种方式从外部调用onCreateonPause等方法,同时为目标活动提供有效的上下文。

在我新创建的活动中,我有一个有效的上下文。我尝试通过调用ContextWrapper.attachBaseContext传递它,但由于缺少上下文,因此在Android中某处仍有NullPointerException。有没有办法以某种方式将其破解为工作状态?使用反射或其他黑客攻击是没有问题的,因为它仅用于分析目的。

非常感谢您的任何提示。我可以通过任何方式修改分析的应用程序,以实现这一目标。

但是:使用Intent是没有选择的,因为我无法控制调用哪些Activity方法,时间和频率。我知道android并没有直接调用这些方法,但它也不是常见的用例:);

1 个答案:

答案 0 :(得分:0)

我创建了一个hack,这似乎有所帮助(我可以在黑客活动中获得有效的上下文)。让我们看看我使用它有多远。         public static void hack(Activity hack,Activity main){        尝试{            Field mActivityInfo = getField(Activity.class,“mActivityInfo”);            mActivityInfo.set(hack,getClass(“android.content.pm.ActivityInfo”)。newInstance());            字段mFragments = getField(Activity.class,“mFragments”);            字段mContainer = getField(Activity.class,“mContainer”);            Field mApplication = getField(Activity.class,“mApplication”);            字段mWindow = getField(Activity.class,“mWindow”);            FragmentManagerImpl = getClass(“android.app.FragmentManagerImpl”);            FragmentManager manager =(FragmentManager)mFragments.get(hack);

       mApplication.set(hack, main.getApplication());
       mWindow.set(hack, main.getWindow());

       Class<?> FragmentContainer = getClass("android.app.FragmentContainer");
       Method attachActivity = getMethod(FragmentManagerImpl, "attachActivity", Activity.class, FragmentContainer, Fragment.class);
       attachActivity.invoke(manager, hack, mContainer.get(hack), null);


       Method attachBaseContext = getMethod(ContextWrapper.class, "attachBaseContext", Context.class);
       attachBaseContext.invoke(hack, new HackContext(main));
       System.out.println("Hack performed");
   } catch (Exception e) {
       e.printStackTrace();
       System.err.println("Hack failed :(");
   }

}

相关问题