Windows 10:命名程序main.exe导致它们弹出显示

Eth*_*rog 19 windows executable popup windows-10

在Windows 10上,当我们创建一个名为main.exe的程序或将程序重命名为main.exe时,程序将显示如下所示的弹出窗口:


一些弹出的Notepad ++有多棒?


有两种不同的弹出窗口可以显示:

- 游戏栏一(法语和英语版):

Appuyer sur Win + G pour ouvrir la barre jeu

按Win + G打开游戏栏

- 截图一:

Appuyer sur Win + Alt +Impr.écranpourprendre une capture d'écran

(英文:按Win + Alt + PrintScreen截图)


我最初在使用python和cx_freeze时发现了这个问题,

我已经在多个程序上测试了这个,包括(如上所示)将notepad ++.exe重命名为main.exe,每次都弹出一个,

我们还可以注意到弹出窗口出现(一个弹出游戏,然后弹出一个sreenshot,然后弹出一个游戏......)

我通过虚拟盒运行windows10,但如下所述,问题也发生在物理机器上.

对这是怎么发生的任何想法?

注: BoltClock也测试了它(在物理机上),结果发现,他的机器上的这种行为只能用"MAIN.EXE"同时,我的机器上的行为发生任何可能的"主/小写分布发生"(IE:它适用于main.exe,Main.exe甚至MaIN.exe)

luc*_*asg 13

我在周末进行了一些挖掘,发现了2000多个特殊的exe名称,这些名称将触发相同的行为,而不仅仅是main.exe

资源管理器具有一个称为DLL 的组件BroadcastDVR(位于twinuidll中),该组件在创建进程时会将可执行属性与游戏的“商店”进行比较,GameLauncher.exe如果存在匹配项,它将启动。

由于它隐藏在RPC调用(可反向调用的PITA)的后面,因此我无法确定比较的位置。

无论如何,explorer.exe以下文件都有一个句柄C:\Users\YOUR_USERNAME\AppData\Local\Microsoft\GamesDVR\KnownGameList.bin(中有一个副本C:\Windows\broadcastdvr),该文件列出了触发XBox记录器弹出窗口的所有特殊可执行文件。您可以在main.exe此处看到条目(条目#1007):

在此处输入图片说明

我已经写了一个010模板文件来分析条目列表,它在我的计算机上带有2089个条目。通过反转二进制文件,我看到了三种输入类型:

  • “简单”名称,其中可执行文件名称上只有一个匹配项。例如:main.exeai.exe

  • 较复杂的文件,其中可执行文件名匹配,并且exe的存储路径必须包含一些字符串。例如:acu.exe必须位于的子文件夹中Assassin's Creed Unity

  • 有些条目具有其他字符串来匹配,但是我还没有找到如何触发它们的游戏DVR弹出窗口。

注意:Win32子系统不区分大小写,因此可以理解的是可执行文件名的大小写无关紧要。

这是模板(您可以从此处安装010 Editor,我认为有一个评估期):

typedef struct  {
   BYTE Reserved[0x300];
}HEADER;

typedef struct  {
    WORD ByteLen;
    BYTE RawString[ByteLen];
    //local string sName=ReadWString(RawString);
} GAME_WSTR <read=ReadGame>;

typedef struct {
    DWORD Reserved;
    DWORD ByteLen;
    BYTE RawString[ByteLen] <fgcolor=cLtRed>;
} OPTION_STR  <read=ReadOption>;

typedef struct  {
   local int StartAddr = FTell();
   DWORD EntrySize;

   // Executable game name
   GAME_WSTR GameName <fgcolor=cLtBlue>;

   // Optional magic
   if (ReadUShort() == 0xca54)
        WORD OptReserved;

   // Optional structs based on switch values
   WORD AdditionalNamesCount;
   WORD SwitchOption2;

   // Additional names (probably like a hint).
   local int i =0;
   for (i = 0; i <  AdditionalNamesCount; i++){
        OPTION_STR Option;
        if (ReadUShort() == 0xca54)
            WORD OptReserved;
   }

   // Look for a magic
   local int Find20h = 0;
   while(!Find20h){
        Find20h = (0x20 == ReadByte());
        BYTE Res;
   }

   GAME_WSTR GameId;
   WORD Reserved;

   // Sometimes there is an additionnal name
   // sometimes not. I check the current entry
   // is at less than the EntrySize declared.
   if (FTell()-StartAddr < EntrySize)
   {
       switch (SwitchOption2)
       {
       case 3:
            OPTION_STR Option3;
            break;
       case 2:

            OPTION_STR Option2;
       case 1:
            break;
       }
    }

} ENTRY <read=ReadGameName>;

string ReadOption(OPTION_STR &Game)
{
    local wstring GameName = L"";
    local int i ;
    for (i= 0; 2*i < Game.ByteLen; i++){
        WStrcat(GameName, Game.RawString[2*i]);
    }
    return WStringToString(GameName);
}

string ReadGame(GAME_WSTR &Game)
{
    local wstring GameName = L"";
    local int i ;
    for (i= 0; 2*i < Game.ByteLen; i++){
        WStrcat(GameName, Game.RawString[2*i]);
    }
    return WStringToString(GameName);
}

string ReadGameName(ENTRY &Entry)
{
    local string GameName = ReadGame(Entry.GameName);
    local string OptionGameName = "";
    if (Entry.AdditionalNamesCount)
        OptionGameName = " : "+ReadOption(Entry.Option);

    return GameName + OptionGameName;
}

//------------------------------------------
LittleEndian();
Printf("Parse KnownGameList.bin Begin.\n");
HEADER UnkwownHeader <bgcolor=cLtGray>;
while(1)
{
    ENTRY Entry <bgcolor=cLtPurple>;
    //Printf("Entry : %s -> %d.\n",ReadGameName(Entry) ,Entry.AdditionalNamesCount);
}
Printf("Parse KnownGameList.bin End.\n");
Run Code Online (Sandbox Code Playgroud)

如果您讨厌这种行为,可以始终通过将ShowStartup注册表项设置为0 来全局禁用它HKEY_CURRENT_USER\Software\Microsoft\GameBar。它位于中。

我还没有找到如何专门禁止可执行文件触发它的方法,但是仅通过查看中的机器代码就可以实现twinui

安全事项

在这种情况下,仅通过更改可执行文件的名称就可以启动进程。那可能很危险。

游戏启动器命令行位于HKEY_LOCAL_MACHINE\Software\Microsoft\GameOverlay需要管理员级别写入的位置,因此此处无法进行UAC或完整性级别旁路。

(我没有找到来自msdn的授权链接,所以在这里提供了一个SO答案来确认它:没有管理员权限,您可以获得哪些注册表访问权限?

  • 这个...这是...他们甚至都没有打扰...我不知道该说些什么。任何名为“ Runner.exe”或“ Everything.exe”的应用程序(因此会影响搜索工具)都将受到此弹出窗口的影响,您无法禁用BTW。 (3认同)