【问题标题】:DeviceIoControl() returned data meaningDeviceIoControl() 返回数据含义
【发布时间】:2016-08-25 23:36:25
【问题描述】:

我一直在反转课堂上给出的示例应用程序,我在试图找出 DeviceIoControl() 函数在 Output Buffer 中返回的内容时遇到了问题,因为在调用 @987654332 后经常使用 DeviceIoControl() @,我必须讨论最后一个。 这些是程序经过的步骤:

  1. 程序以READ|WRITE 访问和READ|WRITE 共享模式(CreateFile() 功能)打开C: 驱动器。
  2. 然后用我将在最后发布的某些数据填充输入缓冲区(这似乎是一个结构)。
  3. 指定Input BufferOutput Buffer 大小。
  4. 最后使用控制代码调用DeviceIoControl()4D004h

通过查看Output Buffer 中返回的数据,似乎都是关于硬盘驱动器信息,例如:制造商、型号名称...等

这是返回的数据块:

保留供以后使用的最重要的字符串是:Z2P1S4PJ,我不知道它是什么意思!!

对于其余的补充:

【问题讨论】:

  • 最后几张图忘记注释了。第一个(最后)是对CreateFile的调用。第二个是对ControlIoDevice的调用。第三个也是最后一个是Input Buffer数据。
  • 是调用ControlIoDevice 还是DeviceIoControl? MSDN 对第一个没有帮助。
  • @Seki 是DeviceIoControl,很抱歉弄错了。
  • @Seki 我在您的回答中添加了评论,请查看!

标签: winapi reverse-engineering createfile ollydbg


【解决方案1】:

经过一番搜索,如果我们说的是winapiDeviceIoControl()函数的dwIoControlCode,看来4D004的代码定义为IOCTL_SCSI_PASS_THROUGH,所以它允许向 SCSI 设备发送一些命令。命令的详细信息应该在参数对lpInBuffer/nInBufferSize指向的缓冲区中。

如果不知道设备,将很难确切地知道是什么命令,我不知道 SCSI 接口管理的细节。

【讨论】:

  • 我已经发现自己正在阅读关于 IOCTL_SCSI_PASS_THROUGH 命令的相同信息,但不幸的是,我不知道 SCSI 设备。另一件事是 DeviceIoControl 使用的句柄是句柄到一个卷(“C:\”),所以它必须是一个硬盘驱动器命令并且硬盘驱动器是一个 SATA 设备(因为看起来程序试图打开一些 SCSI 设备但它无法检索请求的数据,所以它继续进行第二个选择,即打开(“C:\”)并使用该代码请求数据并成功返回数据(一些硬盘驱动器信息 - 参见上面的捕获)。
猜你喜欢
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多