乐趣区

关于arm64:特工队-动态修改计算机系统调用

咱们最近录制一期特工队节目,寰球独家的视频节目,全程 2.5 小时,这个视频节目是围绕这样一个试验来进行的。咱们在这期视频节目中重点介绍:

ARM64 体系结构中的内存治理

ARM64 的页表治理

ARM64 的 Linux 内核如何 walk through 页表

ARM64 的 Linux 内核零碎调用是如何实现的?

如何面对宕机?本试验讲会面临 4 次不同的宕机。

详细分析宕机的 log

利用 kdump 来手撕宕机问题

笨叔保障,在寰球的视频网站和培训机构上也找不到这样有深度和广度的视频,只有笨叔的旗舰篇视频有哟!喜爱的连忙点本文最初面的“浏览原文”来订阅吧。

这个试验是酱杨紫的:

“假如你是一名平安人员,正在执行一项机密工作,这项机密工作就是要深刻到敌军的作战指挥核心的计算机里装置一个窃听的程序,简略来说就是把计算机的零碎调用动静替换掉。假如你的共事曾经帮你把敌军计算机的 root 明码给破解了,接下来就看你如何动静批改零碎调用了。留神:编写的内核模块不能让敌军的计算机重启、crash/panic,否则就裸露行踪,秘密行动失败。

1)编写一个内核模块。

试验环境:ARM64 体系结构,Linux 5.0 内核。

要求替换零碎调用表(sys_call_table)中某一项零碎调用,替换成本人编写的零碎调用处理函数(例如:my_new_syscall()),在新的零碎调用函数中打印一句“hello, I have hacked this syscall”, 而后再调用回原来的零碎调用处理函数。

比方以 ioctl 零碎调用为例,它在零碎调用表中的编号就是__NR_ioctl。那么须要批改零碎调用表 sys_call_table[__NR_ioctl] 的指向,让其指向 my_new_syscall() 函数,而后在 my_new_syscall() 函数中打印一句话,调用原来的 sys_call_table[__NR_ioctl] 指向的处理函数。

2)卸载模块时候把零碎调用表复原原样。

3)用 clone 零碎调用来验证你的驱动,clone 零碎调用号是__NR_clone。

这个试验来自一个理论的我的项目,最开始是笨叔的 VIP 微信群里一个敌人在国庆节期间问笨叔的一个问题。他们说这个问题困扰了他们良久,他们的试验平台是某鹏的 ARM64 服务器芯片,怎么折腾总是死机,于是救助与笨叔。笨叔看了看他们的代码,喝了一杯二锅头的工夫就把这个问题 fix 了。起初,笨叔感觉这个问题对学习 linux 驱动和内核的小伙伴很有帮忙,特地是对加深了解 ARM64 的体系结构,ARM64 内存治理、零碎调用、如何面对死机等问题,于是,笨叔在那个 VIP 敌人的问题根底上做了批改和形象,做成一个试验 share 给大家。

笨叔让小笨笨同学来做这个试验。

风华正茂的小笨笨同学

笨叔先给小笨笨介绍一些 ARM64 体系结构的常识。







小笨笨开始入手写内核模块了,花了一个下午,写好了一个驱动模块。

然而呢,这个驱动一跑起来就死机,而且整个过程会有 4 次不同的宕机。

第一次宕机,小笨笨同学就懵了。。。

在笨叔的指导下,fix 了第一次宕机。

从新编译好内核模块之后,一跑,又马上第二次宕机了。

小笨笨同学这可傻眼了,在笨叔给他解说了零碎调用的一些基本原理之后,马上 fix 了第二次宕机。这回小笨笨同学把 ioctl 零碎调用号改成 clone 号,从新编译好内核模块之后,一跑,又马上第三次宕机了。

小笨笨同学这回哭了,叔叔,我不玩了~~~~

我把小笨笨同学哄着:小笨笨,不怕,咱们来仔细分析死机 log,你看看,你只把第一个 page 的只读属性改成了可写,然而呢,因为 clone 零碎调用号是 220,每个零碎调用号在零碎调用表 sys_call_table 中占 8 个字节,然而呢,这个表没有依照 page 大小对齐来寄存的,所以呢,这个 clone 可能寄存到了第 2 个 page 里,你发现了吗?小笨笨同学。

小笨笨同学看了看笨叔,叔,如同是这么回事。叔,你真帅!

小笨笨很快就批改好了代码,上机一跑,如同不宕机了。

笨叔:小笨笨,你这个驱动写的好不错,然而呢,咱们须要在卸载模块的时候,把零碎调用表复原原样。

小笨笨马上去批改卸载模块函数,上机一跑,又宕机了~~,这回小笨笨真的哭了:叔,真的好难啊,为啥我一批改,就死机。


小伙伴,你有趣味和小笨笨一起来玩这个试验吗?

笨叔录制了 2 个多小时的高清视频来具体解说这个试验,有趣味的同学能够点击“浏览原文”来订阅笨叔的旗舰篇合集视频。

另外咱们精心制作了 400 多页的试验领导手册,独家供给,收费提供大家下载。

下载方法:

登录“奔跑吧 linux 社区”微信公众号,在微信公众号里输出“试验领导手册”即可。

退出移动版