android的hook方面知识点
android hook分为另种:
native层hook---理解ELF文件
java层---虚拟机特性和Java上的反射的作用
注入代码:
存放在哪?
用mmap函数分配临时内存来完成代码存放,对于函数的寻找需要用到目标地址空间解析和ELF解析
如何注入?
用ptrace函数attach上目标进程
发现装载共享库so函数
装载指定的.so
让目标进程的执行流程跳转到注入的代码执行
使用ptrace函数的detach释放咪表进程
注入动态共享库:
如何附着在目标进程?---内核函数ptrace能够动态attach、detach、peektext(获取内存字节)、poketext(向内存写入地址)
如何让目标进程调用动态链接库函数?---内核函数dlopen,能够以制定模式打开指定动态链接库文件。
hook分类:
对于android的so文件的hook根据ELF文件特性分为:Got表hook、Sym表hook和inline hook等
常用hook工具:
Xposed框架;
CydiaSubstrate框架;
ADBI/DDI框架。
这些工具使用流程:配置环境、安装本地服务、下载使用库。
Xposed框架:
handleLoadPackage获取包加载时的回调并拿到其对应的classLoader
findAndLoadHookMethod对指定类的方法进行hook
Cydiasubstrate框架的hook方法:
MS.hookClassLoad 拿到指定class载入时的通知
MS.hookMethod 使用一个Java方法去替换另一个Java方法
MS.moveUnderClassLoader 使用不同的ClassLoader重载对象
使用substrate:
1、在AndroidManifest.xml文件中配置主入口
2、新创建主入口Main.Java类
3、hook系统的resources,hook对应的方法
4、安装、重启、验证
注入广告:
通过hook指定的Activity中的onCreate方法来启动一个广告的activity
在恶意设计中,可以将广告的activity设置成恶意的activity作为钓鱼activity。
使用Xposed进行hook步骤:
1、在AndroidManifest.xml文件中配置插件名称与Api版本号
2、新创建一个入口类继承并实现IXposedHookLoadPackage接口
3、声明主入口路径
4、使用findAndLoadHookMethod方法hook劫持登录信息
5、在XposedInstaller中启动自定义的模块
6、重启验证去
原生程序hook:
框架:Cydiasubstrate
函数:MSGetImageByName、MSFindSymbol、MSHookFunction
步骤:
1、在androidmanifest中声明权限和安装方式--安装方式internalOnly和hasCode=“false”
2、新创建项目的cpp文件,导入所需的库
3、载入配置文件和cydiasubtract入口
4、hook并替换其方法
5、编译、安装、重启验证
hook检测和修复:
hook的本质:在一个目标进程中通过改变函数方法的指向地址,加入一段自定义的代码块
java层的hook检测:用ps命令查找进程id--用cat/proc……命令查找地址空间中对应的dex文件是否由对应进程(系统)提供。
原生层hook检测 :类似java层。对于应用程序自身检测,只需要读取对应进程的虚拟地址空间目录/proc/pid/maps文件, 判断当前进程空间中载入的代码库文件是否存在于自己的白名单中
hook过的程序修复:由于所有的第三方库都是通过dlopen注入的方式添加到进程中,所以我们只需要通过dlclose把对应的第三方函数按个删除。
但是dlclose函数并不能把所有函数完全删除,因为dlclose关闭指定句柄的动态链接库,只有当对应动态链接库使用次数为0时才能被系统卸载。
由于无法知晓hook的动态库用何种方式在何时注入,所以也需要采用实时监测。
android的hook方面知识点的更多相关文章
- 使用cydia substrate 来进行android native hook
		
cydia不仅可以hook java代码,同样可以hook native代码,下面举一个例子来进行android native hook 我是在网上找到的supermathhook这个项目,在他基 ...
 - Android Exception Hook
		
承接上一篇文章Android Inline Hook,接下来我们看一下android系统中基于异常的hook方式,这种方式与inline hook相比实现较为简单,但执行效率是它的短板. except ...
 - Android Xpose Hook(一)
		
实验环境: Droid4x模拟器 (目前Android版本4.2.2) Android Studio 1.下载相关工具 XposedInstaller下载 http://repo.xp ...
 - android inline hook
		
最近终于沉下心来对着书把hook跟注入方面的代码敲了一遍,打算写几个博客把它们记录下来. 第一次介绍一下我感觉难度最大的inline hook,实现代码参考了腾讯GAD的游戏安全入门. inline ...
 - android ART hook
		
0x00 前言 之前一直都是在Dalvik 虚拟机上在折腾,从Android 4.4开始开始引入ART,到5.0已经成为默认选择.而且最近看到阿里开源的 Dexposed 框架,已经提供了对于andr ...
 - Android Native Hook技术(二)
		
Hook技术应用 已经介绍了安卓 Native hook 原理,这里介绍 hook 技术的应用,及 Cyida Substrate 框架. 分析某APP,发现其POST请求数据经过加密,我们希望还原其 ...
 - Android Native Hook技术(一)
		
原理分析 ADBI是一个著名的安卓平台hook框架,基于 动态库注入 与 inline hook 技术实现.该框架主要由2个模块构成:1)hijack负责将so注入到目标进程空间,2)libbase是 ...
 - Android 开发必备的知识点——JVM基础【转】
		
image 1.JVM与操作系统的关系 Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机.它能识别 .class ...
 - Android里的多线程知识点
		
1.Thread类与Runnable接口 子类继承Thread类实现跑自己逻辑的run方法,在调用Thread类的start方法后,会自动调用run方法,该对象只可以调用一次start方法,即Thre ...
 
随机推荐
- (转)关于android设备管理器的一些分析
			
转自http://bbs.pediy.com/showthread.php?t=183692 想必很多人都知道轰动一时android木马OBAD,该木马利用android设备管理器的漏洞,当用户激活设 ...
 - Java虚拟机原理图解
			
具体详情参考: http://blog.csdn.net/luanlouis/article/details/41046443 http://blog.csdn.net/luanlouis/artic ...
 - jquery背景backgroundPosition插件
			
在jquery官网里找到(http://plugins.jquery.com/kbw.backgroundpos/) 语法: obj.animate({'background-position': ' ...
 - Egret3D初步笔记二  (Unity导出场景使用)
			
一 Scene 根据上一节的继续.在导入unity4.7.1_Egret3D_Dll.unitypackage后. 在Unity中双击打开Assets/Egret3D/Example下的Example ...
 - 【BZOJ2142】礼物 组合数+CRT
			
[BZOJ2142]礼物 Description 小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi.请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在 ...
 - c# WinForm 边框阴影窗体
			
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
 - ThinkPHP的增删改查!
			
对表的操作: 增加:M('表名')->add($data); (可以是数组) 删除:M('表名')->delete($data); (不可以是数组,删除多个有另外的方法) 修改:M('表 ...
 - MacBook Pro Retina 安装WIN7 - 对抗模糊及其它
			
最近对虚拟机里的WIN7受够了,把整个虚拟机都删了,准备装双系统. 安装过程还是很简单的,网上教程一大堆,就是通过MAC OS X自带的BootCamp工具来管理整个安装过程,我是用外置光驱安装的,没 ...
 - sqlserver字符串多行合并为一行
			
--创建测试表 CREATE TABLE [dbo].[TestRows2Columns]( [Id] [,) NOT NULL, [UserName] [nvarchar]() NULL, [Sub ...
 - pta 习题集 5-2 找出不是两个数组共有的元素   (5分)
			
给定两个整型数组,本题要求找出不是两者共有的元素. 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数NN(≤20≤20),随后是NN个整数,其间以空格分隔. 输出格式: 在一行中按照数字 ...