才疏学浅,如有不对,请轻拍。

一个话题,将一个so注入到App中有几种方式?

1.Root,直接注入。

想必论坛的大部分人已经都会了,拿到了Root之后,我们可以利用ptrace直接注入。所以加固的第一点,便是反调试。

2.Root,将so作为系统so,这样任何App起来都得把so加载到app进程当中。

xposed的方式是重写孵化器,让孵化器能够加载自己的so,从而控制整个安卓。所以很多加固会去识别特征码,看是否有xposed的框架。

那么如果没有Root呢,我们如何往一个App里注入一个SO?

1.重打包

如果可以重新打包,我们可以反编译java层,在加载SO的地方,补一句加载So,把我们的SO放到App的Lib目录下。

2.我们启动App

其实关于我们启动App的方式有很多种,如果App的架构简单,我们可以反编译一部分App代码,重写java层,我们的java层去load原有App的So,在加载App的So的同时加载我们的So。

具体可以参考https://github.com/zhuowei/MCPELauncher/的做法。

如果App架构复杂,被加固了,无法重打包,无法注入,无法root,无法刷机,锁了BL,反正就这样了,我们是否还有办法注入?

自然还是可以!

关于VirtualApp要从安卓的插件化说起。

插件化,就是让App动态的加载一个磁盘的dex,这样实现热补丁技术,我们的Host进程类似于医生,长期稳定,而真正的dex则类似于病人,可以动态的修复。

其实加固的原理也类似于如此,加固的时候,我们拿到需要加固的APK将其中的dex给加密,然后替换掉入口,改为我们的壳APK入口,当壳加载了之后,我们再动态的加载原有的APK,这样静态反编译,得到的是壳Apk.

VirtualApp中我们重点关注下NativeEngine这个类,因为这个类会加载一个so,而且so会位于启动的apk当中。既然这里加载一个so,自然可以再加载几个也无所谓。

这个类加载的So做了很多事,包括hook系统的底层函数。replaceOpenDexFileMethod(envenv->GetObjectArrayElement(javaMethods)isArtapiLevel)

其中这个函数将OPen_Dex,给Hook掉了,想做dumpDex是不是可以在这里做呢?

这个SO还做了IO重定向,因为创造了虚拟空间,所以读写需要重定向。IOUniformer::startUniformer

这个函数中hook了一个hook_dlopen(api_level);

这里hook了linker当中的do_dlopen函数,这是so加载的函数,加壳的SO一般在加载的时候进行部分脱壳,所以我们也可以在加载了之后加载我们的so,进行hook。

由于很多手机linker是被处理过的不见得都能找得到符号,我们也可以利用其它办法。

不过这里就已经达到了我们想要的效果,在别人的App里加载一个我们的so,在别人so加载的时候,进行hook。

