好友
阅读权限10
听众
最后登录1970-1-1
|
vista或win7在UAC完全开启下,运行一个没有数字签名的未知程序,总是以橙色框提示用户,如下图:
这样很容易引起用户的警觉。一般没有数字签名或微软不信任的程序都弹出橙色框,正常程序是弹出蓝色框。
本文以十多行代码解决此问题,使其弹出蓝色框:
这个是使用本文代码后弹出的蓝色框。
再看这个:
聪明的读者已经看出来了,其实就是利用cmd后跟参数欺骗操作系统和用户。代码如下:
#include "stdafx.h"
#include "Shellapi.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
char szPath[] = "c:\\windows\\system32\\cmd.exe";
char szParam[MAX_PATH*2] = {0};
memset(szParam,0,sizeof szParam);
strcpy(szParam,"/c start ");
char szCurPath[MAX_PATH]={0};
char szShortPath[MAX_PATH]={0};
memset(szCurPath,0,MAX_PATH);
GetModuleFileName(NULL,szCurPath,sizeof(szCurPath)/sizeof(TCHAR));
GetShortPathName(szCurPath,szShortPath,sizeof(szShortPath));
strcat(szParam,szShortPath);
HANDLE hMutex = CreateMutex(NULL, false, "Process");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
return 0;
}
ShellExecute(NULL, "runas", szPath, szParam, NULL, SW_HIDE);
MessageBox(NULL, "程序已运行!", "提示", MB_OK +MB_ICONWARNING); //表示程序已运行
//在此添加功能逻辑...
return 0;
}
“//在此添加功能逻辑... ” 从这后面开始,我们就像写Win32程序一样,编写程序代码了,且无论什么程序都是以正常程序的蓝色框提示框显示。
本文虽说没有很高深的技术含量,简简单单十几行代码,但是思路和代码实现值得借鉴!
|
-
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|