反转:DeviceIoControl 返回值

逆向工程 艾达 部件 函数挂钩
2021-06-17 11:39:01

在对 Windows 可执行文件进行逆向工程时,我找到了该DeviceIoControl函数,并且我正在尝试找出正确的输入,因此它不会返回零,它[ebp+hDevice]CreateFileA函数的返回中获取,该[ebp+buffer]地址存储了一个先前从中读取的值输入,它是我唯一可以控制的变量 在此处输入图片说明

任何人都可以解释该DeviceIoControl函数的工作原理,以及如何让它返回大于 0 的值,谢谢!!

1个回答

你为什么要对一个有据可查的函数进行逆向工程底层机制 IOCTL 作为设备驱动程序文档的一部分进行解释甚至 Win32 函数的本机函数DeviceIoControl 也被记录在案

要找出特定 IOCTL 代码的含义(224CDCh在您的情况下),请使用以下方法之一:

  1. OSR IOCTL 解码器
  2. !ioctldecode 在 WinDbg 中
  3. IOCTL 参考列表(您的特定代码不在此处,因此显然它不是标准代码)

第一个产生这个:OSR IOCTL 解码器对代码 0x224CDC 的作用

现在,坦率地说,您提供的信息太少了,无法提供更多帮助。但按理说,为了找出底层设备驱动程序期望的有效输入,您应该找出设备对象(您打开的CreateFileA那个)所属的驱动程序,然后对其进行逆向工程。要找出答案,您可以使用WinObj或类似工具因为那个驱动程序是内部构建的 IRP(I/O 请求包)ZwDeviceIoControlFile结束的地方。

编辑:我只是想添加建议,以便随时查看最新的 WDK 标头。上面提到的工具可能并不总是最新的。但在这种特殊情况下,根据经验,我会说这是一个自定义 IOCTL。