安卓 java hook 免root_[原创]利用VirtualApp实现免Root注入Hook(一)相关推荐

  1. android 360加固 例子,[原创]利用VirtualApp实现360加固的soHook简单例子

    简单demo,为抛砖引玉吧! 360的加固我们先写一个最简单的so,带导出函数. 这已经足够简单了,界面上打印这个值. 运行起来就这样. 简单的简直过分. 好了,现在我们让360加固一下. 拿下来自己 ...

  2. android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook

    装X指南之通过 VirtualApp 实现免 Root 权限 Hook 一.前言 之前写的 「装X指南之Xposed安装与配置」,有人反馈手机 root 风险较大,而且操作成本高,有没有什么方法是不需 ...

  3. java 蓝牙读取数据格式,单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例...

    原标题:单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例 JSON 指的是 Java 对象表示法(Java Object Notation),JSON 是轻量级的文本数据交换格式,JSON ...

  4. android系统应用开发_利用ADB工具免root停用Android系统应用

    最近迷上了安卓的开发,写篇冻结app的教程吧. 主要是实现,免root冻结系统中的某些应用,你懂得哈哈 利用ADB工具免root停用Android系统应用 - Hanada​hanada.info 上 ...

  5. [原创]利用橡皮条技术画图

    [原创]利用橡皮条技术画图 在进行有绘制图形功能的软件开发中都会面临橡皮条技术,所谓橡皮条技术就是在绘制过程中出现鼠标移动的记录,当鼠标松开时绘制完整的图形.下面给出一个简单的橡皮条技术的应用,该应用 ...

  6. 安卓逆向-盲狙加密方法 | 安卓/JAVA 常用API查询网站

    目标app-引力波 首先了解在java中进行md5加密会用到的方法,然后对方法进行hook盲狙 在https://tool.oschina.net/apidocs/apidoc?api=jdk-zh进 ...

  7. java beans 组件_如何利用JavaBeans在应用程序中创建组件?

    JavaBeans模块使开发人员能够创建称之为组件的软件单元(也就是我们熟知的beans).你可以把beans加载在更复杂的组件.Java小型应用程序(applets)或应用程序上.JavaBeans ...

  8. java jeditorpane 自动换行_JDIC 中利用WebBrowser内置浏览器到java application中 | 学步园...

    JDIC简介: JDesktop Integration Components (JDIC),是一个开源的项目,目的是构建消除本机应用程序和 Java 等价物之间差距的组件.项目组长是个中国人.该项目 ...

  9. java 调用.net webservice axis2_java利用axis2调用.net写的webservice,传递自定义的实体类参数...

    利用axis2可以很方便的自动生成客户端代码,同时对复杂参数类型的传递也很方便,本文的服务端以.net开发,有一个自定义的实体类作为参数,客户端用java,简单介绍一下利用axis2的wsdl2jav ...

  10. Java DO到DTO转换利用spring 的BeanUtils.copyProperties

    Java DO到DTO转换利用spring 的BeanUtils.copyProperties() public static <T> List<T> copy(Object ...

最新文章

  1. 15 年工龄的资深技术专家职场历程自述
  2. python平方和计算技巧_Python算法练习题:四平方和
  3. 2015年6月9日_诗词学习
  4. Spring in Action 入门之面向切面编程AOP
  5. css 修改placeholder颜色 , placeholder的样式设置
  6. 机器人编程与python语言的区别_儿童编程和机器人编程有啥区别?
  7. 小小突击队为什么服务器正在维护中,4399小小突击队3月20日5:30更新维护公告!...
  8. mongodb mysql配置_Nosql_MongoDB数据库配置以及基本指令
  9. 太方便 微信能精准搜图片了!网友:出点有用的功能有多难?
  10. MySQL 在指定位置新增字段
  11. lr压测mysql数据库_jmeter压测mysql数据库
  12. 《等级保护二级基本要求》
  13. 【行测】图形找规律类题目
  14. 1.2、logistic回归之极大似然法
  15. 特斯拉又发生车祸!电池夜间还自燃3次
  16. 编程实践(Pandas)Task08
  17. 介绍一款 微信客服平台系统
  18. TIM1_CH1N和TIM1_CH1的区别和控制
  19. 2018蓝桥杯 题解
  20. python3 QT5 端口转发工具 增加最小化隐藏 托盘显示 点击托盘恢复及托盘菜单

热门文章

  1. RFM用户分层模型简介
  2. 怎么查看自己宽带是公网ip还是内网ip?
  3. c语言怎么写注释,C语言注释
  4. Activity 生命周期详解与异常情况生命周期
  5. Elasticsearch教程(19) 详解mapping之keyword
  6. java super是什么意思_Java中super是什么意思?
  7. redis创建集群,redis-trib.rb命令详解
  8. nonebot2插件之主持飞花令
  9. 山东科技大学计算机研究生学院官网,山东科技大学-计算机科学与工程学院
  10. 用Pycharm创建一个职位管理系统