Android安全:Hook技术

IT教程 4年前 (2020) https://www.leileyou.com

hook技术

Android安全:Hook技术

Android音频进阶

Android系统音频发挥巨大作用,比如Speaker、蓝牙音乐、蓝牙电话、USB声卡、语音唤醒和识别、MIC阵列等,都需要Android系统音频做支撑,这些模块联系起来确是极其复杂,本栏会以高通平台为例深入分享几个模块.

Android安全:Hook技术慢慢的燃烧

¥9.90

订阅

原址

一、Hook技术 

1.Hook英文翻译为“钩子”,而钩子就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件; 

2.Hook使它能够将自己的代码“融入”被勾住(Hook)的进程中,成为目标进程的一部分; 

3.在Andorid沙箱机制下,Hook是我们能通过一个程序改变其他程序某些行为得以实现; 

二、Hook分类 

1.根据Android开发模式,Native模式(C/C++)和Java模式(Java)区分,在Android平台上 

Java层级的Hook; 

Native层级的Hook; 

2.根Hook对象与Hook后处理事件方式不同,Hook还分为: 

消息Hook; 

API Hook; 

3.针对Hook的不同进程上来说,还可以分为: 

全局Hook; 

单个进程Hook; 

三、Hook原理 

Hook技术本质是函数调用,由于处于Linux用户状态,每个进程有自己独立的进程控件,所以必须先注入所要Hook的进程空间,修改其内存中进程代码,替换过程表的符号地址,通过ptrace函数附加进程,向远程进程注入so库,从而达到监控以及远程进程关键函数挂钩; 

四、Hook工作流程 

1.Android相关内核函数: 

ptrace函数:跟踪一个目标进程,结束跟踪一个目标进程,获取内存字节,像内存写入地址; 

dlopen函数:以指定模式打开指定的动态链接库文件; 

mmap函数:分配一段临时的内存来完成代码的存放; 

2.向目标进程注入代码总结后的步骤分为以下几步: 

用ptrace函数attch上目标进程; 

发现装载共享库so函数; 

装载指定的.so; 

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

使用ptrace函数的detach释放目标集成; 

五、常用Hook工具-Xposed框架 

1.Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务; 

2.通过替换/system/bin/app_process程序控制zygote进程,使app_process在启动过程中加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持; 

六、Xposed框架安装 

1.从官方网站(http://repo.xposed.info/module/de.robv.android.xposed.installer),下载de.robv.android.xposed.installer_v33_36570c.apk,安装本地服务XposedInstaller; 

2.安装进入到XposedInstaller应用程序,“框架”模块出现“未激活”提示; 

Android安全:Hook技术

3.点击“框架”,进入到需要激活框架的界面,我们点击“安装/更新”就能完成框架的激活了,因为安装时会需要Root权限(下载相关工具如“Root精灵”),安装后会启动Xposed的app_process,所以安装过程会存在设备多次重启(安装过程如下图); 

正在安装(下载): 

Android安全:Hook技术

获取Root权限(授权Root权限提示,并确定): 

Android安全:Hook技术

安装完成(安装完成提示重启): 

Android安全:Hook技术

安装成功(框架模块激活提示消失,即安装成功): 

Android安全:Hook技术

七、Xposed框架模块安装 

1.Xposed框架内置了下载功能,我们只需要在下载模块点击之后,进行浏览、下载、搜索即可; 

Android安全:Hook技术

2.默认按照时间排序,你可以点击放大镜图标,进行搜索如(XuiMod,一款专门用于状态栏和置顶电池模块); 

搜索XuiMod模块: 

Android安全:Hook技术

3.点击搜索到的模块,可以查看到该模块的描述信息,版本信息。在版本信息模块下进行模块的下载安装; 

XuiMod描述信息: 

Android安全:Hook技术

XuiMod版本信息,点击下载相关模块: 

Android安全:Hook技术

下载完成,点击“安装”进行安装: 

Android安全:Hook技术

安装完成后,进入“模块”,激活下载安装的模块,重启生效: 

Android安全:Hook技术

重启后,长按XuiMod进入到模块运行界面,进行相关的操作,重启生效(如下图,手机顶部打开电源充电,居中,充电动画功能): 

Android安全:Hook技术

八、Xposed自定义模块开发 

上个段落,我们讲解下如何下载、安装和使用Xposed模块。那么我们如何根据自己的需求,自己开发一个Xposed模块,下面我们就介绍下相关流程: 

1.下载XposedBridgeApi-<version>.jar(http://forum.xda-developers.com/xposed/xposed-api-changelog-developer-news-t2714067)文件,用户提供Hook相关的API,如下: 

  1. /**

  2. *包装加载时的回调

  3. */

  4. public void handleLoadPackage(final LoadPackageParam lpparam)

  5. /**

  6. *Xposed提供的Hook方法

  7. *@param className 待Hook的Class

  8. *@param classLoader ClassLoader

  9. *@param methodName 待Hook的Method

  10. *@param paramterTypesAndClassback hook回调

  11. */

  12. Unhook findAndHookMethod(String className,ClassLoader classLoader,String methodName,Object... parameterTypesAndCallback)

2.创建一个Android Project HookDemo,在项目app目录下创建lib目录(如果将jar包放置到libs目录下,可能会产生错误,估计Xposed作者在其框架内部也引用了BrideApi,这样操作能避免重复),将jar包放置到lib目录(不是项目本身的libs目录)下,选择jar包->右键->Add As Library将这个jar包添加到BuildPATH; 

Android安全:Hook技术

3.创建一个InputDemo项目(该项目使用输入框提示用户输入信息,点击按钮获取用户的信息并做相关的逻辑),用于模拟Hook目标,通过Xposed获取用户输入信息(关键代码和运行如下); 

Android安全:Hook技术

  1. OK.setOnClickListener(new View.OnClickListener() {

  2. @Override

  3. public void onClick(View v) {

  4. String inPut = Input.getText() + "";

  5. //获取用户输入,并验证是否输入正确

  6. if (isInputOK(inPut)) {

  7. Toast.makeText(MainActivity.this, "Input Success", Toast.LENGTH_SHORT).show();

  8. } else {

  9. Toast.makeText(MainActivity.this, "Input Faild", Toast.LENGTH_SHORT).show();

  10. }

  11. }

  12. });

  13. … …

  14.  private boolean isInputOK(String inPut) {

  15. if ("123456".equals(inPut)) {

  16. return true;

  17. } else {

  18. return false;

  19. }

  20. }

4.在HookDemo项目中,修改AndroidManifest.xml文件中配置插件的名称和Api版本号; 

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  3. package="com.example.pengchengxiang.hookdemo">

  4. <application>

  5. … …

  6. <meta-data

  7. android:name="xposedmodule"

  8. android:value="true" />

  9. <!--模块描述-->

  10. <meta-data

  11. android:name="xposeddescription"

  12. android:value="a hook demo" />

  13. <!--模块版本-->

  14. <meta-data

  15. android:name="xposedminversion"

  16. android:value="30" />

  17. </application>

  18. </manifest>

5.创建一个入口类继承并实现IXposedHookLoadPackage接口,使用findAndHookMethod方法Hook输入信息;  

  1. public class Main implements IXposedHookLoadPackage {

  2. @Override

  3. public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

  4. if (!loadPackageParam.packageName.equals("com.example.pengchengxiang.inputdemo")) {

  5. return;

  6. }

  7. XposedBridge.log("Loaded app:" + loadPackageParam.packageName);

  8. //Hook MainActivity类的isInputOK方法,并将该方法的参数输出至Xposed工具中

  9. findAndHookMethod("com.example.pengchengxiang.inputdemo.MainActivity", loadPackageParam.classLoader, "isInputOK", String.class, new XC_MethodHook() {

  10. @Override

  11. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

  12. XposedBridge.log("hook start");

  13. XposedBridge.log("param1:" + param.args[0]);

  14. }

  15. @Override

  16. protected void afterHookedMethod(MethodHookParam param) throws Throwable {

  17. XposedBridge.log("hook end");

  18. XposedBridge.log("param1:" + param.args[0]);

  19. }

  20. });

  21. }

  22. }

