当前位置:首页 > 数码 > Android-开发中经常出现的-技术-Hook (android studio)

Android-开发中经常出现的-技术-Hook (android studio)

admin5个月前 (04-15)数码38

Hook技术引见

Hook技术是一种在软件开发中经常出现的技术,它准许开发者在特定的事情出现时拔出自定义的代码逻辑。经常出现的运行场景包含在函数调用前后口头特定的操作,或许在特定的事情出现时触发自定义的处置逻辑。

在开发中,Hook通常是经过修正或交流Android运行程序的运转时行为,来成功对运行程序的定制、增强或监控。经常出现的AndroidHook技术包含经常使用Xposed框架、经常使用Substrate框架、经常使用JNI/NDK技术等。

在Android中,Hook技术可以用于成功诸如修正运行程序的行为、成功无需修正源码的配置增强、成功运行程序的逆向剖析和安保监控等目的。经过Hook技术,可以阻拦运行程序的函数调用、修正函数的参数和前往值、交流函数的成功等操作。

Android

须要留意的是,Hook技术的经常使用须要审慎,由于不当的Hook操作或许会造成运行程序解体或发生安保隐患。在经常使用Hook技术时,务必遵守法律法规和品德规范,防止对他人形成侵害。

Hook的罕用手腕

经常使用反射示例

