在最近的取证培训及工作中,我们经常可以听到一个名词,那就是hook了,想必很多刚入门的同学不是很理解是什么意思,那么今天我们自己写一段安卓代码来理解一下hook的基本含义。
Hook--顾名思义,就是“钩子”,也称作“钩子技术”,其原理是先将需要修改的函数“钩住”,然后使用自定义的函数替换原函数,让程序在运行时执行自定义函数,从而达到动态修改软件的目的。
下面我们就写一个简单的按钮监听功能:
通过点击按钮,文字将从“手机取证已全面支持iOS15系列”变成“盘古石星源全自动脱壳APK”。
好了,代码写好了也运行成功了,现在我们要做的就是在OnClickListener中,插入自己写的代码,所以,确定要hook的,是bt.setOnClickListener()方法的实参。
通过点击进入setOnClickListener的源码我们可以看见
getListenerInfo()类,继续点击进入...
我们不难发现点击事件的实际持有者ListenerInfo。
接下来我们就可以写一个hook类来进行hook操作。(代码详情见图片中的注释)
最后我们没有改动代码,只是在后面加了一行Hooksup.hook(this,bt);
然后我们看看运行效果。
我们可以看到程序已经弹出了“已被hook”字样,在函数没有改动的情况下,按钮触发了我们hook之后的效果。说明 bt.setOnClickListener被我们成功hook。
经过以上的操作,小伙伴们是否已经对hook有了初步的了解呢。
安全为先,洞鉴未来,奇安信盘古石取证团队竭诚为您提供电子数据取证专业的解决方案与服务。如需试用,请联系奇安信各区域销售代表,或致电95015,期待您的来电!
原文始发于微信公众号(盘古石取证):通过Android代码简单的理解一下什么是HOOK
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论