• 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的动态库用何种方式在何时注入,所以也需要采用实时监测。

  • 相关阅读:
    LeetCode: Tags-[Array], Difficulty-[Medium]
    J2SE 常用方法
    LeetCode: Tags-[Array], Difficulty-[Easy]
    Java Code Style 记录
    LintCode 1-30;
    Android在线程中发送GET和POST请求 在主线程更新UI
    Android中intent启动Activity中intent.setFlags()的作用
    源码备份 listview
    android数据库操作
    android 验证二
  • 原文地址:https://www.cnblogs.com/miaohj/p/5945244.html
Copyright © 2020-2023  润新知