阅读:3231回复:15
有偿求助 高手请进(帮不了进来讨论讨论也给分)
有偿求助 高手请进(帮不了进来讨论讨论也给分)
小生做USB一年,勤勤恳恳,但奈何资质太差,磕磕碰碰,历尽艰难困苦,方有小果。小果虽小皆心血之做,然导师不喜,以学位相挟,寒窗三载,转眼欲成空。忽想中华自古多侠士,论坛比比皆俊才。遂跪请请诸大侠指点一二。纵每日稀饭泡茶亦不敢忘大恩大德。 问题如下: 小弟用CS5954AM做了一U盘,相以此为基础。设计并实现这样一实验。文件考入U盘后是不可读的(没法读或是分裂成多个文件),或是读出来不正确(全0啊全1)。当考入一种子(文件)后一切恢复正常。 小弟现在本身水平也太低,又急着写论文、考博实做不出来了也没时间做了,事关毕业想请高手拉一把。有偿! 电话 13526598231 mail: god_dragon1028@mail.china.com 小弟上网不太方便以前很多网友求助的信回的都不及时,有意可以直接打电话。 |
|
最新喜欢:abei11 |
沙发#
发布于:2004-02-26 09:50
既然U盘是你自己作的,这还不简单。
在PC读写U盘文件数据时,你可以检测一些U盘上是否存在正确的种子文件,若存在,你就返回正确的数据,否则返回全0或全1。 我不喜欢打电话,看你的名字应该咱俩是家们,如果你想作的话而且信得过我我可以帮你,有偿无偿无所谓,把你的源文件发过来,改好了我给你发过去。我的邮箱为DRAGON_HN@SOHU.COM |
|
|
板凳#
发布于:2004-02-26 10:02
另外我见过另外一种方式实现数据保密的:
在U盘上另外开一个控制端点,可以通过控制端点输入密码的方式进行保密. |
|
|
地板#
发布于:2004-02-26 22:16
太感谢了为了方便大家我把资料和源码传上来
我导师的意见是想把加密做到底层一点。也就是免驱尽量把工作做在USB固件上面。 这里面就面临一个问题: 如果我做一个协义栈(或判断)屏蔽READ命扫描文件目录区当发现种子 (特定文件名、特定后缀名、或特定内容)READ命令恢复。 我怎么找到文件名,就算我在BUSHOUND 抓到了数据包,我又怎么在固件里对他进行修改! U盘的FAT是在驱动上完成的,U盘FLASH的读写是以页为单位完成。 以上是我做CS5954AM U盘用的资料, 资料内容: 解压后 sl11r_bios.pdf 为CS5954AM BIOS中断集。 hardware 内含电路 DOC 中 CS5954AM Data Sheet.pdf 是USB CONTROLLER 苡片资料 内含指令集 firmware 中 NANDFLSH.ASM 为固件主程序 虽然固件前部我写的有注释但还是建议看固件前先看一下PDF文档。 CS5954AM USB to NAND Flash Reference Design Notes [编辑 - 2/26/04 by carriage] |
|
|
地下室#
发布于:2004-02-27 11:30
大家都来看一下
|
|
5楼#
发布于:2004-02-28 12:51
up
|
|
6楼#
发布于:2004-03-03 12:39
大侠们这个问题很难吗?
|
|
7楼#
发布于:2004-03-03 19:37
dragon_hn 请看
|
|
8楼#
发布于:2004-03-04 09:34
大概看了一下.这个问题其实不难解决.但解决的方法比较怪.我给你回信了.
|
|
|
9楼#
发布于:2004-03-04 09:49
昨天我找了很久的帖子都没找到.
对你的资料,我粗略看了一下,对这个系统不是很熟悉. 对种子文件一项,我有一个好方法,虽然不是很符合常规,但绝对行得通,既然固件程序是你写的,你自己改应该没什么问题,我也试着改一下. 检测种子文件数据的具体方法: 当PC向你写文件时,由于SCSI命令是以扇区为单位写的,而文件系统却由于太复杂而直接通过文件来过滤会很困难.所以一个间接的方法是通过过滤扇区数据来进行屏蔽.特殊的种子文件对应特殊的扇区数据.512字节的种子扇区数据重复的几率几乎为0,所以该方法是绝对可靠的.也就是说检测方法是以512字节为单位对种子文件进行检测的. 检测文件名具体方法: 跟检测种子文件数据的方法类似,不过过滤的不是以512字节为单位而是以16字节为单位.此方法要求同种子文件数据配合使用,单独使用重复的几率较大. 通常的U盘加密都是通过附加的端点来实现的,其实你也可以考虑一下. ------------------------------------------------------- 希望大家有好点子都拿出来,共同进步 |
|
|
10楼#
发布于:2004-03-05 23:20
我认为可以用特征字来实现。
何谓特征字?就是独一无二的特征。 大家都知道GUID吧!它是通过某种类似散列运算的方法,产生一个128比特的数值,保证在这个地球上不会再产生出第二个来。 所以你只要使用GUIDGEN.EXE产生32个各自不同的GUID,算起来为512字节。这样你只要在固件中保存这512字节,然后再进行数据流过滤即可。 我以前在作通信的同步字时用过该方法(当时用了两个GUID)。能够保证接收方在任何状态下实现同步。 其实,杀毒软件也经常使用特征字。 |
|
|
11楼#
发布于:2004-03-07 21:02
能不能具体说一下数据流过滤啊
|
|
12楼#
发布于:2004-03-07 23:38
其实很简单呀!
下面为C的伪代码: const BYTE gpucMyTag[512] = {0xa0, 0x54, 0x39, ....} //特征字。 BOOL gbSeedTrigged = FALSE; //标识特征字出现 BOOL PeepAByteFromFifo_L(UINT uIndex, BYTE * pucX) { //察看上位机下传的数据。 } BOOL GetAByteFromFifo_L(BYTE * pucX) { if(!PeepAByteFromFifo_L(0, pucX)) return FALSE; DecreaseFifoOutPointer(); return TRUE; } BOOL GetAByteFromFifo(BYTE * pucX) { static UINT uCounter = 0; if(!GetAByteFromFifo_L(pucX)) return FALSE; if(pucX[0] != gpucMyTag[uCounter]) { uCounter = 0; return TRUE; } uCounter++; if(uCounter = 512) { gbSeedTrigged; } return TRUE; } 对于你的系统而言,不用这么复杂。 只要做个循环就可以了: BOOL CheckSeed(BYTE * pucInputData, const BYTE * pucSeed) { UINT i; for(i = 0; i < 512; i++) { if(pucInputData != pucSeed) return FALSE; } return TRUE; } |
|
|
13楼#
发布于:2004-03-08 09:52
我觉得应用程序和固件都是自己编的,就可以自己加一些东西来协调,就和一般的协议一样,不成功就不读取,就是这样!
|
|
14楼#
发布于:2008-05-08 11:53
Re:有偿求助 高手请进(帮不了进来讨论讨论也给分)
|
|
驱动小牛
|
15楼#
发布于:2008-06-19 17:43
Re:有偿求助 高手请进(帮不了进来讨论讨论也给分)
然导师不喜,以学位相挟=================== 现在的导师大多不专专业,尽专业务,自己恐怕都搞不定,逼着学生搞定,这种导师还不如做生意的老板。 |