Android-开发中经常出现的-技术-Hook (android studio)
Hook技术引见
Hook技术是一种在软件开发中经常出现的技术,它准许开发者在特定的事情出现时拔出自定义的代码逻辑。经常出现的运行场景包含在函数调用前后口头特定的操作,或许在特定的事情出现时触发自定义的处置逻辑。
在开发中,Hook通常是经过修正或交流Android运行程序的运转时行为,来成功对运行程序的定制、增强或监控。经常出现的AndroidHook技术包含经常使用Xposed框架、经常使用Substrate框架、经常使用JNI/NDK技术等。
在Android中,Hook技术可以用于成功诸如修正运行程序的行为、成功无需修正源码的配置增强、成功运行程序的逆向剖析和安保监控等目的。经过Hook技术,可以阻拦运行程序的函数调用、修正函数的参数和前往值、交流函数的成功等操作。
![Android](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
须要留意的是,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。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。