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

时间:2016-04-19 08:30:03

标签: windows popup windows-10 executable

在Windows 10上创建名为 main.exe 的程序或将程序重命名为 main.exe 时,程序将显示如下所示的弹出窗口:< / p>

some pop up in Notepad++ how wonderfull is that?

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

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

Appuyer sur Win + G pour ouvrir la barre jeu

Press Win + G to open Game bar

- 屏幕截图一:

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

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

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

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

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

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

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

注意: BoltClock也测试了它(在物理机器上)并发现,在他的机器上,这种行为只发生在&#34; Main.exe&#34;而在我的机器上,行为发生的任何可能是&#34; main&#34;的大写/小写分布。 (IE:它适用于main.exe,Main.exe甚至MaIN.exe)

1 个答案:

答案 0 :(得分:3)

我周末做了一些挖掘工作,我发现了超过2000个特殊的exe名称会引发相同的行为,而不只是main.exe

Explorer有一个名为BroadcastDVR的组件(位于twinui dll中),在创建进程时,它会将可执行属性与游戏的“商店”进行比较,并将启动{{1}如果有匹配。

我没有设法确定比较的位置,因为它隐藏在RPC调用之后,这是一个要反转的PITA。

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

enter image description here

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

  • 只有可执行文件名匹配的“简单”文件。      例如:main.exemain.exe

  • 更复杂的一个,在可执行文件名和存储exe的路径上匹配必须包含一些字符串。      例如:ai.exe必须位于acu.exe的子文件夹中。

  • 有些条目有额外的字符串可供匹配,但我还没有找到如何为他们触发游戏DVR弹出窗口。

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

这是模板(you can install 010 Editor from here,我认为有一个评估期):

Assassin's Creed Unity

如果该行为让您烦恼,您可以通过将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"); 注册表项设置为0来全局禁用它。它位于ShowStartup

我还没有找到如何通过触发它来专门禁用可执行文件,但我可以通过查看HKEY_CURRENT_USER\Software\Microsoft\GameBar中的机器代码来实现。

安全问题

我们可以通过更改可执行文件的名称来启动进程。那可能很危险。

游戏启动器命令行位于twinui,需要管理员级别才能写入,因此此处不存在UAC或完整性级别旁路。

(我没有找到来自msdn的授权链接,所以这里有一个SO答案确认它:What registry access can you get without Administrator privleges?