美文网首页
Hook打造集中式登录框架

Hook打造集中式登录框架

作者: 代码界的泥石流 | 来源:发表于2020-05-07 10:39 被阅读0次
    • 除了Hook技术,也可用ARouter(更推荐)技术。
    • Hook技术又称钩子函数。

      • 它是处理消息的程序段,通过系统调用,把它挂入系统。
      • 在系统没有调用函数之前,钩子程序就先捕捉该消息,那么钩子函数就先获得控制权。
      • 这时钩子函数可以加工处理(改变)该函数的执法行为
      • 还可以强制结束消息的传递
    • Hook实现途径:

      • 找到Hook点----->找到Hook方法(执行前的代码)------->startActivity(系统,执行后代码)

    Hook技术:

    • JAVA层:反射,对象一定是静态, 才可以还原系统对象。
    • NDK层::略

    开发思想:

    • 举例:灰太狼想吃懒洋洋,首先灰太狼必须伪装自己成羊,才可以接近懒洋洋、当擒获了羊之后、在把自己的羊皮摘掉恢复成狼
    • 调用startctivity、伪装Intent。
    阅读源码:

    ActivityManager.getService() .startActivity == Singleton.Create() -==IActivityManager.startActivity
    所以我们要通过反射

    APP是一个事件性驱动 类似不断执行的Main函数 代码封装在 ActivityThread类中(main方法),里面封装着消息泵,通过handler发送消息,handler里封装着编码为100就是startActivity。我们通过钩子函数伪装就可以为所欲为 HooK点是mh(Handler)

    //进程不死 此处looper就一直运转
    public static void main(String[] args) {
            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain");
            SamplingProfilerIntegration.start();
    
            // CloseGuard defaults to true and can be quite spammy.  We
            // disable it here, but selectively enable it later (via
            // StrictMode) on debug builds, but using DropBox, not logs.
            CloseGuard.setEnabled(false);
    
            Environment.initForCurrentUser();
    
            // Set the reporter for event logging in libcore
            EventLogger.setReporter(new EventLoggingReporter());
    
            // Make sure TrustedCertificateStore looks in the right place for CA certificates
            final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
            TrustedCertificateStore.setDefaultUserDirectory(configDir);
    
            Process.setArgV0("<pre-initialized>");
    
            Looper.prepareMainLooper();
    
            ActivityThread thread = new ActivityThread();
            thread.attach(false);
    
            if (sMainThreadHandler == null) {
                sMainThreadHandler = thread.getHandler();
            }
    
            if (false) {
                Looper.myLooper().setMessageLogging(new
                        LogPrinter(Log.DEBUG, "ActivityThread"));
            }
    
            // End of event ActivityThreadMain.
            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
            Looper.loop();
    
            throw new RuntimeException("Main thread loop unexpectedly exited");
        }
    
    

    startActivty,就是handler发送一个100的消息,进行接下的操作,我们只需要让Handler设置接口,

     public void handleMessage(Message msg) {
                if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));
                switch (msg.what) {
                    case LAUNCH_ACTIVITY: {
                        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityStart");
                        final ActivityClientRecord r = (ActivityClientRecord) msg.obj;
    
                        r.packageInfo = getPackageInfoNoCheck(
                                r.activityInfo.applicationInfo, r.compatInfo);
                        handleLaunchActivity(r, null, "LAUNCH_ACTIVITY");
                        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                    } break;
    }
    

    相关文章

      网友评论

          本文标题:Hook打造集中式登录框架

          本文链接:https://www.haomeiwen.com/subject/ebmkhftx.html