对app进行hook什么意思呢

对app进行hook什么意思呢,第1张

对app进行hook的意思是去调用或者篡改APP代码。

软件HOOK即钩子函数,钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可掘汪以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。

钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续陪瞎传递该消息,还可以强制结束消息的传递。

HOOK技术在windows系统下编程,应该会接触到api函数的使用,常用的api函数大概有2000个左右。今天随着控件,stl等高效编程技术的出现,api的使用概率在普通的用户程序上就变得越来越小了。当诸如控件这些现成的手段不能实现的功能时,我们还需芦散空要借助api。

HOOK技术是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处宏如大理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控橡肆制权蔽竖。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

扩展资料:

Hook原理

Hook技术无论对安全软件还是恶意软件都是十分关键的一项技术,其本质就是劫持函数调用。但是由于处于Linux用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要Hook的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。在Android中一般是通过ptrace函数附加进程,然后向远程进程注入so库,从而达到监控以及远程进程关键函数挂钩。

Hook技术的难点,并不在于Hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握Hook的基本使用方法。如何找到函数的入口点、替换函数,这就涉及了理解函数的连接与加载机制。

从Android的开发来说,Android系统本身就提供给了我们两种开发模式,基于AndroidSDK的Java语言开发,基于AndroidNDK的NativeC/C++语言开发。所以,我们在讨论Hook的时候就必须在两个层面上来讨论。

对于Native层来说Hook的难点其实是在理解ELF文件与学习ELF文件上,特别是对ELF文件不太了解的读者来说;对于Java层来说,Hook就需要了解虚拟机的特性与Java上反射的使用。

开发中我们会调用startActivity来启动一个Activity,最终会调到 startActivityForResult

Instrumentation 是Android系统里面的一套控制方法或者“钩子”。这些钩子可以在正常的生命周期(正常是由 *** 作系统控制的)之外控制Android控件的运行。

Application和Activity的所有生命周期中,都会先调用Instrumentation提供的相应方法(如callActivityOnCreate,callApplicationOnCreate,毕大穗newActivity,callActivityOnNewIntent)手卜

Instrumentation.execStartActivity

ActivityTaskManager.getService()返回了一个IActivityTaskManager,拿到的是ATMS的代理对象,跨进程调用了ATMS的startActivity方法。

ActivityStarter.startActivityMayWait

ActivityStarter中做了一系列的调用(收集Intent信息,处理startActivityForResult,做一些校验判断等),最终进入startActivityUnchecked。

startActivityUnchecked

startActivityUnchecked中处理了关于Activity启动模式的处理,接着真正的resume我们的Activity

这里会先判断应用进程是否创建,创建了就进入 realStartActivityLocked ,没创建就会调用 ActivityManagerInternal.startProcess

①热启动realStartActivityLocked

接着看ActivityThread中接收并处理消息的handleMessage

前面realStartActivityLocked方法中通过addCallback,传入参数LaunchActivityItem。executeCallbacks方法中取出callbacks集合中的LaunchActivityItem,并调用其execute方法

handleLaunchActivity

②冷启动创建应用进程ActivityManagerInternal.startProcess

ActivityManagerInternal的实现类是AMS中的LocalService,AMS通过Socket与Zygote通信,fork出App进程,app进程创建后,会执行ActivityThread的main方法(Android进程入口方法)

调用ActivityThread的attach

[4]thread.bindApplication 这是一个binder通信的过程

ActivityThread内部的Handler接收到BIND_APPLICATION消息

回到上面attachApplicationLocked的mAtmInternal.attachApplication,调用ATMS的attachApplication

看到了似曾相识的realStartActivityLocked,后面流程和之前一样。Activity启动流程分析完毕。

总结

1)与Activity管理有关的类:

ActivityRecord :历史栈中的一个条目,代表一个Activity

TaskRecord :内部维护了一个ArrayList<ActivityRecord>,来保存ActivityRecord

ActivityStack :内部维护了一个ArrayList<TaskRecord>,用来管理仿蚂TaskRecord

ActivityStackSupervisor :用来管理ActivityStack的

2)Activity启动流程


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8214211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存