author:dge
习惯了OD和IDA的组合,也懒的装内核调试器了,好在需要分析驱动的时候特别少,而且只用IDA就可以玩的转。
最近在整驱动的过程中积累了点技巧,把他们记录下来,以慰同菜。
Q:许多软件隐藏了驱动,如何找到它们?
A:其实很简单,隐藏文件肯定是驱动干的,不让驱动的加载,再牛B的隐藏也废了,用SSM拦截驱动的加载是个不错的选择。
Q:如何提高驱动代码可读性?
A:驱动中对IRP,DEVICE_OBJECT,DRIVER_OBJECT和IO_STACK_LOCATION的操作很多,所以把这些结构添加进来,然后把对这些结构的操作进行标识。
Q:如何完成驱动代码的准确定位?
A:一般的驱动都是用DeviceIoControl给驱动发送IRP_MJ_DEVICE_CONTROL类型的IRP来调用驱动中的代码,在驱动中一般先对
IRP_MJ_DEVICE_CONTROL进行处理,然后再细化到处理相应IOCTL的代码,这个IOCTL又是DeviceIoControl的一个参数,所以通过监视DeviceIoControl就可以完成代码的精确定位。
Q:如何来获取这个IOCTL?
A:(1):可以通过调试器对DeviceIoControl下断,不过一般得应付很多反调试,感觉很笨拙。
(2):可以写个监视DeviceIoControl的程序,然后把IOCTL作为日志实时的输出。如果我们想分析软件的某个功能,只要运行软件的某个功能,然后
在日志中找到IOCTL,再在驱动代码中搜索它,就可以完成准确定位了,这个方式感觉比较好,它饶过了反调试。
Q:如何实现监视?
A:其实就是改变DeviceIoControl的流程,inline hook就可以。
Q:还需要什么?
A:一点兴趣,一些体力。
真技巧啊真技巧
[回复]
Q:还需要什么?
A:一点兴趣,一些体力。
这个是最重要的·!赞
[回复]