2016-04-19 40 views
11

Su Windows 10 quando creiamo un programma chiamato main.exe o rinominare un programma per main.exe, il programma mostrerà un pop up come visto qui:di Windows 10: denominazione programmi main.exe causare loro di mostrare pop-up


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


v'è 2 diversa pop-up che può essere mostrato:

-Il gioco Bar One (francese e inglese versione):

Appuyer sur Win + G pour ouvrir la barre jeu

Press Win + G to open Game bar

-la screenshot uno:

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

(In inglese: Press Win + Alt + PrintScreen per fare uno screenshot)


Originariamente ho scoperto il problema durante l'utilizzo di Python e cx_freeze,

Ho testato questo su più programmi, tra cui (come visto sopra) rinominando Notepad ++. Exe per main.exe, e ogni volta , uno dei pop-up era lì,

possiamo anche notare che il pop-up appare alternativamente (un gioco di pop up, poi uno sreenshot pop-up, quindi un gioco pop-up ...)

corro windows10 via casella virtuale, ma come descritto di seguito, il problema si verifica anche sulle macchine fisiche.

Qualche idea su come è successo?

Nota:BoltClock testato anche (su una macchina fisica) e ha scoperto che, sulla sua macchina questo comportamento sta accadendo solo con "Main.exe", mentre, sulla mia macchina il comportamento è accaduto qualunque sia il maiuscolo/distribuzione in lettere minuscole del "main" (IE: funziona con main.exe, Main.exe o anche MaIN.exe)

+0

Questo è interessante ..... mi piacerebbe molto vedere il vostro programma in modo che io possa provarlo – danidee

+0

Hai installato Razer Game Booster o Cortex? –

+0

Non ho installato Razer Game Booster, come per Cortex, non sono sicuro, ma almeno non riesco a trovarlo. –

risposta

2

Ho fatto alcuni scavi durante il fine settimana e ho trovato oltre 2000 nomi speciali di exe che innesca lo stesso comportamento, non solo main.exe.

Explorer ha un componente chiamato BroadcastDVR (che si trova nella twinui dll) che, su un processo di creazione, metterà a confronto le proprietà eseguibili contro un "negozio" di giochi e lancerà GameLauncher.exe se v'è una corrispondenza.

Non sono riuscito a individuare dove si effettua il confronto poiché è nascosto dietro una chiamata RPC, che è una PITA da invertire.

In ogni caso, explorer.exe ha una maniglia sul seguente file C:\Users\YOUR_USERNAME\AppData\Local\Microsoft\GamesDVR\KnownGameList.bin (c'è una copia in C:\Windows\broadcastdvr) che elenca tutti i file eseguibili speciali che attivano il popup del registratore XBox.Potete vedere il main.exe entrata qui (entry # 1007):

enter image description here

Ho scritto un file di 010 template per analizzare la lista degli iscritti ed ha il suo 2089 voci sul mio computer. Da quello che ho visto invertendo il file binario, ci sono tre tipi di voci:

  • il "semplice" quella in cui c'è solo una corrispondenza sul nome del file eseguibile. Per esempio: main.exe o ai.exe

  • la più complessa in cui v'è una corrispondenza sul nome eseguibile e il percorso in cui l'exe è memorizzato must contiene alcune stringhe. Ad esempio: acu.exe deve trovarsi in una sottocartella di Assassin's Creed Unity.

  • Alcune voci hanno stringhe aggiuntive da abbinare, ma non ho trovato come attivare il popup del gioco DVR per loro.

NB: il sottosistema Win32 non fa distinzione tra maiuscole e minuscole, quindi ha senso che il caso del nome dell'eseguibile non ha importanza.

Ecco il modello (you can install 010 Editor from here, v'è un periodo di valutazione credo):

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"); 

Se che infastidire comportamento che, si può sempre disattivare globalmente impostando la chiave del Registro di ShowStartup a 0. E ' situato in HKEY_CURRENT_USER\Software\Microsoft\GameBar.

Non ho trovato come disabilitare specificamente un eseguibile dall'attivarlo, ma potrebbe essere possibile solo osservando il codice macchina in twinui.

Security importa

Abbiamo una situazione in cui siamo in grado di avviare un processo solo cambiando il nome di un file eseguibile. Potrebbe essere pericoloso.

La riga di comando del programma di avvio del gioco si trova in HKEY_LOCAL_MACHINE\Software\Microsoft\GameOverlay che richiede il livello di amministrazione in cui scrivere, quindi non è possibile eseguire l'UAC o il bypass di integrità.

(non ho trovato un collegamento autorevole da MSDN, ecco un SO rispondere confermandola: What registry access can you get without Administrator privleges?)