随机数/MD5加密后以网页形式打开

// IEPOPUP.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "string"
#include "time.h"
#include "windows.h"
#include <shlobj.h>
#include "iostream"
#include "vector"
#include "md5.h"
#include "Base64.h"
#include "shlwapi.h"
using namespace std;


//隐藏控制台
#pragma comment (linker, "/ENTRY:mainCRTStartup") 
#pragma comment (linker, "/subsystem:windows") 


//escape算法
string& js_escape(string &str)
{
setlocale(LC_CTYPE,"");
wchar_t aa[1<<10];
mbstowcs(aa,str.c_str(),str.size());
wstring wcs(aa);
str = "";
for(int i=0; i<wcs.size() ;i++)
{
if(wcs[i]>0xff)
{
char tmp[5];
sprintf(tmp,"%x",wcs[i]);
str += "%u";
str += tmp;
}
else
{
if( (wcs[i]>='a' && wcs[i]<='z') || (wcs[i]>='A' && wcs[i]<='Z') || ( wcs[i]>='0' && wcs[i]<='9' ) )
{
char tmp[2];
sprintf(tmp,"%c",wcs[i]);
str += tmp;
}
else
{
char tmp[3];
sprintf(tmp,"%02x",wcs[i]);
str += "%";
str += tmp;
}
}
}
return str;
}

*函数功能:1.获取系统临时文件夹路径
*   2.将拷贝前程序路径记录注册表
*   3.拷贝自身到此目录
**********************************************/
void GetTemp()
{
char ExePath[MAX_PATH]; 
char FileName[MAX_PATH]; 


GetModuleFileName(NULL,   ExePath,   MAX_PATH); 
GetFileTitle(ExePath,   FileName,   MAX_PATH);


if( strcmp( FileName,_T("IEPOPUP.exe")) == 0 )
{
//获取系统临时文件夹路径
char strTempPath[MAX_PATH];
// SHGetSpecialFolderPath(NULL,strTempPath,CSIDL_COMMON_TEMPLATES,false);
GetTempPath(MAX_PATH,strTempPath);


//路径记录注册表
char strFilePath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,strFilePath);


HKEY hKey;
if(::RegOpenKeyEx(HKEY_CURRENT_USER,_T("Software\\CMSoftware"),0,KEY_SET_VALUE | KEY_READ |KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS)
{
if(::RegSetValueEx(hKey,_T("FilePath"),0,REG_SZ,(LPBYTE)strFilePath,sizeof(strFilePath)) == ERROR_SUCCESS)
{
::RegCloseKey(hKey);
}
}
strcat(strFilePath,_T("\\IEPOPUP.exe"));

//拷贝自身到临时文件夹
strcat(strTempPath,_T("\IEPOPUP.exe"));
if(CopyFile(strFilePath,strTempPath,FALSE)==0)
{
return;
}
}
}


