查看原文
其他

Linux内核驱动调试遇到的一些坑以及解决方法(新手必看指南)

Vinadiak 看雪学院 2021-03-08

本文为看雪论坛优秀文章
看雪论坛作者ID:Vinadiak 
 

0x00 背景



最近在学习Linux内核调试,看了钞sir的环境搭建搭建了qemu环境之后本来兴高采烈地去开启我的内核调试之旅,没想到碰到了很多障碍,百度了很久也解决不了,最后自己胡乱碰撞,终于解决了这些问题,我觉得我遇到的这些问题也是很多坛友也会遇到的,现在我来讲讲我遇到的问题和解决的方法。


0x01 地址零



要调试驱动必须要驱动加载地址,但是当我运行了系统给的sh之后,它居然给我返回了地址为零,这里以 2019 STARCTF/CTF hackme 为例:


原因:不是root权限,无法看到地址。(虽然题目给了地址,但相同的问题还是会出现的)


解决方法:既然没有root权限,那我就用root权限的登录就好了。


具体流程:

解压给的cpio文件 -> 进入该文件 -> 找到init ->打开并修改(由于hackme给了地址,所以这里用的是其他题目的init来演示。

 
将这个1000修改为0就是我们的root权限了。


再次登录就可以发现地址加载出来了。


0x02 GDB显示错误Can not find ELF BASE



当你运行target remote:1234,显示一堆CAN NOT FIND ELF BASE的时候,内心有点崩溃吧。

原因:没有用ROOT权限运行GDB。


解决方法:sudo su 接下来你懂的。



0x03 下了断点但不会调试



这时候要运行poc文件就能看到在你的断点里面调试了,可能有人会说调试不就是为了POC吗,这怎么写POC我也不太懂,因为我也是初学者,现在先学会如何调试最重要,之后我会再更新的。




0x04 不会往镜像放文件



cpio是我们的文件系统,一开始我也遇到这怎么弄的麻烦,最后还是偶然发现了答案。

解决方法:


解压cpio -> 放入想要文件到解压出来的文件里面->运行以下命令:

find . | cpio -o --format=newc > ../core.cpio
(如果有提供fs.sh 直接用就好了,不用打这条命令)

当然 这个core.cpio是你自己决定的,如果改了名字,记得运行镜像的命令的也要相应的修改。
 
最后,这就是我遇到的麻烦和阻碍,希望对linux内核调试的你们有帮助,之后如果我遇到更多的麻烦我会更新在这里的,欢迎大家一起交流linux内核调试。




- End -







看雪ID:Vinadiak 

https://bbs.pediy.com/user-855782.htm 


*本文由看雪论坛  Vinadiak  原创,转载请注明来自看雪社区







推荐文章++++

PWN入门的一些总结

固件分析--工具、方法技巧浅析(上)

固件分析--工具、方法技巧浅析(下)

7种Android Native Anti Hook的实现思路

经典整数溢出漏洞示例 XCTF int_overflow








进阶安全圈,不得不读的一本书







公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com





“阅读原文”一起来充电吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存