Domanda:
Puoi nascondere il tuo sistema operativo dai programmi? Puoi ingannare un programma facendogli credere di essere su un sistema operativo diverso?
Wolwo
2020-03-05 01:22:30 UTC
view on stackexchange narkive permalink

Esiste un modo o un programma per far credere a un altro programma che sto utilizzando un sistema diverso?

Ad esempio, supponiamo che attualmente sia su Windows 7 a 32 bit e desidero che il programma rilevi Windows 10 64 bit o forse Windows XP.

Posso fare qualcosa di simile con l'hardware? Posso dire a un programma che sto eseguendo su un PC dall'inizio del 2003 anche se è dell'anno scorso (2019)?

Domanda piuttosto correlata: [Perché l'offuscamento del sistema operativo si difende da "È un sistema Unix!"non ampiamente implementato?] (/ q / 222839/129883)
Puoi spiegare PERCHÉ vuoi farlo?È per far funzionare un software che rilevi il sistema operativo o direttamente l'hardware?
Non puoi perché rilevare il sistema operativo di solito è più che controllare un numero;chiamando una funzione che non esiste nel sistema operativo host, il programma si bloccherà.
L'ambito di questa domanda sembra troppo ampio: è necessario chiarire se stiamo chiedendo di provare a ingannare un programma che si rifiuta di eseguire quando un semplice (e facilmente falsificabile) controllo della versione fornisce il numero sbagliato o un programma che è attivamentesfruttando un'anomalia peculiare del sistema operativo / hardware specifico, che potrebbe richiedere un'emulazione completa (inclusa l'emulazione di bug che sono stati risolti su versioni hardware / OS più recenti).La risposta più votata sulla VM sarebbe eccessiva per alcuni scenari e insufficiente per altri.
FWIW Di tanto in tanto mi occupo di software antico, ea volte in effetti indovina il suo sistema operativo host completamente sbagliato, come un programma dell'era di XP che crede che Windows 8 sia in realtà qualcosa di più vecchio di Windows 95 e come tale incompatibile
Sembra che tu stia assumendo di poter eseguire un binario per il sistema operativo * y * nel sistema operativo * z *.Questo non è generalmente vero, quindi non hai un caso in primo luogo.Per i sistemi operativi della stessa famiglia (in cui la compatibilità binaria è importante), puoi falsificare alcune chiamate di sistema per ingannare un programma.Non puoi nascondere un sistema operativo da un programma perché il programma ** richiede ** il sistema operativo per fare qualsiasi cosa.Infine, i programmi non hanno accesso diretto all'hardware, possono controllare i marchi e le stringhe dei fornitori (questo è il modo in cui vengono eseguiti i controlli antiVM economici) o le tecnologie recenti, ma ancora una volta facili da falsificare.È anche possibile testare le estensioni ISA.
Potrebbe essere più economico acquistare un vecchio hardware su eBay o in un negozio di tipo Goodwill locale.
Questo esiste.[WINE] (https://www.winehq.org/) fa sembrare Unix Windows, dal punto di vista del programma in esecuzione al suo interno.
Sette risposte:
#1
+152
Mike Ounsworth
2020-03-05 01:30:07 UTC
view on stackexchange narkive permalink

Risposta sfacciata: penso che tu stia per inventare una macchina virtuale.

Per falsificare l'hardware in modo che assomigli a una scheda madre del 2003 dovrai occuparti di cose come scrivere un livello di traduzione delle istruzioni della CPU in modo che il programma fornisca istruzioni binarie della CPU dell'era 2003 e il tuo livello le traduca in istruzioni che il tuo hardware 2019 comprende.

Per falsificare il sistema operativo in modo che assomigli a Windows 7 a 32 bit, dovrai nascondere tutti i file binari e altri file in C: \ Windows , C: \ Program File , ecc. Che fanno chiaramente parte di un'installazione di Windows 10, e invece "falsificano" un file system completo con tutti i file di Windows 7 a 32 bit. Avresti anche bisogno di un wrapper attorno al kernel di Windows 10 per fare in modo che le API del kernel accessibili al programma appaiano e si comportino come il kernel di Windows 7. cioè non puoi davvero "fingere" questo; fondamentalmente devi emulare un'installazione completamente funzionale di Windows 7 a 32 bit all'interno di Windows 10.

Quando avrai fatto tutto questo, avrai praticamente inventato le macchine virtuali . Allora perché non scarichi VirtualBox, imposti l'emulazione hardware su hardware dell'era 2003 e installi Windows 7 a 32 bit su di esso?

Se vuoi emulare specificamente una CPU 2003, probabilmente vorrai qualcosa come QEMU;AFAIK VirtualBox non supporta la selezione di set di istruzioni specifici.
Le istruzioni x86 dell'era 2003 continueranno a essere eseguite sulle macchine dell'era 2019 (in modalità a 32 bit).Non è necessaria alcuna traduzione.Ma devi ancora dirgli che sono disponibili solo le istruzioni dell'era 2003.E potresti dover generare un errore se un'istruzione successiva al 2003 viene eseguita, altrimenti il programma potrebbe rilevare che stai mentendo.
"emula un'installazione completamente funzionale di Windows 7 a 32 bit all'interno di Windows 10" - punto minore, ma penso che l'OP si riferisse al contrario ... stanno attualmente utilizzando Win7 a 32 bit e vogliono "emulare"Win10 64 bit (o WinXP).
@MrWhite Nessun problema se l'hardware supporta x64 e ha il supporto di virtualizzazione abilitato, ciò è possibile anche se il sistema operativo host è a 32 bit.Se l'hardware è VERAMENTE a 32 bit (o non dispone della capacità di virtualizzazione dell'hardware) l'unica opzione è l'emulazione completa.E non conosco nessun prodotto che possa farlo.
Sembra il progetto del vino;ma lo rendono facile da rilevare apposta.
Come ho spiegato [qui] (https://stackoverflow.com/a/23998052/103167), questo richiederebbe un * emulatore *, non semplicemente una macchina virtuale.Una macchina virtuale crea l'illusione che tu abbia la tua macchina, quando in realtà la condividi con altri (nessuna perdita di informazioni tra le VM).Un emulatore crea l'illusione di essere in esecuzione su un particolare sistema diverso dall'hardware reale (nessuna perdita di informazioni sull'hardware effettivo nell'ambiente emulato).
@user253751: Intel SDE (Software Development Emulator) può farlo: traduzione binaria dinamica (tramite libreria PIN Intel) per istruzioni che devono essere emulate come presenti o non presenti, altrimenti velocità nativa.per esempio.[Come testare le istruzioni AVX-512 senza hardware supportato?] (Https://stackoverflow.com/q/51805127) / [Codifica su hardware insufficiente] (https://stackoverflow.com/q/53637886).Tuttavia, non sono sicuro di poter emulare lo spazio utente a 64 bit in un processo a 32 bit;ovviamente i limiti dello spazio degli indirizzi virtuali sono un problema!QEMU può, ma probabilmente non SDE.
#2
+25
CBHacking
2020-03-05 15:16:15 UTC
view on stackexchange narkive permalink

A seconda del livello di "trucco" che desideri, potresti essere in grado di farlo con funzionalità di compatibilità integrate. Windows supporta l'esecuzione di programmi in modalità speciali che emulano versioni precedenti e / o hardware meno recenti in vari modi. L'emulazione non è perfetta - è abbastanza facile dire che è in uso, se guardi, e dire qual è il sistema operativo effettivo - ma soddisferà un software che pensa di poter funzionare solo su Windows 2000 o quello conosce solo la modalità a 256 colori.

Per indurre il software a pensare che sia in esecuzione su un sistema operativo completamente diverso - Linux invece di Windows o simili - la soluzione migliore (diversa da una VM) è wine (per codice Windows su Linux) o wsl (sottosistema Windows per Linux, esegue binari Linux ELF64 non modificati e script che richiedono Linux ma richiede Win10). Di nuovo, questo è abbastanza rilevabile da qualsiasi cosa lo cerchi , ma ingannerà un programma che invoca solo una chiamata di programma o libreria per sputare il nome / versione del sistema operativo.

#3
+9
520
2020-03-05 19:54:39 UTC
view on stackexchange narkive permalink

Puoi farlo fino a un certo punto, ma non sarà facile.

Prima di tutto, puoi provare WINE, un Windows Compatibility Layer per Linux. Puoi impostare la versione di Windows che desideri emulare abbastanza facilmente. Lo svantaggio è che la compatibilità delle applicazioni può essere molto incostante e se la tua applicazione non funziona, potresti dover trovare una soluzione alternativa per farla funzionare (se ne esiste una)

La seconda approccio, che si sposerebbe bene con il tuo secondo requisito (nascondere i dettagli hardware) è QEMU. QEMU è un software per macchina virtuale gratuito e il motivo per cui lo menziono su cose come VMware o VirtualBox è che ti dà molto più controllo sul tipo di macchina che vuoi costruire, a scapito dell'usabilità.

Ad esempio, puoi usare il flag -cpu per specificare il tipo di CPU che desideri emulare. Ad esempio, puoi usare -cpu pentium3 per emulare una CPU Pentium 3. Questo è ciò che vedrebbero il SO guest installato e quindi il programma.

Devo dire che le mie applicazioni Windows non sono mai state ingannate per un momento da WINE.Forse era la mia mancanza di abilità o una preferenza per la birra, ma le mie applicazioni sapevano sempre che non funzionavano su finestre * reali *!
@CortAmmon come facevano a saperlo ?!MrGreen
@CortAmmon WINE lascia le proprie voci di registro facilmente identificabili nelle sue istanze di finto Windows.
#4
+7
Jens
2020-03-05 18:51:09 UTC
view on stackexchange narkive permalink

Esiste un modo o un programma per far credere a un altro programma che sto usando un sistema diverso?

Sì, ed è comune.

Ad esempio FreeBSD ha un "Linuxulator" che permette di eseguire i binari di Linux. Questo non è né in una macchina virtuale, né in un'emulazione. È un insieme alternativo di chiamate di sistema per i binari di Linux. Il rilevamento se un binario utilizza chiamate di sistema native di FreeBSD o chiamate di sistema Linux avviene tramite l'intestazione ELF dell'eseguibile, AFAIK.

Un principio simile viene utilizzato in WINE (che esegue programmi nativi di Windows su un sistema Linux o BSD) e nella versione 1 di Windows Services for Linux (che esegue programmi nativi di Linux su Windows).

#5
+5
fraxinus
2020-03-05 15:15:45 UTC
view on stackexchange narkive permalink

Solo in una certa misura, a seconda del programma.

Ogni sistema operativo moderno ha una chiamata di sistema che restituisce solo un numero di versione e / o una stringa.

Certo, puoi falsificare quella. Windows ha anche questo nell'interfaccia utente (cerca "modalità di compatibilità").

Se il programma va oltre (provando esplicitamente una determinata funzionalità del sistema operativo o cercando un file specifico in luoghi specifici), allora devi decodifica il meccanismo di rilevamento e pensa a come ingannarlo.

Vedi la risposta di @Mike: inventerai rapidamente le VM e gli emulatori. E anche un emulatore non è una soluzione perfetta.

Sono abbastanza sicuro che la modalità di compatibilità non si limita a falsificare la stringa della versione;alcuni esempi sono forniti qui: https://superuser.com/questions/133746/how-does-the-compatibility-mode-in-windows-work e qui: http://web.archive.org/web/20181202210601/https://blogs.msdn.microsoft.com/oldnewthing/20031223-00/?p=41373#comment-117803
#6
+2
Prof. Falken
2020-03-05 20:55:23 UTC
view on stackexchange narkive permalink

Dipenderà da ciò che programmi che stai cercando di "ingannare". È un programma specifico? In tal caso, forse esamina esattamente come deduce il tipo di sistema operativo e macchina su cui è in esecuzione. Se usa solo uno o pochi modi per rilevarlo, potresti trovare modi semplici per sovrascrivere quelle chiamate, o anche per patchare il programma file eseguibile stesso .

Ma se stai cercando una soluzione generale che possa ingannare uno o molti programmi, la risposta e sfacciata sia corretta è eseguire il programma in una sorta di ambiente emulato, come Wine o un emulatore di sistema come Qemu.

Modifica con esempi "pratici" :

Utilizzando WSL2 su Windows 10, puoi installare Wine in Windows ed eseguire VECCHIO Windows programmi in Windows 10 che altrimenti potrebbero non funzionare in Windows 10. Con winetricks puoi installare vecchie librerie di sistema e modificare Wine in modo che si comporti come le vecchie versioni di Windows.

#7
+2
Rahul
2020-03-05 23:05:09 UTC
view on stackexchange narkive permalink

Aggiungo solo i miei 10 bit qui.

Se il tuo contesto è basato sul Web, puoi sicuramente modificare la stringa USER AGENT utilizzando gli strumenti per sviluppatori.

Per Chrome, vai a Strumenti per sviluppatori ( Ctrl + Maiusc + I).

Nella scheda Rete vai a Condizioni di rete e quindi Agente utente.

Deseleziona la casella di controllo Seleziona automaticamente. Ora sarai in grado di selezionare l'agente utente a tuo piacimento e anche di modificarlo.

Nota: questa modifica è temporanea e verrà annullata se aggiorni o chiudi gli strumenti per sviluppatori.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...