小弟现在在做一个加密解密的项目,先不用考虑加密算法,现在的要求是解密之后的文件不能接触硬盘,以防被盗走,
我就打算用钩子函数来勾住kernel32里面的文件打开,读取,和关闭函数,需要改写IAT表,我把这个改写的过程做成了一个类,可以正确解密并播放文件,
但是这样做的结果是只有当前线程能够解密文件,所以我想做成全局钩子,让新启动的线程同样可以解密文件,我尝试了很多次都失败了,希望各位大哥能帮小弟一把,
再次表示感谢,小弟的QQ号是158134097

解决方案 »

  1.   

    看不出你的需求和你的实现有什么关系
    Windows自己不是有文件加密功能?
      

  2.   

    蒋老师好,可能是我描述的不够明确,我的意思是现在有一些被加密的视频,我想将它们解密并播放,但是解密后的明文不能出现在硬盘上,所以我就修改了kernel32中的creatfilea, readfile ,并通过修改IAT的方式将原来kernel32中creatfilea, readfile 的地址修改为我写的creatfilea, readfile 的地址,这样每当进程调用creatfilea, readfile 时,调用的就是我自己写的creatfilea, readfile 函数,因为我写的readfile 中有解密的代码,这样就可以直接播放这些视频,而不需要将视频先解密到硬盘上,我想把我写的那个类发给你,但不知道怎么去发,蒋老师您能给个邮箱吗?
       再次表示感谢
      

  3.   

    就是 放在硬盘上 ,你的也不行 ,效率太差,解密并播放,这个要有过程的, 直接把解密的数据放内存,干吗写回磁盘?I/O 很费时的。建议, 利用DIRECT SHOW 完成你的项目。
      

  4.   

    怎么不用Windows Media DRM
      

  5.   

    建议实现一个source filter,可以指定一个新的协议或者一个新的后缀以便播放器能加载你的filter,你可以在内存中解密,向外公开一个IStream接口用以读取解密后的内容即可
      

  6.   

    楼上的大哥能给我个实例吗?小弟现在很着急,现在我做了个DLL,加载DLL后可以置换IAT表中函数的地址,但这只是在当前线程中起作用,可以直接打开JPG,FLASH 文件,因为打开这些文件不需要启动新的线程,现在有一种文件扩展名是Q3D,每当我播放他的时候,总是要启动一个新的进程,也就是他自己的播放器进程QuestViewer.exe,我的全局钩子没法加进去,只能在部分进程中挂钩子,也没法在新启动的进程中挂钩子,正在发愁中,还有,我想问一下怎么送分给帮忙的人 小弟是个新手,不知道该怎么做,还请各位高手指点