静态分析驱动的一点技巧

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:一点兴趣,一些体力。


2 Responses to “静态分析驱动的一点技巧”

  1. mj0011 说:

    真技巧啊真技巧

    [回复]

  2. lammer 说:

    Q:还需要什么?
    A:一点兴趣,一些体力。

    这个是最重要的·!赞

    [回复]

Post a Comment