利用U盘作为程序运行唯一标识的研究

屏幕快照 2015-12-24 上午1.55.39

当年写u盘绑定程序时候的笔记,留个纪念。

U盘的可利用的特性

1、VID&PID以及序列号等

      可以实现,但是可以利用量产工具修改复制。

2、物理磁盘的总字节数

      总字节数=扇区数×每扇区字节数,可以利用,弊端是同一批次的相同容量U盘扇区数相等。注意,是物理磁盘的总字节数,并非逻辑磁盘的。

3、WinHex打开的前几个扇区的内容

    比较难利用,还需要研究。有部分U盘第一个扇区的内容可以修改,而且格式化的结果不影响第一个扇区内容,有些U盘格式化则影响第一个扇区,甚至有U盘前面部分扇区不可写。

4、制造隐蔽扇区

    比如利用苹果系统,还需要研究U盘存储结构。

 

设计思路:

1、USB Binder.exe

      绑定程序。

      用来提取需要绑定的U盘的pid vid以及序列号等信息,还有它的物理磁盘容量大小作为判断的标识,具体有

      TCHAR DevDesc[MAX_PATH] = {0};//USBSTOR的磁盘描述,包含设备序列号等信息,形如

      USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer_Blade&Rev_1.00\200422046007F622015A&0,作为验证内容一

      TCHAR szDis[MAX_PATH] = {0};//绑定设备序列号的USB信息,含有pid&vid等内容,作为验证内容二

      LARGE_INTEGER DiskSize = {0};//物理磁盘总字节数,作为验证内容三

      修改需要绑定的程序,将程序入口开始的1000字节做一个异或加密。防止释放后被人拷贝走直接运行。

      将要绑定的程序作为资源写入USB Check.exe。

      将三个验证内容MD5加密后放入USB Check.exe作为配置文件。

2、USB Check.exe

      遍历所有硬盘信息对比验证内容,判断是否存在特定U盘,如果不存在直接退出,如果存在,释放资源到临时目录,创建暂停进程,修改内存,将第一区段异或解密,恢复线程运行。