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

  • 相关阅读:
    IDEA去除代码重负导致的波浪黄线
    java代码里出现中文乱码怎么解决
    准备接入个人支付接口?看完这几款支付产品再做决定!
    个人网站选择支付宝api
    PayPay猪 文档中心
    如何让input的值根据select改变
    Visual Studio运行VC++
    腾讯视频转mp4
    重要网址
    ANSYS笔记本
  • 原文地址:https://www.cnblogs.com/miaohj/p/5945244.html
Copyright © 2011-2022 走看看