Qual è un buon metodo per interrogare i processi per il loro aiuto o l'origine del framework, specialmente in Windows?

1

Qual è un buon metodo per interrogare i processi per il loro aiuto o l'origine del framework, specialmente in Windows?

Ho un modulo di test automatizzato che interroga i binari che si adattano a un modello di nome speciale con --help per vedere quale framework di test, se esiste, è stato usato per compilare quel binario di test, in modo che possa dare un comando speciale a seconda sull'obiettivo della modalità test.

Il problema è che dal momento che non sarà usato solo da me, prevedo che i binari che richiedono l'interazione manuale prima di uscire saranno attivati per la legge di Murphy e successivamente non riescono ad uscire da soli.

Preferirei che il mio modulo fosse abbastanza robusto per gestire questo scenario, quindi ho pensato di avviare quel processo all'interno di un altro processo, ottenere il suo PID e impostare una sorta di modello di osservatore per monitorarlo in modo significativo nel tempo o eventi attivati , quale che sia il primo.

Non prevedo problemi con questo, il che mi preoccupa :) Mi sento come se mi mancasse un'importante caso d'angolo attualmente nebuloso. Mi chiedo anche se ci sia un modo migliore per controllare i binari per le loro origini del framework usate rispetto alle query di --help per cercare i modelli di output dei messaggi della guida framework.

Mi piacerebbe davvero saltare l'intero, eseguendo i binari ciecamente per capire che tipo di binario di test sono, passo, ma non so se posso farlo in modo affidabile, dinamico, con un approccio generico.

  1. L'origine di un binario, se creata all'interno di un framework, può essere in qualche modo rilevata in un modo non specifico del framework oltre a una query di aiuto? Ciò include approcci comuni che non sono necessariamente universalmente abbracciati, o approcci comuni distribuiti da ogni quadro in modo semplice; nel senso, potrei fare una manciata di piccoli moduli per i framework supportati che sono noti. (risposta nei commenti)
  2. Se utilizzo un processo dedicato per verificare lo stato di un processo che ho avviato, posso gestire in modo sicuro tutte le risposte del processo generato? Arresti, mancanza di risposta, ecc. Roba del genere. Ad esempio, se una DLL mancante attiva un pop-up di errore anche quando viene lanciato dalla riga di comando.
posta kayleeFrye_onDeck 26.04.2017 - 22:07
fonte

1 risposta

1

OP qui, un aggiornamento che risolve la domanda:

  1. puoi rilevare alcune dipendenze per alcuni quadri di test, a seconda di come il file binario è stato creato e < em> collegato a. Le solo informazioni che puoi ottenere dal binario senza caricare e esercitarsi è questa cosa chiamata Import Table , alias Static Import Table, da non confondere con l'indirizzo di importazione Tabella, che cambia una volta caricata l'immagine. Non otterrai le DLL caricate dal processo tramite API Win32 come LoadProcess , quindi il chilometraggio varierà.

Ad esempio, se costruisco il mio strumento con la sola chiamata del batch VCVARS ed eseguendo cl.exe source.cpp /EHsc , mi daranno informazioni di dipendenza molto diverse rispetto a quando dico, faccio lo stesso esatto progetto Visual C ++ vuoto che incorpora tutto l'helper configurazioni da projName.vcxproj

Per gli assembly .NET, ho creato un'app per console snella e leggera per rilevare gli assembly .NET utilizzati per i framework di test .NET. La fonte è disponibile per la visualizzazione su SO: link

  1. Non tutti i casi d'angolo possono essere garantiti, ma la maggior parte può essere superare quando entrambi i privilegi di amministratore utilizzano taskkill nell'albero del processo per ID processo. Ho scoperto che fare chiamate di sistema come taskkill /F /T /PID %PID% e controllarne il codice di errore è un rimpiazzo perfettamente adatto per un modo programmatico di attivare un processo non rispondente in modo desiderabile

Per raggiungere il mio obiettivo generale per questa domanda, ho creato due moduli C ++;

Il primo era un'utilità della riga di comando per analizzare e leggere i nomi delle dipendenze della tabella di importazione PE COFF, come dumpbin e link possono fare, usando i codici di errore per aiutare a determinare se ci fossero dipendenze o meno, quindi strumenti come findstr può essere sfruttato. Non vedo l'ora di usare ldd invece di eseguire il porting di questo sucker ... è stato un processo lungo e doloroso a causa di quanto fosse poco profondo e oscuro. Fondamentalmente ho dovuto ri-imparare la gestione della memoria di basso livello, quindi quella era effettivamente una buona cosa.

Il secondo era un'utilità della riga di comando che prendeva un nome / posizione del processo, un argomento per quanto tempo poteva durare in millisecondi e uno per quanto spesso lo interrogava in millisecondi; quindi un ulteriore argomento facoltativo per prendere una lista di parametri racchiusa tra virgolette. Il kill-timer è assoluto, ma l'ho codificato in modo che i codici di uscita ti permettano di sapere come è finito il processo. Tutto verificando i codici di uscita, ti consente di sapere se: * Processo uscito da solo, non zero * Il processo è terminato alla sua accensione, zero * Il processo doveva essere forzato alla morte * Il processo non è stato avviato * L'utente ha richiesto l'aiuto

Che copre tutti i casi a cui potevo pensare in quel momento.

Nel complesso questo processo ha richiesto molto più tempo del previsto, a causa del trattamento con il materiale PE COFF. Se ti trovi in scarpe simili, vedi se riesci a trovare un progetto open source che utilizza uno stack che giochi bene con il tuo.

Ho anche trovato che le seguenti risorse sono davvero utili quando si cerca di capire il PE COFF:

A. Visualizzazione del formato file PECOFF
B. Disorganizzazione di disassemblaggio X86
C. Analisi file eseguibili (Analisi forense di Windows ) Parte 2

Menzione d'onore che potrebbe causare mal di testa a causa della datazione:

D. Peering Inside the PE: un tour del formato di file eseguibile portatile Win32 di Matt Pietrek, marzo 1994, Microsoft Systems Journal

    
risposta data 25.05.2017 - 01:06
fonte

Leggi altre domande sui tag