android的hook方面知识点

android hook分为另种:

native层hook---理解ELF文件java

java层---虚拟机特性和Java上的反射的做用android

注入代码:

存放在哪?框架

用mmap函数分配临时内存来完成代码存放,对于函数的寻找须要用到目标地址空间解析和ELF解析函数

如何注入?工具

用ptrace函数attach上目标进程插件

发现装载共享库so函数设计

装载指定的.soxml

让目标进程的执行流程跳转到注入的代码执行对象

使用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:

一、在AndroidManifest.xml文件中配置主入口

二、新建立主入口Main.Java类

三、hook系统的resources,hook对应的方法

四、安装、重启、验证

注入广告:

经过hook指定的Activity中的onCreate方法来启动一个广告的activity

在恶意设计中,能够将广告的activity设置成恶意的activity做为钓鱼activity。

使用Xposed进行hook步骤:

一、在AndroidManifest.xml文件中配置插件名称与Api版本号

二、新建立一个入口类继承并实现IXposedHookLoadPackage接口

三、声明主入口路径

四、使用findAndLoadHookMethod方法hook劫持登陆信息

五、在XposedInstaller中启动自定义的模块

六、重启验证去

原生程序hook:

框架:Cydiasubstrate

函数:MSGetImageByName、MSFindSymbol、MSHookFunction

步骤:

一、在androidmanifest中声明权限和安装方式--安装方式internalOnly和hasCode=“false”

二、新建立项目的cpp文件,导入所需的库

三、载入配置文件和cydiasubtract入口

四、hook并替换其方法

五、编译、安装、重启验证

hook检测和修复:

hook的本质:在一个目标进程中经过改变函数方法的指向地址,加入一段自定义的代码块

java层的hook检测:用ps命令查找进程id--用cat/proc……命令查找地址空间中对应的dex文件是否由对应进程(系统)提供。

原生层hook检测 :相似java层。对于应用程序自身检测,只须要读取对应进程的虚拟地址空间目录/proc/pid/maps文件, 判断当前进程空间中载入的代码库文件是否存在于本身的白名单中

hook过的程序修复:因为全部的第三方库都是经过dlopen注入的方式添加到进程中,因此咱们只须要经过dlclose把对应的第三方函数按个删除。

可是dlclose函数并不能把全部函数彻底删除,由于dlclose关闭指定句柄的动态连接库,只有当对应动态连接库使用次数为0时才能被系统卸载。

因为没法知晓hook的动态库用何种方式在什么时候注入,因此也须要采用实时监测。

相关文章
相关标签/搜索