先推几篇VA原理
1. http://rk700.github.io/2017/03/15/virtualapp-basic/
2. https://blog.csdn.net/ganyao939543405/article/details/76146760?ref=myread

VA项目地址:

https://github.com/asLody/VirtualApp

IOUniformer.cpp hook so


void inlineHookSymbol(void *sohandle, const char *symbol, void *replace, void **result) {void *address = dlsym(sohandle, symbol);if (address) {MSHookFunction(address, replace, result);}
}void *(*org_runtime_invoke)(void *a_method, void *a_obj, void **a_params, int **a_exc) = NULL;void *new_runtime_invoke(void *a_method, void *a_obj, void **a_params, int **a_exc) {
//    register_Class_From_Image(a_method);
//    runInMonoInvokeRuntimeHooker(a_method, a_obj, a_params);return org_runtime_invoke(a_method, a_obj, a_params, a_exc);
}void onSoLoaded(const char *name, void *handle) {ALOGE("%s %s %d", __FUNCTION__, name, handle);if (strstr(name, "libil2cpp.so"))inlineHookSymbol(handle, "il2cpp_runtime_invoke", (void *) &new_runtime_invoke,(void **) &org_runtime_invoke);
}int findSymbol(const char *name, const char *libn,unsigned long *addr) {int ret = find_name(getpid(), name, libn, addr);return ret;
}int hook_dlopen_rom24(void *symbol, const char *rom) {//hw mate8_8.0int ret = findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfoPKv", "linker",(unsigned long *) &symbol);if (ret == 0) {MSHookFunction(symbol, (void *) new_do_dlopen_V24,(void **) &orig_do_dlopen_V24);}ALOGE("%s %s %d", __FUNCTION__, rom, ret);return ret;
}void hook_dlopen(int api_level, const char *rom) {void *symbol = NULL;if (api_level > 23) {if (findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfoPv", "linker",(unsigned long *) &symbol) == 0) {MSHookFunction(symbol, (void *) new_do_dlopen_V24,(void **) &orig_do_dlopen_V24);} else {hook_dlopen_rom24(symbol, rom);}} else if (api_level >= 19) {if (findSymbol("__dl__Z9do_dlopenPKciPK17android_dlextinfo", "linker",(unsigned long *) &symbol) == 0) {MSHookFunction(symbol, (void *) new_do_dlopen_V19,(void **) &orig_do_dlopen_V19);}} else {if (findSymbol("__dl_dlopen", "linker",(unsigned long *) &symbol) == 0) {MSHookFunction(symbol, (void *) new_dlopen, (void **) &orig_dlopen);}}
}

activity回调

com.lody.virtual.client.ipc.VActivityManager

 public void onActivityResumed(Activity activity) {VLog.e("ga",activity.getClass().getName());IBinder token = mirror.android.app.Activity.mToken.get(activity);try {getService().onActivityResumed(VUserHandle.myUserId(), token);} catch (RemoteException e) {e.printStackTrace();}}

activity 就是 app 的activity

VirtualApp hook so及activity回调相关推荐

  1. android activity 回调函数,Android Activity的生命周期

    Activity的生命周期 Android系统根据activity的所处不同阶段对应的唤起其特定的回调函数来执行代码.activity的一系列有序的生命周期回调函数.本文将来讨论下activity各阶 ...

  2. 寒江独钓 第二章(3)Hook分发函数和回调函数

    前面两节讲的是通过在设备栈上绑定一个新的设备实现键盘过滤.这是非常正统的方法,是合法软件行为.一般黑客软件不会采用这么正道的方法.     黑客可以通过修改一个已经存在的驱动对象(比如前面提到的Kbd ...

  3. Android后台强制结束进程,Application入口或者activity回调的是哪个方法?

    ====================问题描述==================== dengdeng  ====================解决方案1==================== ...

  4. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  5. Hook技术之Hook Activity

    一.Hook技术概述 Hook技术的核心实际上是动态分析技术,动态分析是指在程序运行时对程序进行调试的技术.众所周知,Android系统的代码和回调是按照一定的顺序执行的,这里举一个简单的例子,如图所 ...

  6. Android Hook Activity 的几种姿势

    这篇博客已 API 27 的源码为基础分析 前言 在上一篇文章 Android Hook 机制之简单实战 中,我们介绍了 Hook 的要点 Hook 的选择点:静态变量和单例,因为一旦创建对象,它们不 ...

  7. 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. Hook技术--Activity的启动过程的拦截

    1.寻找Hook点的原则 Android中主要是依靠分析系统源码类来做到的,首先我们得找到被Hook的对象,我称之为Hook点:什么样的对象比较好Hook呢?自然是容易找到的对象.什么样的对象容易找到 ...

  9. hook(2)Activity启动流程,涨知识

    Field sCurrentActivityThreadField = ActivityThreadClz.getDeclaredField("sCurrentActivityThread& ...

  10. hook(2)Activity启动流程,安卓开发实战

    如何使用: 在MainActivity的onCreate中加入一行ActivityHookHelper.hook(this) public class MainActivity extends App ...

最新文章

  1. 初识C语言---(4)
  2. 给电脑换源 npm 国内镜像 cnpm
  3. 群晖备份linux分区,黑群晖二合一系统无损扩充系统分区方法补充
  4. 中国涂料树脂行业投资盈利预测及发展规模展望报告2021-2027年版
  5. html 进入效果,用css3实现简单的进入效果
  6. DBackup环境部署linux,linux_BackupPC 安装部署
  7. Spring context命名空间
  8. 最优的素数判断代码(Python)是这样写出来的
  9. 若依(RuoYi)如何不登录直接访问?
  10. java开发之路——个人开发模板之技巧
  11. tcpdf中增加微软雅黑的正确方式
  12. 如何进行windows数据恢复呢
  13. 软件测试开发高频面试题及参考答案(适用校招)
  14. IT项目管理 第七章 保证项目质量
  15. 修改域名dns服务器地址,易名中国域名如何修改DNS设置方法
  16. 计算机网络双绞线和交叉线的区别,交叉线-什么是交叉线、直通线和双绞线?各有什么区别 – 手机爱问...
  17. <学习笔记>从零开始自学Python-之-web应用框架Django( 八)Django表单
  18. 滴滴章文嵩:一个人的20年开源热情和国内互联网开源运动
  19. 安卓系统手机如何用作电脑摄像头使用及解决方法
  20. linux安装mysql出现Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies: libn

热门文章

  1. 温度转换(摄氏温度转化氏温度)
  2. 基因组科学数据的安全管理与应用
  3. 在几何画板上画椭圆可以根据椭圆第二定义
  4. Java 深入面向对象
  5. 如何用计算机输入数学符号,x的平方怎么在电脑上打出来(常见数学符号打法...
  6. 漫谈分布式游戏服务器
  7. Maxima绘图基础
  8. 微信撤回的消息能恢复吗?微信撤回的消息怎么恢复
  9. linux wifi开机自动连接 wifi连接
  10. 用java实现首字母大写_java实现每个单词首字母大写