//*函数功能:产生数字和字母的随机数
*函数参数:strRandom保存随机数
void GetRandom(string& strRandom)
{
strRandom ="";
char cRandn[10] = {'0','1','2','3','4','5','6','7','8','9'};
char cRandc[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
srand((UINT)time(NULL));
for(int i=0;i<8;++i)
{
if(rand()%2 == 1)
{
strRandom += cRandn[rand()%10];
}
else
{
strRandom += cRandc[rand()%26];
}
}
}

void GetMobile(string& strMoblie)
{
char strFilePath[MAX_PATH];


//读取注册表中的程序目录
HKEY hKey;
WIN32_FIND_DATA FFD;
DWORD BufferSize = sizeof(strFilePath);
if(::RegOpenKeyEx(HKEY_CURRENT_USER,_T("Software\\CMSoftware"),0,KEY_SET_VALUE | KEY_READ |KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS)
{
if(::RegQueryValueEx(hKey,_T("FilePath"),NULL,NULL,(LPBYTE)strFilePath,&BufferSize) == ERROR_SUCCESS)
{
::RegCloseKey(hKey);
}
}


//查找程序目录的所有手机号码
int nNum = 0;
vector<WIN32_FIND_DATA> vecMoblie;
BOOL Isfinished = FALSE;
vecMoblie.clear();
strcat(strFilePath,_T("//**"));
HANDLE hFile = FindFirstFile(strFilePath,&FFD);
if( hFile ==  INVALID_HANDLE_VALUE )
{
return;
}
while(!Isfinished)
{
//判断文件名是否11位全数字
int i = 0;
char IsMoblie[]={"00000000000"};
char cNum[11]="0123456789";
char* pFileNmae = FFD.cFileName;
char* pNum = cNum;
while( pFileNmae[i] !='\0' )
{
int j=0;
while( pNum[j]!= '\0')
{
if(pFileNmae[i] == pNum[j])
{
IsMoblie[i] = '1';
break;
}
j++;
}
i++;
}
if(strcmp(IsMoblie,"11111111111") == 0)
{
vecMoblie.push_back(FFD);
nNum++;
}


if( !FindNextFile(hFile,&FFD) )
{
if(GetLastError() == ERROR_NO_MORE_FILES)
{
Isfinished = TRUE;
}
}
}


FindClose(hFile);


//没有号码登陆过则返回
if(vecMoblie.size() == NULL)
{
return;
}
else
{
//遍历出最近登录过的号码
vector<WIN32_FIND_DATA>::iterator iter = vecMoblie.begin();
while(vecMoblie.size() != 1)
{
int nReg;
nReg = CompareFileTime(&iter->ftLastWriteTime,&(iter+1)->ftLastWriteTime);
if ( nReg == -1)
{
vecMoblie.erase(iter);
}
if( nReg == 1)
{
vecMoblie.erase(iter+1);
}
if(iter == vecMoblie.end())
{
iter == vecMoblie.begin();
}
}
strMoblie = iter->cFileName;
}
}


void GetMD5(string& strMD5,string& strMoblie,string& strRandom,string& strPasswd)
{
//MD5加密
MD5_CTX stMD5_CTX;
char szMD5Digest[ 3 ] = { 0 };
strMD5 = strMoblie + strRandom +strPasswd;
char mdBuf[MAX_PATH];
strcpy(mdBuf,strMD5.c_str()); 

MD5Init(&stMD5_CTX);
MD5Update(&stMD5_CTX,(unsigned char*)mdBuf,sizeof(mdBuf));
MD5Final(&stMD5_CTX);


strMD5 = _T("");
for( int i( 0 ); i < 16; ++i )
{
sprintf( szMD5Digest, _T( "%02X" ), stMD5_CTX.digest[ i ] );
strMD5.append( szMD5Digest, 2 );
}


// cout<<"签名: "<<mdBuf<<endl<<endl;
// cout<<"MD5: "<<strMD5<<endl<<endl;


//Base64转换
Base64 base;
string strBaseEn = base.base64_encode(strMD5);
// string strBaseDe = base.base64_decode((unsigned char*)mdBuf,sizeof(mdBuf));


//escape转换
string strEscape = strBaseEn;
js_escape(strEscape);


// cout<<"Base64: "<<strBaseEn<<endl<<endl;
// cout<<"escape: "<<strEscape<<endl;
strMD5 = strEscape;
}

void OpenIE(const string& strRandom,const string& strMoblie,const string& strMD5)
{
char ExePath[MAX_PATH]; 
char FileName[MAX_PATH]; 


GetModuleFileName(NULL,   ExePath,   MAX_PATH); 
GetFileTitle(ExePath,   FileName,   MAX_PATH);


if( strcmp( FileName,_T("IEPOPUP.exe")) == 0 )
{
string strURL;
strURL = _T("www.baidu.com");
strURL += strRandom;
strURL += _T("&mobile=");
strURL += strMoblie;
strURL += _T("&sign=");
strURL += strMD5;


ShellExecute(NULL,"open",strURL.c_str(),NULL,NULL,SW_SHOW);
}

int _tmain(int argc, _TCHAR* argv[])
{
string strRandom; //随机数
string strMobile; //手机号
string strPasswd = _T("456123"); //密码
string strMD5; //MD值

GetTemp();
GetRandom(strRandom);
GetMobile(strMobile);
GetMD5(strMD5,strMobile,strRandom,strPasswd);
  OpenIE(strRandom,strMobile,strMD5);


return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值