Windows' Permission 1.5






2.71/5 (6投票s)
此程序可以保护和锁定Windows中的所有窗口,并轻松加密文件。
引言
市面上有很多安全程序,它们以各种形式锁定、加密文件等,但有时使用它们并不容易,而且耗时。此外,其中一些程序非常臃肿且运行缓慢。
这总是促使我想自己开发一个快速、简单且强大的程序。因此,我决定设计一个程序,它可以保护和锁定Windows中的所有窗口,并轻松加密任何文件,即使是大文件。我认为我的程序非常有用。
特点
- 占用内存和硬盘空间少。
- 只需几次点击即可快速完成工作。
- 不更改文件数据。
- 具有良好且合适的安全性。
- 锁定所有格式的文件。
- 锁定出现的每个窗口。
- 集成到资源管理器中,界面美观。
- 就像一个小工具。
- 使用不可逆算法加密文件。
- 可以在XP、Vista和7上运行。
- 无需外部程序或库,如.NET Framework。
- 适用于所有用户,即使您稍后添加用户或使用受限用户帐户。
- 安装速度非常快。
主要部分一:锁定文件
这工作起来很快,因为当您锁定一个文件时,程序会保持文件处于打开状态,并且不更改文件数据。它简单明了,不允许用户打开、删除、移动、重命名、复制或剪切文件。除非您解锁文件,否则无法进行任何操作。程序在启动时(系统加载时)运行。它不是系统驱动程序。
主要部分二:加密文件
此程序包含两种加密算法。第一种是通用算法,第二种是不可逆算法。即使您加密一个大文件并在程序运行时取消,您仍然可以解密不完整的文件。
主要部分三:锁定窗口
这部分非常有用,并且是一个新的安全主题。您是否曾想过,如果我们没有可执行文件,如何锁定一个窗口,例如“开始菜单”、“操作中心”、“系统属性”、“音量合成器”以及其他重要窗口。
源代码
此单元中有三个程序:安装程序、主程序、守护程序。
安装程序
要运行应用程序,我们首先需要安装必需的文件,或者将这些文件放在我们的程序旁边(同一目录)。我们通过安装程序来完成此操作。文件包括:
- "mfc100ud.dll" 和 "msvcr100d.dll" 放到 "windows\system32" 目录
- "calibri.ttf" 放到 "windows\fonts" 目录
由于安装程序必须可执行,我们将这些文件放在 Installer.exe 旁边。然后,为了安装这些文件,我们需要检测 "Windows 盘符"。为此,我们使用下面的代码,并且由于这是第一次需要,我们将其放在 OnInitDialog
函数中。“OnInitDialog
”会执行其中编写的所有代码。我们将以下变量定义为全局变量。
CString address,pathi,pathw,os,osd;
bool bos=1;
CFile f;
TCHAR tc[260];
BOOL CWindowssPermission1InstalerDlg::OnInitDialog(){
CDialogEx::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
SetBackgroundColor(RGB(101,158,224)); //Set Background Color
TCHAR tc[260];GetWindowsDirectory(tc,260);osd=tc; //Get Windows Directory
GetCurrentDirectory(260,tc);pathw=tc; //Get Current Directory
return TRUE; // return TRUE unless you set the focus to a control
}
下一步是确定操作系统:XP、Vista 或 7,然后将其存储在 "os
" 变量中,最后存储在 "wu
"(Windows 用户文件夹)文件中。主程序使用它。
为了获取文本,我们定义了一个名为 "CinputBox
" 的类并使用它。之后,程序需要一个安全密码才能运行、卸载和管理程序。我们将密码保存在 "MicM.dll" 中。而在 "MicN.dll" 中,我们保存 "Windows 用户目录",因为主程序会使用它。我们使用这些来判断程序是否已安装。这是一种关联。为了提高安全性,我们需要在启动时加载程序,因此我们创建一个带有设置的 ".reg" 文件。
主程序
加密、锁定和基本应用程序都在这部分。有多个部分,"Explorer"(资源管理器)、"Icon Tray"(图标托盘)、"Lock"(锁定)等等。我们有这些全局变量。
const int filecount=10000,windowcount=10000;
CRect rc[29],r1/*Rect of Window*/,r2/*Rect of Operation System*/;
CPoint p1,pc/*Point of Cursor*/;
CString pathw/*Path of Window*/,pathe/*Path of Explorer*/
,tic/*Type of Central Item*/,til/*Type of Left Item*/
,nic/*Name of Center Item*/,nir/*Name of Right Item*/
,nil/*Name of Left Item*/,tir/*Type of Right Item*/
,plf[filecount]/*Passwords of Files*/,pplf[filecount]/*Paths of Files*/
,wl[windowcount][2]/*Window Lock*/
,pfc/*Path of File Copy/Cut*/,os;
int cc=0/*Stop OnPaint*/,c/*List Count*/,b=-1/*Button Press*/,w=112/*Window Width*/
,h=211/*Window Height*/,ow=150/*Opacity Window Timer*/
,dx1=-8,dy1=-93,xw=0,yw=0,ifc=0/*Index of Center Item*/,tf[filecount][2]
,tw[windowcount]/*ask for passwoord*/,lcfu=0,ccf=0/*Copy=0,Cut=1*/
,locktime=0;
bool s1=1/*Start Opacity*/,s2=0/*Status of Window*/,active=1;
CImage i1/*Back Ground 1*/,il/*Left Item*/,ic/*Central Item*/,ir/*Right Item*/;
COLORREF cl=RGB(0,162,232);
CFile lf[filecount]/*Lock Files*/,fq,fz;
HWND hd=0;
OnInitDialog 函数中执行的一些任务包括:
- 程序是否已加载?如果是,则退出。
- 程序是否已卸载或损坏?如果是,则退出。
- 加载程序目录。
- 从
xw
和yw
加载程序坐标,包括应用程序在屏幕上的 **X** 和 **Y** 坐标。 - 从
qw
文件加载 Windows 密码及其名称。 - 从
zw
文件加载文件密码及其名称。 - 从
tw
文件加载自动锁定时间。 - 从
wu
文件加载 Windows 用户目录。 - 启动守护程序。
- 加载图标托盘。
在 OnTrayNotify
中,我们管理图标托盘和菜单。
我们在 OnPaint
中设计和加载背景及资源管理器外观。当应用程序需要重绘时,操作系统会调用此函数。
OnTimer
是最重要的函数。它包括锁定、加密和窗口移动。操作系统会自动以特定间隔调用“OnTimer
”。顺便说一句,我没有在对话框中使用任何按钮。我认为这种方法更好,因为它质量更高,并且占用的内存空间更少。当然,如今这已经不重要了。而且,我们可以设计我们心中想要的任何东西。我为每个按钮定义了矩形。
IsNear
是一个检查一个点是否在一个矩形内的函数。在 OnMouseMove
中,如果光标位于矩形之一内,我们将一个关系号放入一个全局变量,然后在 OnLButtonDown
中运行关系代码。
GetCursorPos(&pc);//get curent coordinates of cursor and put in "pc"(pointer cusrsor)
if(IsNear(pc.x,pc.y,r1,50)){
int x=0,y=0;x=pc.x-r1.left-dx1;y=pc.y-r1.top-dy1;
if(ow<255&&s1){SetTimer(3,10,0);s1=0;} //Start Opacity Window 255
if(IsNearX(x,y,rc[0],1))b=0; //Computer
else if(IsNearX(x,y,rc[1],1))b=1; //Desktop
else if(IsNearX(x,y,rc[2],1))b=2; //My Documents
else if(IsNearX(x,y,rc[3],1))b=3; //My Videos
else if(IsNearX(x,y,rc[4],1))b=4; //My Music
else if(IsNearX(x,y,rc[5],1))b=5; //My Pictures
else if(IsNearX(x,y,rc[6],1))b=6; //My Favorites
else if(IsNearX(x,y,rc[7],1))b=7; //Links
else if(IsNearX(x,y,rc[8],1))b=8; //microsoft.com
else if(IsNearX(x,y,rc[9],1))b=9; //linux.com
else if(IsNearX(x,y,rc[10],1))b=10; //google.com
else if(IsNearX(x,y,rc[11],1))b=11; //Close
else if(IsNearX(x,y,rc[12],1))b=12; //Minimize
else if(IsNearX(x,y,rc[16],1))b=16; //Make Folder
else if(IsNearX(x,y,rc[17],1))b=17; //Lock
else if(IsNearX(x,y,rc[18],1))b=18; //UnLock
else if(IsNearX(x,y,rc[19],1))b=19; //Copy
else if(IsNearX(x,y,rc[20],1))b=20; //Cut
else if(IsNearX(x,y,rc[21],1))b=21; //Past
else if(IsNearX(x,y,rc[22],1))b=22; //Delete
else if(IsNearX(x,y,rc[23],1))b=23; //Rename
else if(IsNearX(x,y,rc[25],1))b=25; //Back
else if(IsNearX(x,y,rc[26],1)&&!s2)b=26; //UnLock Out
else if(IsNearX(x,y,rc[27],1)&&!s2)b=27; //Lock Out
else if(IsNearX(x,y,rc[28],1))b=28; //Option
else {b=-1;}
LoadToTray
函数在任务栏上设置图标以使用菜单。加密和解密代码在此处显示。
inline CString encrypt(CString str){
CString s1(_T(""));USES_CONVERSION;unsigned char c1=0;char *c=0;
for(register int i=str.GetLength()-1;i>=0;i--){
c1=0;c=0;c=T2A(str.Mid(i,1).GetBuffer());c1=*c;
unsigned char i1=((int)c1),i2,i3,i4;int i5;i2=i3=i4=i5=i1;
i2*=2;i2/=128;i2=!i2;i2*=64;/*7th bit*/i3/=128;
i3*=128;/*8th bit*/i4*=4;i4/=4;/*(1-6)th bit*/
i5=255-(i2+i3+i4)+1;s1+=((char)i5);
}
return s1;
}
密码学
我应用的加密逻辑是:
inline CString encrypt(CString str){
CString s1(_T(""));USES_CONVERSION;unsigned char c1=0;char *c=0;
for(register int i=str.GetLength()-1;i>=0;i--){
c1=0;c=0;c=T2A(str.Mid(i,1).GetBuffer());c1=*c;
unsigned char i1=((int)c1),i2,i3,i4;int i5;i2=i3=i4=i5=i1;
i2*=2;i2/=128;i2=!i2;i2*=64;/*7th bit*/i3/=128;
i3*=128;/*8th bit*/i4*=4;i4/=4;/*(1-6)th bit*/
i5=255-(i2+i3+i4)+1;s1+=((char)i5);
}
return s1;
}
解密逻辑:
CString dec(CString str){
CString s1(_T(""));USES_CONVERSION;unsigned char c1=0;char *c=0;
for(register int i=str.GetLength()-1;i>=0;i--){
c1=0;c=0;c=T2A(str.Mid(i,1).GetBuffer());c1=*c;
unsigned char i1=255-((int)c1)+1,i2,i3,i4,i5;i2=i3=i4=i5=i1;
i2*=2;i2/=128;i2=!i2;i2*=64;i3/=128;i3*=128;i4*=4;i4/=4;
i5=i2+i3+i4;s1+=i5;
}
return s1;
}
守护程序
这部分只有一个职责。如果主程序关闭,它会打开它。Find
函数查找主程序的句柄,并使用 IsWindow
检查它是否打开。请看下面的代码。
if(!Find()){
ShellExecute(0,0,pathw+_T("\\Windows's Permission 1.exe"),0,0,1);
}
技术
关于安全实现,我使用了一种称为Nod32的技术。程序由两个部分组成:主程序和守护程序。它将文件保持在读取模式,并且不关闭它们来锁定它们。如果您解锁了一个文件或窗口,但忘记再次锁定它,锁定将自动激活。
//Load automatically Lock Time
if(fd.Open(pathw+_T("\\Data\\tw"),CFile::modeRead)){
fd.Read(&gf[0],fd.GetLength());
locktime=atoi(gf); //set lock time automatically
for(ie=0;ie<1000000;ie++)
gf[ie]=0;
fd.Close();
}
//Load os
if(fd.Open(pathw+_T("\\Data\\wu"),CFile::modeRead)){
fd.Read(&gf[0],fd.GetLength());
os=gf;
for(ie=0;ie<1000000;ie++)
gf[ie]=0;
fd.Close();
}
局限性
不幸的是,这个程序和算法存在缺陷。
- 它不是一个系统驱动程序。这意味着如果您关闭系统或移除硬盘,文件和窗口将会打开并释放。它仅适用于始终开启的计算机,例如电信计算机,甚至网吧。
- 加密算法不够强大。