APP安全测试——HOOK技术

举报
新网工李白 发表于 2022/03/21 23:30:04 2022/03/21
【摘要】 最近学习app的测试学会了客户端的测试方法。只知道怎么实现将其中存在的漏洞和不合规项找出来但是不知道其中的原理。一直再说HOOK技术,也就是所谓的钩子今天了解一下他到底是个啥东西。 HOOK Hook...

最近学习app的测试学会了客户端的测试方法。只知道怎么实现将其中存在的漏洞和不合规项找出来但是不知道其中的原理。一直再说HOOK技术,也就是所谓的钩子今天了解一下他到底是个啥东西。

HOOK

Hook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。

在程序中将其理解为”劫持“可能会更好理解,我们可以通过hook技术来劫持某个对象,从而控制它与其他对象的交互。
在这里插入图片描述

Hook 的这个本领,使它能够将自身的代码「融入」被勾住(Hook)的程序的进程中,成为目标进程的一个部分。API Hook 技术是一种用于改变 API 执行结果的技术,能够将系统的 API 函数执行重定向。在 Android 系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行互不干扰。这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是 Hook 的出现给我们开拓了解决此类问题的道路。当然,根据 Hook 对象与 Hook 后处理的事件方式不同,Hook 还分为不同的种类,比如消息 Hook、API Hook 等。

HOOK分类

API语言划分

分为Hook Java和Hook Native。

  • Hook Java主要通过反射和代理来实现,用于在SDK开发环境中修改Java代码。
  • Hook Native则应用于在NDK开发环境和系统开发中修改Native代码。

进程划分

分为应用程序进程Hook和全局Hook。

  • 应用程序进程Hook只能Hook当前所在的应用程序进程。
  • 应用程序进程是Zygote进程fork出来的,如果对Zygote进行Hook,就可以实现Hook系统所有的应用程序进程,这就是全局Hook。

实现方式划分

  • 通过反射和代理实现,只能Hook当前的应用程序进程。
  • 通过Hook框架实现,比如Xposed,可以实现全局Hook,但是需要root。

常用的 Hook 框架

关于 Android 中的 Hook 机制,大致有两个方式:

要 root 权限,直接 Hook 系统,可以干掉所有的 App。
免 root 权限,但是只能 Hook 自身,对系统其它 App 无能为力。

  
 
  • 1
  • 2

Xposed

一直在用这个Xposed做客户端的安全测试,不知道它就是HOOK技术的一种实现方式。
在这里插入图片描述

通过替换 /system/bin/app_process 程序控制 Zygote 进程,使得 app_process 在启动过程中会加载 XposedBridge.jar 这个 Jar 包,从而完成对 Zygote 进程及其创建的 Dalvik 虚拟机的劫持。
Xposed 在开机的时候完成对所有的 Hook Function 的劫持,在原 Function 执行的前后加上自定义代码。

https://repo.xposed.info/module/de.robv.android.xposed.installer

  
 
  • 1

Cydia Substrate

Cydia Substrate 框架为苹果用户提供了越狱相关的服务框架,当然也推出了 Android 版 。Cydia Substrate 是一个代码修改平台,它可以修改任何进程的代码。不管是用 Java 还是 C/C++(native代码)编写的,而 Xposed 只支持 Hook app_process 中的 Java 函数。

http://www.cydiasubstrate.com/

  
 
  • 1

Legend

Legend 是 Android 免 Root 环境下的一个 Apk Hook 框架,该框架代码设计简洁,通用性高,适合逆向工程时一些 Hook 场景。大部分的功能都放到了 Java 层,这样的兼容性就非常好。原理是这样的,直接构造出新旧方法对应的虚拟机数据结构,然后替换信息写到内存中即可。

https://github.com/asLody/legend

  
 
  • 1

Xposed最常用的模块

在这里插入图片描述

Inspeckage:动态分析安卓app的xposed模块
在这里插入图片描述
在choose target下拉列表中选择要分析的app,这里以乌云峰会puzzle1中的apk为例进行介绍。然后在电脑的terminal中执行

adb forward tcp:8008 tcp:8008

转发手机的8008端口到本地。在电脑上访问http://127.0.0.1:8008 就可以看到inspeckage的web界面了。

在这里插入图片描述
Justtrustme:JustTrustMe 一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。简单来说,JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查的。禁止证书验证的模块。

在这里插入图片描述

参考连接

https://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/
https://blog.csdn.net/gdutxiaoxu/article/details/81459830
https://www.kancloud.cn/alex_wsc/android/506821
https://www.jianshu.com/p/4f6d20076922
https://zhuanlan.zhihu.com/p/55276265

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

文章来源: libai.blog.csdn.net,作者:网络¥安全联盟站,版权归原作者所有,如需转载,请联系作者。

原文链接:libai.blog.csdn.net/article/details/123628514

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。