本文主要介绍“钩子的定义是什么”。在日常操作中,我相信很多人对Hook的定义有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“Hook的定义是什么”的疑惑!接下来,请和边肖一起学习!
钩子技术也叫钩子函数。简单来说,就是把系统程序拉出来,变成我们自己的代码片段。今天,边肖用三分钟时间简单介绍一下Hook,让大家了解一下Hook技术。
1、 Hook的定义
钩子,钩子。挂钩系统的程序逻辑。在执行某个SDK源代码逻辑的过程中,通过代码的方式截取并执行逻辑,并添加自己的代码逻辑。
Hook类似于网络传输中的中间人拦截。我在APP中截取原来的方法,自己定义一个方法,替换原来的东西,达到我无法描述的目的。这是白话,但实际过程和应用还是挺复杂的。
常见的使用场景,举几个栗子:
App登录劫持,普通用户手动点击“登录”按钮,将用户名和密码信息发送到服务器,验证账号和密码是否正确。这很简单。别有用心的人只需要在使用EditText控件的getText方法后,找到一个让开发者验证网络的方法。钩子这个方法可以劫持用户的账号和密码。
将广告注入应用程序。当应用开始加载HomeActivity时,你必须执行onCreate方法,劫持主页的onCreate方法,向其中注入弹出广告,获得广告收入。App数据篡改,比如玩游戏App,修改里面的金币数量,可以通过反编译App,找到具体的类和方法,插入自己的方法来实现。听起来很牛逼,但要实现,需要掌握很多逆向技术和其他所需技术,但并不容易。
2、实用价值
钩子是中级发展到高级发展的必由之路。如果把谷歌比作安卓的创造者,那么安卓SDK的源代码就包含了一切的起源。中级开发人员只使用一切浮于表面,而高级开发人员可以从源头改变一切,深入核心。
最有用的实用价值:hook是安卓面向方面(AOP)编程的基础,它允许我们在不改变原有业务的情况下插入额外的逻辑。这样就保护了原业务的完整性,多余的代码逻辑也不与原业务耦合。
3、前置技能
Java反射
掌握如何使用类、方法和成员字段。很多类和方法@隐藏在源代码内部,不能直接在外部访问,所以我们只能通过反射在源代码中创建类、方法或成员。
能够阅读安卓源代码
Hook的入口点都在源代码里面。如果你看不懂源代码或者分不清源代码的逻辑,就不需要谈Hook了。其实你用AndroidStudio读源代码的时候,是有漏洞的,有时候你会看到源代码“全是红的”,好像有什么东西没有被引用。其实是因为有些源代码没有对开发者开放,解决起来很麻烦。所以建议从安卓官网下载完整的源代码,然后使用SourceInsight查看源代码。如果你不需要跳来跳去,只需要一步到位的使用安卓源网站。
4、hook通用思路
不管源代码有多复杂,我们都想干扰一些执行过程,最后的绝招只有:“偷饵换柱”的思路通常是一个套路:根据需求确定要hook的对象,找到要hook的对象的持有者,得到要Hook的对象(hold:B类的成员变量之一是A类的对象,那么B就是A类的持有者),定义“要Hook的对象”的代理类,用上一步创建的对象创建这个类的对象,替换要Hook的对象。
至此,“Hook的定义是什么”的研究结束,希望能解决大家的疑惑。理论和实践的结合可以帮助你学得更好。去试试吧!如果你想继续学习更多的相关知识,请继续关注网站,边肖会继续努力,给大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/156533.html