首先明确IOCTL code的定义方法如下:
![](https://img.haomeiwen.com/i3736263/0fd0293b1858fbe0.png)
- 调试程序exe,对CreateFileW和DeviceIoControl下条件断点的方式抓取到至少一个IOCTL code,由于对于同一个设备来说,只有Function code和Transfer type会更改,所以在fuzz时可以大大缩小尝试的范围。
对于这个方法目前存在的一个没有想到解决办法的难点:
对于有的设备你并不知道要怎么对软件进行操作才能调用这个设备。所以有可能一直都抓不到对这个设备的操作,结果就是一个IOCTL code都拿不到。
一些值得尝试的方法:
-
通过逆向sys文件,找到特定的dispathfunction中相关内容,理论上可以拿到所有有效IOCTL code值。
对于这个方法的没有解决难点:
拿不到符号表加之个人汇编水平实在有限,对于略复杂的sys文件,找到对应的内容有些难。 -
值得尝试的一个方法
通过内核调试的方法:写一个使用设备的函数,并使用DeviceIOContrl函数随便传一个IOCTL code值,通过断点跟踪尝试定位到具体的sys文件中具体位置。考虑的不太细,具体的实施还需要再妥善考虑一下。
网友评论