安卓 java hook 免root_[原创]利用VirtualApp实现免Root注入Hook(一)
才疏学浅,如有不对,请轻拍。
一个话题,将一个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(一)相关推荐
- android 360加固 例子,[原创]利用VirtualApp实现360加固的soHook简单例子
简单demo,为抛砖引玉吧! 360的加固我们先写一个最简单的so,带导出函数. 这已经足够简单了,界面上打印这个值. 运行起来就这样. 简单的简直过分. 好了,现在我们让360加固一下. 拿下来自己 ...
- android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook
装X指南之通过 VirtualApp 实现免 Root 权限 Hook 一.前言 之前写的 「装X指南之Xposed安装与配置」,有人反馈手机 root 风险较大,而且操作成本高,有没有什么方法是不需 ...
- java 蓝牙读取数据格式,单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例...
原标题:单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例 JSON 指的是 Java 对象表示法(Java Object Notation),JSON 是轻量级的文本数据交换格式,JSON ...
- android系统应用开发_利用ADB工具免root停用Android系统应用
最近迷上了安卓的开发,写篇冻结app的教程吧. 主要是实现,免root冻结系统中的某些应用,你懂得哈哈 利用ADB工具免root停用Android系统应用 - Hanadahanada.info 上 ...
- [原创]利用橡皮条技术画图
[原创]利用橡皮条技术画图 在进行有绘制图形功能的软件开发中都会面临橡皮条技术,所谓橡皮条技术就是在绘制过程中出现鼠标移动的记录,当鼠标松开时绘制完整的图形.下面给出一个简单的橡皮条技术的应用,该应用 ...
- 安卓逆向-盲狙加密方法 | 安卓/JAVA 常用API查询网站
目标app-引力波 首先了解在java中进行md5加密会用到的方法,然后对方法进行hook盲狙 在https://tool.oschina.net/apidocs/apidoc?api=jdk-zh进 ...
- java beans 组件_如何利用JavaBeans在应用程序中创建组件?
JavaBeans模块使开发人员能够创建称之为组件的软件单元(也就是我们熟知的beans).你可以把beans加载在更复杂的组件.Java小型应用程序(applets)或应用程序上.JavaBeans ...
- java jeditorpane 自动换行_JDIC 中利用WebBrowser内置浏览器到java application中 | 学步园...
JDIC简介: JDesktop Integration Components (JDIC),是一个开源的项目,目的是构建消除本机应用程序和 Java 等价物之间差距的组件.项目组长是个中国人.该项目 ...
- java 调用.net webservice axis2_java利用axis2调用.net写的webservice,传递自定义的实体类参数...
利用axis2可以很方便的自动生成客户端代码,同时对复杂参数类型的传递也很方便,本文的服务端以.net开发,有一个自定义的实体类作为参数,客户端用java,简单介绍一下利用axis2的wsdl2jav ...
- Java DO到DTO转换利用spring 的BeanUtils.copyProperties
Java DO到DTO转换利用spring 的BeanUtils.copyProperties() public static <T> List<T> copy(Object ...
最新文章
- 15 年工龄的资深技术专家职场历程自述
- python平方和计算技巧_Python算法练习题:四平方和
- 2015年6月9日_诗词学习
- Spring in Action 入门之面向切面编程AOP
- css 修改placeholder颜色 , placeholder的样式设置
- 机器人编程与python语言的区别_儿童编程和机器人编程有啥区别?
- 小小突击队为什么服务器正在维护中,4399小小突击队3月20日5:30更新维护公告!...
- mongodb mysql配置_Nosql_MongoDB数据库配置以及基本指令
- 太方便 微信能精准搜图片了!网友:出点有用的功能有多难?
- MySQL 在指定位置新增字段
- lr压测mysql数据库_jmeter压测mysql数据库
- 《等级保护二级基本要求》
- 【行测】图形找规律类题目
- 1.2、logistic回归之极大似然法
- 特斯拉又发生车祸!电池夜间还自燃3次
- 编程实践(Pandas)Task08
- 介绍一款 微信客服平台系统
- TIM1_CH1N和TIM1_CH1的区别和控制
- 2018蓝桥杯 题解
- python3 QT5 端口转发工具 增加最小化隐藏 托盘显示 点击托盘恢复及托盘菜单