注意:在实际应用过程中,你Hook的方法参数可能是目标程序自定义的类,非Android SDK提供,如"com.example.pengchengxiang.inputdemo.Test"。这里我们可以使用方法XposedHelpers.findClass来获取参数类型的class对象,如下:

  1. XposedHelpers.findAndHookMethod("com.example.pengchengxiang.inputdemo.MainActivity", loadPackageParam.classLoader, "isInputOK", String.class,

  2. XposedHelpers.findClass("com.example.pengchengxiang.inputdemo.Test", loadPackageParam.classLoader), new XC_MethodHook() {...}

6.声明主入口路径,在assets文件夹中创建xposed_init文件,并在其中声明主入口类; 

com.example.pengchengxiang.hookdemo.Main

7.完成InputDemo和HookDemo并安装在手机中,在XposedInstaller中启动我们的自己开发的模块; 

Android安全:Hook技术

8.重新启动手机,在XposedInstaller中日志模块,查看在InputDemo中使用XposedBridge.log输出的日志; 

Android安全:Hook技术

提示1:查看日志模块,如果报错如下图: 

Android安全:Hook技术

处理1:第一,检查XposedBridgeApi-54.jar是否防在新建的lib目录下;第二,估计Xposed作者在其框架内部也使用了BridgeApi,使用Provided依赖避免重复引用; 

Android安全:Hook技术

Android检查版本升级应该怎么做?

转载自 https://www.jianshu.com/p/98ea7e866ffd demo演示:https://github.com/pzl237/UpgradeDemo 今年年初项目终于上线,到目前

PM技术课 | 搜索引擎知多少?

“搜索”在这个数据信息冗杂的时代里,充当着人们信息的筛选器,人们通过使用搜索功能,可以获得自己想要的内容,屏蔽掉无用的信息。对于

android sdk manager 无法更新,小编告诉你android sdk

如今安卓系统越来越完善了,所以也有越来越多的小伙伴去学习安卓技术了,Android Sdk无法更新,即使在hosts文件里加了谷歌网址,或者点击

新技术应用及其影响:数字经济深度解析

目录:一、弥合数

【Zigbee精华教程01】Zigbee无线组网技术入门建议与学

1. 引言 在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感觉比较难以掌握的一个部分。Zigbee无线组

文章回顾

大家看了本文Android安全:Hook技术的精彩教程资源内容,是不是对Android安全:Hook技术了解更多,真心希望Android安全:Hook技术能帮助到你, 小编会一直给你带来更多教程资源文章信息。

版权声明: 发表于 2020-07-29 8:50:36。

本文在撰写过程中会借鉴文案,对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。

本文标题:Android安全:Hook技术