红联Linux门户
Linux帮助

linux的加密

发布时间:2008-07-10 16:33:07来源:红联作者:zbatecn
原创:gavin

最近想给某一程序加密,防止别人直接从硬盘把可执行文件拷贝出来然后反汇编得到源代码,网上搜索了一下资料。想用CryptoFS和FUSE来做。基本思路是首先用FUSE改写某一个现成基于fuse写的文件系统,比如把文件系统的头修改了,再虚拟出一块磁盘,把该磁盘的文件系统置成fuse改写的文件系统类型。那别人就无法读取该虚拟出来的磁盘。第二步就是给存放文件的虚拟磁盘加密。这样就可以双重保护了。

第二步比较简单,所以先在普通的文件系统里做。接下来再想用FUSE修改现成的文件系统,大家有什么好的建议吗?现在先把第二步的方法写下来。

1.

libgpg-error-1.1

tar xvf libgpg-error-1.1.tar.gz && cd libgpg-error-1.1 && ./configure && make && make install && cd ..

(想卸载重装的话用make uninstall)



2.

libgcrypt-1.2.2

tar xvf libgcrypt-1.2.2.tar.gz && cd libgcrypt-1.2.2 && ./configure && make && make install && cd ..



3.

安装fuse,这个现在有问题,我一开始用的kernel2.6.19,配置内核的时候没有在file systems 里选择对Filesystem in Userspace support (fuse)的支持,按下面的方法把fuse装上是可以用的

tar xvf fuse-2.7.3.tar.gz

tar xvf fuse-2.7.3.tar.gz && cd fuse-2.7.3 && ./configure && make && make install && modprobe fuse

但是后来用kernel2.6.15,选择对Filesystem in Userspace support (fuse)的支持,按下面的方法再把fuse装上发现不可以使用

tar xvf fuse-2.7.3.tar.gz

tar xvf fuse-2.7.3.tar.gz && cd fuse-2.7.3 && ./configure --disable-kernel-module && make && make install

[root@LFS6 ~/fuse-2.7.3]$modprobe fuse

FATAL: Module fuse not found.

只找到了

/lib/modules/2.6.19.7rtaifb/kernel/fs/fuse/fuse.o

而不想在kernel2.6.19下可以找到

/lib/modules/2.6.19.7rtaifb/kernel/fs/fuse/fuse.ko

我想应该是fuse-2.7.3下./configure --disable-kernel-module这样的配置是给内核2.4配置的,现在没有想到方法解决。不过不管了,以后想用,那么内核不配上对fuse的支持就可以了。



4.

cryptofs- 0.6.0

tar xvf cryptofs-0.6.0.tar.tar && cd cryptofs-0.6.0 && ./configure



如果你用的是lfs6.2.5的话,可能会提示:

checking for FUSE... no

打开cat config.log,可以看到下面的一段话。

No package 'fuse' found

configure:19527: $? = 1

configure:19542: $PKG_CONFIG --exists --print-errors " fuse "

Package fuse was not found in the pkg-config search path.

Perhaps you should add the directory containing `fuse.pc'

to the PKG_CONFIG_PATH environment variable

No package 'fuse' found

configure:19545: $? = 1

No package 'fuse' found

看起来是/etc/ld.so.conf里的路径没有包含fuse.pc,所以搜索:

[root@LFS6 ~/cryptofs-0.6.0]$find / -name "fuse.pc"

/usr/local/lib/pkgconfig/fuse.pc

原来fuse.pc在/usr/local/lib/下新建了pkgconfig一个文件,所以

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

再./configure,可以看到

checking for FUSE... yes

表示配置fuse已经没有问题了。

make && make install && cd ..



总的来说:

tar xvf cryptofs-0.6.0.tar.tar && cd cryptofs-0.6.0 && export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ && ./configure && make && make install && cd ..

这就可以安装了



5.如何加密

mkdir /root/encrytedfilestest

mkdir /mnt/mencrytedfile

cp cryptofs-0.6.0/cryptofs.conf encrytedfilestest/.cryptofs

.cryptofs是你要用的加密配置,可以根据要求去调。



[root@LFS6 ~]$cryptofs --root=/root/encrytedfilestest /mnt/mencrytedfile

cryptofs: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory



ldconfig更新/etc/ld.so.conf



再运行cryptofs --root=/root/encrytedfilestest /mnt/mencrytedfile就可以了。

到现在为止,已经把fuse和cryptofs安装好了,并且建立了source文件夹/root/encrytedfilestest和dest文件夹/mnt/mencrytedfile。以后的要运行的程序放到/mnt/mencrytedfile里,自动的会在/root/encrytedfilestest里生成一个加密的文件。比如现在我把一个叫test的可执行文件拷贝到/mnt/mencrytedfile里:

[root@LFS6 ~]$ls /mnt/mencrytedfile/

test

[root@LFS6 ~]$ls /root/encrytedfilestest/

yi+j9g==

[root@LFS6 ~]$cd /mnt/mencrytedfile/

[root@LFS6 /mnt/mencrytedfile]$./test

1, 2, 3, 4

可以看到test是可以执行的。



不用的时候,可以:

[root@LFS6 /mnt/mencrytedfile]$cd ~

[root@LFS6 ~]$umount /mnt/mencrytedfile





[root@LFS6 ~]$ls /mnt/mencrytedfile/

[root@LFS6 ~]$ls /root/encrytedfilestest/

yi+j9g==

这样就实现了加密了。如果想使用test,那么

[root@LFS6 ~]$cryptofs --root=/root/encrytedfilestest /mnt/mencrytedfile

Enter password:(如果输入密码错误)

可以看到你还是不能执行test

[root@LFS6 ~]$ls /mnt/mencrytedfile/

?U#?



密码对的时候才可以执行:

[root@LFS6 ~]$umount /mnt/mencrytedfile/

[root@LFS6 ~]$cryptofs --root=/root/encrytedfilestest /mnt/mencrytedfile

Enter password:

[root@LFS6 ~]$ls /mnt/mencrytedfile/

test

[root@LFS6 ~]$/mnt/mencrytedfile/test

1, 2, 3, 4



这样就实现了加密。

总的来说:

ldconfig

mkdir /root/encrytedfilestest

mkdir /mnt/mencrytedfile

cp cryptofs-0.6.0/cryptofs.conf encrytedfilestest/.cryptofs

cryptofs --root=/root/encrytedfilestest /mnt/mencrytedfile



运行的东西拷贝到/mnt/mencrytedfile下,并在这个目录下运行,不用的时候:

umount /mnt/mencrytedfile/

想再用就再执行一次:

cryptofs --root=/root/encrytedfilestest /mnt/mencrytedfile
文章评论

共有 0 条评论