协议分析 1
1 | ffffffc1f040ba80 3007336273 S Bo:1:006:2 -115 31 = 55534243 05000000 80000000 80000c5a 002a0000 00000080 00000000 000000 |
请求号5a,两者有差距,但是大部分内容,都是保留字段,体现到抓包中,有可能就是随机值,所以不做参考
协议分析 2
1 | S Bo:1:007:2 -115 31 = 55534243 06000000 08000000 80000c4a 01000010 00000008 00000000 000000 |
通过对比,这里也不一样,一个是00020000 一个是02020000(kp)
请求号 4a,也不在scsi协议中
后确认为ata协议
#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
协议分析 3
1 | ffffffc1f040ba80 3007372795 S Bo:1:006:2 -115 31 = 55534243 0e000000 02000000 80000c51 00000000 00000002 00000000 000000 |
请求号51
该请求,在scsi.h中并未发现对应字段,并且非银河麒麟系统,也没发起这个请求
经过一番周折,最终找到了51请求(在cdrom.h中,隶属于atapi, 属于ata协议)
#define GPCMD_READ_DISC_INFO 0x51
代码分析(湖南麒麟)
1 | /* requires CD R/RW */ |
从代码看2是正常场景
协议分析
1 | ffffffc1f040ba80 3007372795 S Bo:1:006:2 -115 31 = 55534243 0e000000 02000000 80000c51 00000000 00000002 00000000 000000 |
看最后一行,前面的55534e53 ,这里应该是55534243,协议的标志魔数(USBS的ASCII码),但是这里错了一个e。
这让我联想到我们的只读功能,会进行修改数据
排查代码后,发现果然是这样,光驱只读功能,在处理51请求时,对于获取到的数据修改第3字节数据,但是当前场景只返回2字节,所以走了异常逻辑,导致修改了下个返回的第三字节
修改
- 本文作者: crazyboy
- 本文链接: http://crazyboy.www.crazyboy.info/blog/blog/2022/12/13/kylin/debug/818-kp-usb-debug/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!