【零基础破解辅助第一课】Lua脚本hook基础之浅述函数拦截机制

在这里插入图片描述

在教程开始之前,先简单介绍一下Lua语言的运行机制,以便于更为方便解释接下来的Hook操作

(一)介绍

Lua是一种解释型语言,代码在运行时才被解释器一行行动态翻译和执行。Lua的运行机制可以分为以下几个步骤:

(前言)Lua的运行机制

  1. 编译:Lua运行代码时,Lua脚本可以直接被Lua解释器解释执行,也可以先由Lua编译器编译为字节码,然后再交给Lua虚拟机执行
  2. 连接:Lua的编译阶段之后仅仅需要一个“打包”,真正的连接过程都是在运行之前才根据符号(如类名、模块名等等)被完成的
  3. 执行:Lua脚本跑在Lua虚拟机中,将Lua虚拟机源代码整合到某些开发环境,然后在其中启动虚拟机跑Lua代码
  4. 此外,Lua还运行了一个垃圾收集器来收集所有死对象(即在Lua中不可能再访问到的对象)来完成自动内存管理的工作

总的来说,Lua也需要编译和连接。编译可以单独完成,也可以在载入源代码的时候才完成。连接通常在运行期(调用之前 或者模块加载的时候)

希望如果对您有帮助请多多点赞关注支持一下,你的支持是我产出优质教程的动力!!

(二)开始教程

根据上面的介绍,我们已经初步了解到了Lua代码的运行机制,那么根据这个机制,我们知道了,Lua虚拟机是从上往下一行一行进行解释然后执行的.
根据这个机制,我们是不是可以把原有的函数重载,这样不就可以改变函数原意了么?

Hook概念举例

先给出一段示例代码,然后我们针对源代码进行分析

--lua代码
--当前时间20:09
print(os.data("%H:%M"));

输出

>>20:09

可以看到,这个方法把当前的时间获取,并且被print打印出来

那么,我们有没有一种办法可以修改打印的时间为自定义呢?

当然是有的

  1. Hookos.data方法
  2. Hookprint方法

针对第一种 Hookos.data方法

function os.data(...)
	return "88:88";
end

print(os.data("%H:%M"));
>>88:88

可以看到,我们的值虽然被修改了,但是貌似函数的功能也彻底失效了

那要怎么办呢?我不想让原函数失效,但是又想让它在特定的时间内自动激活Hook机制?

这篇只是基础教程,我会制定一套体系系统化进行教学,请大家多多点赞关注,支持一下!
简单概述就是调用

请大家期待一下第二章,后续会出实战hook破解Lua辅助教程!!!!

拦截exit函数

通过上面我们了解到,通过重写同名方法可以达到Hook的效果,那么我们直接照葫画瓢

function os.exit()
	print("拦截退出!");
	return; 
end

好的,本期基础:浅述函数拦截机制 完成,后期将会逐步提升难度,希望我们共通加油!!!感谢您的耐心观看!!

更多教程

更多教程请访问我的个人主页
:CSDN主页
:哔哩哔哩主页

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挽风l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值