privatevoidhookOnClickListener(Viewview){try{//获取View的ListenerInfo对象MethodgetListenerInfo=View.class.getDeclaredMethod("getListenerInfo");getListenerInfo.setAccessible(true);ObjectlistenerInfo=getListenerInfo.invoke(view);//获取原始的OnClickListener对象Class<?>listenerInfoClz=Class.forName("android.view.View$ListenerInfo");FieldmOnClickListener=listenerInfoClz.getDeclaredField("mOnClickListener");mOnClickListener.setAccessible(true);View.OnClickListeneroriginOnClickListener=(View.OnClickListener)mOnClickListener.get(listenerInfo);//用自定义的OnClickListener交流原始的OnClickListenerView.OnClickListenerhookedOnClickListener=newHookedOnClickListener(originOnClickListener);mOnClickListener.set(listenerInfo,hookedOnClickListener);}catch(Exceptione){log.warn("hookclickListenerfled!",e);}}classHookedOnClickListenerimplementsView.OnClickListener{privateView.OnClickListenerorigin;HookedOnClickListener(View.OnClickListenerorigin){this.origin=origin;}@OverridepublicvoidonClick(Viewv){Toast.makeText(MainActivity.this,"hookclick",Toast.LENGTH_SHORT).show();log.info("Beforeclick,dowhatyouwanttoto.");if(origin!=null){origin.onClick(v);}log.info("Afterclick,dowhatyouwanttoto.");}}

经常使用Xposed框架的示例

publicclassMyXposedModuleextendsIXposedHookLoadPackage{@OverridepublicvoidhandleLoadPackage(XC_LoadPackage.LoadPackageParamlpparam)throwsThrowable{if(lpparam.packageName.equals("com.example.target")){XposedHelpers.findAndHookMethod("com.example.targetapp.TargetClass",lpparam.classLoader,"targetMethod",newXC_MethodHook(){@OverrideprotectedvoidbeforeHookedMethod(MethodHookParamparam)throwsThrowable{//在指标方法口头行启动操作}@OverrideprotectedvoidafterHookedMethod(MethodHookParamparam)throwsThrowable{//在指标方法口头后启动操作}});}}}

经常使用Substrate框架的示例

MSHookFunction(void*symbol,void*replace,void**result);void(*original_function)(int);voidmy_replacement(intarg){//在指标方法口头行启动操作original_function(arg);//在指标方法口头后启动操作}MSHookFunction((void*)symbol,(void*)my_replacement,(void**)&original_function);

经常使用Frida工具的示例

.perform(function(){vartargetClass=Java.use("com.example.targetapp.TargetClass");targetClass.targetMethod.implementation=function(){//在指标方法口头行启动操作varresult=this.targetMethod();//在指标方法口头后启动操作returnresult;};});

这些都是罕用的AndroidHook手腕,开发者可以依据详细的需求和场景选用适合的形式启动Hook。


手机hook环境中运行什么意思

修改、拦截或扩展应用程序的行为。 ”手机hook环境中运行“通常指的是在移动设备(比如手机)的操作系统中,通过使用”hook“技术来修改、拦截或扩展应用程序的行为。 在移动设备上,”hook“环境通常用于开发者在无需修改应用程序源代码的情况下,对应用程序进行定制、修改或监控。

android怎么实现hook

几天前,在看雪安卓版块的论坛上,看到有人发表了一份dalvik hook的实现代码,这里小弟果断献丑下,给提供一份dalvik hook的另外一种实现。 首先解释下dalvik虚拟机中的Method结构体,Method结构体声明在源码目录树下的dalvik/vm/oo/Object.h文件内,在dalvik的世界中,每一个java方法都有一个对应的Method对象,dalvik虚拟机在执行java方法时,就会通过该方法的Method对象调用到方法的具体实现代码,Method结构体内有个成员,名位insns,该字段保存着java方法具体的实现代码。 那么我今天提供的这个dalvik hook的实现原理就是通过修改Method对象中的insns字段的值来达到hook java的目的。 这里简短的用文字的形式描述下Hook的实现过程。 现在有一个返回字符串的函数原型声明为:public String truth(){return hello from truth;}另外声明一个方法为:public String fake(){return fake string;}之后,该类被加载后,分别获得truth和fake方法的Method对象,并将fake方法的实现代码赋值给truth的Method对象,之后,应用程序调用truth方法时,获得的字符串为fake string。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Android

“Android-开发中经常出现的-技术-Hook (android studio)” 的相关文章

Android发热监控通常指南 (android是什么)

Android发热监控通常指南 (android是什么)

在此也只是粗略引见以后曾经做的针对发热控制的一些初步上班,以及对未来发热功耗相关展开的思绪,宿愿能让带来更好的体验,给用户带来更对美妙事物的向往的感触。​ 一、背景 置信移动端高度遍及的如今...

Android数据对象序列化原理与运行 (android是什么)

Android数据对象序列化原理与运行 (android是什么)

序列化与反序列化 「序列化」是将对象转换为可以存储或传输的格局的环节。在计算机迷信中,对象通常是指内存中的数据结构,如数组、列表、字典等。经过序列化,可以将这些对象转换为字节流或文本格局,以...

Context在Android开发中的至关重要性 (contextual)

Context在Android开发中的至关重要性 (contextual)

Introduction In Android development, Context is a crucial class that represents the curr...

从单一进程到模块化设计-Android-架构演进历程 (单进程系统)

从单一进程到模块化设计-Android-架构演进历程 (单进程系统)

Android architecture has undergone multiple evolutions, from the initial traditional MVC architect...

AIDL在Android运行程序开发中的关键性

AIDL在Android运行程序开发中的关键性

DL引见 AIDL(InterfaceDefinitionLanguage)是一种用于定义Android运行程序中的跨进程通讯接口的言语。经过经常使用AIDL,开发人员可以定义客户端和服务之...

深入了解-硬件抽象层的奥秘-揭开-HAL-Android-系统架构 (什么是硬知识)

深入了解-硬件抽象层的奥秘-揭开-HAL-Android-系统架构 (什么是硬知识)

Android系统中,硬件抽象层(HAL)扮演着至关重要的角色,它负责在不同硬件和上层应用程序之间建立一个抽象层。有了HAL,不同的硬件设备可以被统一调用,从而提高了系统的兼容性和可移植性。...

Android-系统进程优先级深入解析 (android studio)

Android-系统进程优先级深入解析 (android studio)

进程是操作系统中正在运行的程序的实例。 每个进程都有自己的内存空间和系统资源。 进程可以独立地执行指令。 进程可以包含一个或多个线程。 进程之间可以...