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

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

admin8个月前 (04-15)数码57

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运行开发中应用NFC配置 (在android中使用menu时可能需要重写的方法有)

在Android运行开发中应用NFC配置 (在android中使用menu时可能需要重写的方法有)

NFC引见 NFC是指近场通讯(NearFieldCommunication),它是一种短距离无线通讯技术,准许设施在非接触或极短距离内启动通讯。NFC通罕用于移动支付、门禁系统、默认标签和...

Android中保持屏幕常亮的有效方法-全面指南 (android studio)

Android中保持屏幕常亮的有效方法-全面指南 (android studio)

WakeLock是Android中用于控制设备唤醒状态的类。通过获取WakeLock对象并设置屏幕常亮标志,可以保持屏幕常亮。这对于需要在设备处于休眠状态时仍然保持屏幕显示的应用程序非常有用,例如...

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

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

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

结构和应用-深入了解Android中的SELinux-了解其功能 (茶多酚的结构和应用)

结构和应用-深入了解Android中的SELinux-了解其功能 (茶多酚的结构和应用)

SELinux 简介 SELinux(Security-Enhanced Linux)是一种安全增强的 Linux 操作系统,它通过强制访问控制 (MAC) 机制来提供更高级别的系统安全保护...

从单一进程到模块化设计-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)

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