📄 dmsecurity.cpp
字号:
// DMSecurity.cpp : 定义 DLL 的初始化例程。
//nstorm at 2007-3-26
#include "stdafx.h"
#include "DMSecurity.h"
#include ".\dmsecurity.h"
#include "stdio.h"
//
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif
//
// 注意!
//
// 如果此 DLL 动态链接到 MFC
// DLL,从此 DLL 导出并
// 调入 MFC 的任何函数在函数的最前面
// 都必须添加 AFX_MANAGE_STATE 宏。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
//
// 有关其他详细信息,
// 请参阅 MFC 技术说明 33 和 58。
//
// CDMSecurityApp
//
//BEGIN_MESSAGE_MAP(CDMSecurity, CWinApp)
//END_MESSAGE_MAP()
// CDMSecurityApp 构造
CDMSecurity::CDMSecurity()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
CDMSecurity::~CDMSecurity()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CDMSecurity对象
//CDMSecurity theApp;
// CDMSecurityApp 初始化
//BOOL CDMSecurity::InitInstance()
//{
// CWinApp::InitInstance();
// return TRUE;
//}
bool CDMSecurity::EncryptRC4File(LPCTSTR resourceFile, LPCTSTR outFile, char* pwd)
{
//try
//{
if(resourceFile==""||outFile=="")
return false;
CFileFind ff;
BOOL bContinue = ff.FindFile(resourceFile);
if(!bContinue)
{
return false;
}
int endlen=10;
int j=0,i=0;
char *End;
long filelen;
int t,keylen;
BYTE Y;
char *keys;
BYTE s[256];
CFile* fs;
keys=GetKey(pwd);
for(i=0;i<256;i++)
{
s[i]=i;
}
fs=new CFile(resourceFile,CFile::modeRead|CFile::typeBinary);
filelen=fs->GetLength();
End=new char[endlen];
BYTE *inputByteArray;
inputByteArray =new BYTE[filelen+endlen];
fs->Read(inputByteArray,filelen);
fs->Close();
delete fs;
if(filelen>endlen)
{
for(i=0;i<endlen;i++)
{
End[i]=inputByteArray[filelen-endlen+i];
}
CString str=CString(End);
if(str.Left(endlen)==":nstormencrypt")
{
CopyFile(resourceFile,outFile,true);
delete End;
delete inputByteArray;
delete keys;
return true;
}
}
keylen=strlen(keys);
for(i=0;i<255;i++)
{
j=(j+s[i]+keys[i%keylen])%256;
Swap(s[i],s[j]);
}
j=0;
i=0;
for(int x=0;x<filelen;x++)
{
i = (i + 1) % 256;
j = (j + s[i]) % 256 ;
Swap(s[i],s[j]);
t = (s[i] + (s[j] % 256))% 256 ;
Y = s[t];
inputByteArray[x]=(BYTE)(inputByteArray[x]^Y);
}
End=":nstormencrypt";
for(i=0;i<strlen(End);i++)
{
inputByteArray[filelen+i]=End[i];
}
fs=new CFile(outFile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
fs->Write(inputByteArray,filelen+endlen);
fs->Close();
delete fs;
delete End;
delete inputByteArray;
return true;
//}
//catch(...)
//{
// return false;
//}
}
bool CDMSecurity::DecryptRC4File(LPCTSTR resourceFile, LPCTSTR outFile, char* pwd)
{
//try
//{
if(resourceFile==""||outFile=="")
return false;
CFileFind ff;
BOOL bContinue = ff.FindFile(resourceFile);
if(!bContinue)
{
return false;
}
int endlen=10;
int j=0,i=0;
char *End;
long filelen;
int t,keylen;
BYTE Y;
char *keys;
BYTE s[256];
CFile* fs;
keys=GetKey(pwd);
for(i=0;i<256;i++)
{
s[i]=i;
}
fs=new CFile(resourceFile,CFile::modeRead|CFile::typeBinary);
filelen=fs->GetLength();
End=new char[endlen];
BYTE *inputByteArray;
inputByteArray =new BYTE[filelen];
fs->Read(inputByteArray,filelen);
fs->Close();
delete fs;
if(filelen>endlen)
{
for(i=0;i<endlen;i++)
{
End[i]=inputByteArray[filelen-endlen+i];
}
CString str=CString(End);
if(str.Left(endlen)!=":nstormencrypt")
{
CopyFile(resourceFile,outFile,true);
delete End;
delete inputByteArray;
return true;
}
}
keylen=strlen(keys);
for(i=0;i<255;i++)
{
j=(j+s[i]+keys[i%keylen])%256;
Swap(s[i],s[j]);
}
j=0;
i=0;
for(int x=0;x<filelen-endlen;x++)
{
i = (i + 1) % 256;
j = (j + s[i]) % 256 ;
Swap(s[i],s[j]);
t = (s[i] + (s[j] % 256))% 256 ;
Y = s[t];
inputByteArray[x]=(BYTE)(inputByteArray[x]^Y);
}
fs=new CFile(outFile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
fs->Write(inputByteArray,filelen-endlen);
fs->Close();
delete fs;
delete End;
delete inputByteArray;
return true;
//}
//catch(...)
//{
// return false;
//}
}
void CDMSecurity::Swap(BYTE b1, BYTE b2)
{
BYTE temp;
temp=b1;
b1=b2;
b2=temp;
}
char *CDMSecurity::GetKey(char *pwd)
{
if(pwd==NULL||pwd=="")
pwd="nstorm2#password$";
return pwd;
}
char * CDMSecurity::DecryptRC4String(char * inputString, char * pwd)
{
int j=0,i=0;
long instrlen;
int t,keylen;
BYTE Y;
char *keys;
BYTE s[256];
keys=GetKey(pwd);
keylen=strlen(keys);
for(i=0;i<255;i++)
{
j=(j+s[i]+keys[i%keylen])%256;
Swap(s[i],s[j]);
}
j=0;
i=0;
instrlen=(CString(inputString)).GetLength();
for(int x=0;x<instrlen;x++)
{
i = (i + 1) % 256;
j = (j + s[i]) % 256 ;
Swap(s[i],s[j]);
t = (s[i] + (s[j] % 256))% 256 ;
Y = s[t];
inputString[x]=(BYTE)(inputString[x]^Y);
}
delete keys;
return inputString;
}
char * CDMSecurity::EncryptRC4String(char * inputString, char * pwd)
{
return DecryptRC4String(inputString,pwd);
}
int CDMSecurity::FileIsEncrypted(LPCTSTR filePath)
{
//try
//{
if(filePath==""||filePath=="")
return false;
CFileFind ff;
BOOL bContinue = ff.FindFile(filePath);
if(!bContinue)
{
return false;
}
char * End;
int endlen=10;
long filelen;
CFile* fs;
int i;
fs=new CFile(filePath,CFile::modeRead|CFile::typeBinary);
filelen=fs->GetLength();
End=new char[endlen];
BYTE *inputByteArray;
inputByteArray =new BYTE[filelen];
fs->Read(inputByteArray,filelen);
fs->Close();
delete fs;
if(filelen>endlen)
{
for(i=0;i<endlen;i++)
{
End[i]=inputByteArray[filelen-endlen+i];
}
CString str=CString(End);
if(str.Left(endlen)==":nstormencrypt")
{
delete End;
delete inputByteArray;
return true;
}
}
delete End;
delete inputByteArray;
return false;
//}
//catch(...)
//{
// return false;
//}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -