日期:2014-05-17  浏览次数:20757 次

Winform 加解密exe文件
我想要实现这样一个功能,就是有一个exe运行文件,我想要的是必须经过我的程序才能打开运行这个exe文件,不经过我的程序双击和单机都不会运行,怎么实现?求思路

------解决方案--------------------
还记得写C语言的控制台程序的时候,main函数是有参数的,比如main(int a,char b){}。
这样我觉得,.Net应该也支持的,也就是说,我们在外部启动的时候必须要给他传参数,然后这个软件自己验证,参数正确就运行,否则就关闭。
其实这样的操作在windows操作系统中很常见。比如好多在CMD下执行的命令其本身就是exe程序,而塔后面带着不同参数的。
------解决方案--------------------
在程序中判断它的父进程,参考http://topic.csdn.net/u/20120908/22/635223ff-21e4-456f-a897-869d832691e0.html,双击启动父进程是Explorer.exe,由你的程序打开是你的程序名。
------解决方案--------------------
很简单嘛
随便异或一下
就不是EXE格式了
然后你提供的程序负责解密
但是,这种做法必须得在硬盘生成解密后的EXE


------解决方案--------------------
比如你有一个A.exe需要通过你的C.exe才能打开的话,处理过程如下:

1.把这个编译好的A.exe程序读取到 byte[] src中,然后利用RSA非对称公钥进行加密,得到byte[] dis;
2.把这个dis写到B.exe文件中,这个B.exe不代表任何意义,只代表你的加密后生成的文件;如果别人想要打开你的B.exe就不可能了,因为

它已经不是一个可执行文件,只是你的加密后的文件;
3.下面你就需要用的C.exe来打开B.exe文件了

1)首先你需要得到这个B.exe的byte[],就是上面的dis数据;
2)用RSA私钥对dis数据进行解密,得到src;
3)使用下面的代码执行你的程序:

C# code
Assembly assembly = Assembly.Load(src);
MethodInfo mi = assembly.EntryPoint;
mi.Invoke(null, null);