|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近在研究单片机模拟U盘,发现电脑读取U盘本质上就是读取各个扇区的数据,然后U盘根据电脑请求的扇区编号读取出存储颗粒上面的对应数据,把数据返回电脑。U盘测试软件则是按照一定算法生成一段伪随机数据文件填充U盘,然后读取上面的数据,在校验过程中程序自己可能也是根据算法相应生成对应位置数据进行比较,判断U盘上对应位置的数据是否和自己生成的数据一样(比如,校验文件第1000字节时,程序也在自己根据算法来生成“正确的”第1000字节数据,然后和U盘文件中的第1000字节数据比较)。这时我想到一个问题,扩容盘里面完全可能是没有存储芯片的,直接用单片机生成扇区数据(比如,电脑读取第1扇区数据,单片机根据扇区编号1生成对应的数据返回电脑),在电脑看来读取过程和正常U盘是完全没有区别的(除了不能正常写入)。于是,我想到,是否可能出现一种扩容盘,专门按照某个检测软件的算法生成校验数据,使得检测软件校验通过?我分析了一下,例如一个扇区大小4096字节,如果测试软件每一次只生成4096字节数据(1个扇区)或者更少,而且这段内容的生成仅和一个参数有关(例如这段内容在文件中的偏移量),彼此独立,那么单片机是有可能生成这个数据的,但是,如果测试软件生成的数据是从前往后迭代生成的(比如,第9~16字节的生成依赖于第1~8字节,第17~24字节的生成依赖于第9~16字节……),那么,要生成这一片段中后面部分的数据,就必须生成前面部分的数据。如果U盘是个通过算法生成数据的扩容盘,在生成其中某个扇区数据的时候,由于迭代算法的原因,需要非常长的时间(例如当电脑读取第128扇区,单片机需要从头开始迭代计算,直到生成第128扇区的数据返回电脑)。U盘跑盘测试软件是否都是这样通过迭代的方式产生测试数据,使得U盘不可能通过实时计算的方法快速的直接生成任意一个位置的数据? |
|