Question:
Pouvez-vous cacher votre système d'exploitation des programmes? Pouvez-vous tromper un programme en lui faisant croire que vous êtes sur un autre système d'exploitation?
Wolwo
2020-03-05 01:22:30 UTC
view on stackexchange narkive permalink

Existe-t-il un moyen ou un programme de faire croire à un autre programme que j'utilise un système différent?

Par exemple, disons que je suis actuellement sous Windows 7 32 bits et que je souhaite que le programme détecte Windows 10 64 bits ou peut-être Windows XP.

Puis-je faire quelque chose de similaire avec du matériel? Puis-je dire à un programme que j'exécute sur un PC depuis le début de 2003, même s'il date de l'année dernière (2019)?

Question quelque peu connexe: [Pourquoi la défense contre l'obscurcissement du système d'exploitation contre «C'est un système Unix!»pas largement mis en œuvre?] (/ q / 222839/129883)
Pouvez-vous expliquer POURQUOI vous voulez faire cela?Est-ce pour exécuter un logiciel qui détecte le système d'exploitation ou le matériel directement?
Vous ne pouvez pas, car la détection du système d'exploitation est généralement plus que la simple vérification d'un nombre;appeler une fonction qui n'existe pas dans le système d'exploitation hôte plantera le programme.
La portée de cette question semble beaucoup trop large - il faut clarifier si nous demandons d'essayer de tromper un programme qui refuse simplement de s'exécuter lorsqu'une simple vérification de version (et facilement usurpée) donne le mauvais numéro, ou un programme qui est activementexploiter une anomalie propre au système d'exploitation / matériel spécifique, qui peut nécessiter une émulation complète (y compris l'émulation de bogues qui ont été corrigés sur les nouvelles versions de matériel / système d'exploitation).La réponse la plus votée à propos de VM serait exagérée pour certains scénarios et insuffisante pour d'autres.
FWIW Je traite de temps en temps avec des logiciels anciens, et parfois il devine en fait que son système d'exploitation hôte est complètement faux - comme un programme du début de l'ère XP pensant que Windows 8 est en fait quelque chose de plus ancien que Windows 95 et en tant que tel incompatible
Il semble que vous supposez que vous pouvez exécuter un binaire pour le système d'exploitation * y * dans le système d'exploitation * z *.Ce n'est généralement pas vrai, donc vous n'avez pas de cas en premier lieu.Pour les systèmes d'exploitation de la même famille (où la compatibilité binaire est une chose), vous pouvez usurper quelques appels système pour tromper un programme.Vous ne pouvez pas masquer un système d'exploitation d'un programme car le programme ** a ** besoin ** du système d'exploitation pour faire quoi que ce soit.Enfin, les programmes n'ont pas accès directement au matériel, ils peuvent vérifier les marques et les chaînes de fournisseurs (c'est ainsi que les vérifications antiVM bon marché sont effectuées) ou les technologies récentes, mais encore une fois, faciles à usurper.Les extensions ISA peuvent également être testées.
Peut-être moins cher d'acheter du vieux matériel sur eBay ou dans un magasin de type Goodwill local.
Cela existe.[WINE] (https://www.winehq.org/) fait apparaître Unix comme Windows, du point de vue du programme qui y est exécuté.
Sept réponses:
Mike Ounsworth
2020-03-05 01:30:07 UTC
view on stackexchange narkive permalink

Réponse effrontée: je pense que vous êtes sur le point d'inventer une machine virtuelle.

Afin d'usurper le matériel pour qu'il ressemble à une carte mère de 2003 vous devrez gérer des choses comme l'écriture d'une couche de traduction d'instructions CPU afin que le programme donne des instructions binaires CPU de l'ère 2003, et votre couche les traduit en instructions que votre matériel 2019 comprend.

Afin d'usurper le système d'exploitation pour qu'il ressemble à Windows 7 32 bits, vous devrez masquer tous les binaires et autres fichiers dans C: \ Windows , C: \ Program Fichiers , etc., qui font clairement partie d'une installation de Windows 10, et à la place "faux" un système de fichiers complet avec tous les fichiers Windows 7 32 bits. Vous auriez également besoin d'un wrapper autour du noyau Windows 10 pour que les API du noyau accessibles au programme ressemblent et se comportent comme le noyau Windows 7. c'est-à-dire que vous ne pouvez pas vraiment "simuler" ceci; vous devez essentiellement émuler une installation entièrement fonctionnelle de Windows 7 32 bits dans votre Windows 10.

Au moment où vous aurez fait tout cela, vous aurez essentiellement inventé des machines virtuelles . Alors pourquoi ne pas simplement télécharger VirtualBox, définir l'émulation matérielle sur le matériel de l'ère 2003 et installer Windows 7 32 bits dessus?

Si vous voulez émuler spécifiquement un processeur 2003, vous voudrez probablement quelque chose comme QEMU;AFAIK VirtualBox ne prend pas en charge la sélection de jeux d'instructions spécifiques.
Les instructions x86 de l'ère 2003 fonctionneront toujours sur les machines de l'ère 2019 (en mode 32 bits).Aucune traduction n'est nécessaire.Mais vous devez toujours lui dire que seules les instructions de l'ère 2003 sont disponibles.Et vous devrez peut-être lancer une erreur si une instruction postérieure à 2003 est exécutée, sinon le programme pourrait détecter que vous mentez.
"émuler une installation entièrement fonctionnelle de Windows 7 32 bits dans votre Windows 10" - point mineur, mais je pense que l'OP faisait référence à l'inverse ... ils utilisent actuellement Win7 32 bits et veulent "émuler"Win10 64 bits (ou WinXP).
@MrWhite Aucun problème si le matériel est compatible x64 et que la prise en charge de la virtualisation est activée, cela est possible même si l'OS hôte est 32 bits.Si le matériel est VRAIMENT 32 bits (ou n'a pas de capacité de virtualisation matérielle), l'émulation complète est la seule option.Et je ne connais aucun produit qui puisse faire cela.
Sonne comme le projet de vin;mais ils le rendent facile à détecter exprès.
Comme je l'ai expliqué [ici] (https://stackoverflow.com/a/23998052/103167), cela prendrait un * émulateur *, pas simplement une machine virtuelle.Une machine virtuelle crée l'illusion que vous avez votre propre machine, alors qu'en fait vous partagez avec d'autres (pas de fuite d'informations entre les VM).Un émulateur crée l'illusion que vous exécutez sur un système particulier différent du matériel réel (aucune fuite d'informations sur le matériel réel dans l'environnement émulé).
@user253751: Intel's SDE (Software Development Emulator) peut faire cela: traduction binaire dynamique (via la bibliothèque Intel PIN) pour les instructions qui doivent être émulées comme présentes ou non présentes, sinon vitesse native.par exemple.[Comment tester les instructions AVX-512 sans matériel pris en charge?] (Https://stackoverflow.com/q/51805127) / [Codage sur matériel insuffisant] (https://stackoverflow.com/q/53637886).Vous ne savez pas si vous pouvez émuler l'espace utilisateur 64 bits dans un processus 32 bits, cependant;les limites d'espace d'adressage virtuel sont évidemment un problème!QEMU peut, mais probablement pas SDE.
CBHacking
2020-03-05 15:16:15 UTC
view on stackexchange narkive permalink

Selon le niveau de "truc" que vous souhaitez, vous pourrez peut-être le faire avec des fonctionnalités de compatibilité intégrées. Windows prend en charge l'exécution de programmes dans des modes spéciaux qui émulent les anciennes versions et / ou le matériel plus ancien de diverses manières. L'émulation n'est pas parfaite - il est assez facile de dire qu'elle est utilisée, si vous regardez, et de dire quel est le système d'exploitation réel - mais cela satisfera un logiciel qui pense qu'il ne peut fonctionner que sur Windows 2000 ou que ne connaît que le mode 256 couleurs.

Pour faire croire au logiciel qu'il fonctionne sur un système d'exploitation totalement différent - Linux au lieu de Windows ou similaire - votre meilleur pari (autre qu'une VM) est wine (pour le code Windows sous Linux) ou wsl (sous-système Windows pour Linux, exécute des binaires Linux ELF64 non modifiés et des scripts nécessitant Linux mais nécessite Win10). Encore une fois, cela est tout à fait détectable par tout ce qui le cherche , mais cela va tromper un programme qui appelle simplement un programme ou un appel de bibliothèque pour cracher le nom / la version du système d'exploitation.

520
2020-03-05 19:54:39 UTC
view on stackexchange narkive permalink

Vous pouvez le faire dans une certaine mesure, mais ce ne sera pas facile.

Tout d'abord, vous pouvez essayer WINE, une couche de compatibilité Windows pour Linux. Vous pouvez définir la version de Windows que vous souhaitez émuler assez facilement. L'inconvénient est que la compatibilité des applications peut être très aléatoire, et si votre application ne fonctionne pas, vous devrez peut-être trouver une solution de contournement pour la faire fonctionner (le cas échéant)

Le second approche, qui se marierait bien avec votre deuxième exigence (masquer les détails du matériel) est QEMU. QEMU est un logiciel de machine virtuelle gratuit, et la raison pour laquelle je le mentionne à propos de choses comme VMware ou VirtualBox est qu'il vous donne beaucoup plus de contrôle sur le type de machine que vous souhaitez construire, au détriment de la convivialité.

Par exemple, vous pouvez utiliser l'indicateur -cpu pour spécifier le type de CPU que vous souhaitez émuler. Vous pouvez, par exemple, utiliser -cpu pentium3 pour émuler un processeur Pentium 3. C'est ce que verrait le système d'exploitation invité installé et donc le programme.

Je dois dire que mes applications Windows n'ont jamais été dupées un seul instant par WINE.C'était peut-être mon manque de compétences ou une préférence pour la bière, mais mes applications ont toujours su qu'elles ne fonctionnaient pas sur de * vraies * fenêtres!
@CortAmmon comment ont-ils su?!:-RÉ
@CortAmmon WINE laisse ses propres entrées de registre facilement identifiables dans ses instances de faux Windows.
Jens
2020-03-05 18:51:09 UTC
view on stackexchange narkive permalink

Existe-t-il un moyen ou un programme de faire croire à un autre programme que j'utilise un système différent?

Oui, et c'est courant.

Par exemple FreeBSD a un "Linuxulator" qui permet d'exécuter des binaires Linux. Ce n'est ni dans une machine virtuelle, ni dans une émulation. Il s'agit d'un ensemble alternatif d'appels système pour les binaires Linux. La détection si un binaire utilise des appels système natifs FreeBSD ou des appels système Linux se fait via l'en-tête ELF de l'exécutable, AFAIK.

Un principe similaire est utilisé dans WINE (qui exécute des programmes Windows natifs sur un système Linux ou BSD) , et dans la version 1 des services Windows pour Linux (qui exécute des programmes natifs Linux sur Windows).

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

Seulement dans une certaine mesure, selon le programme.

Chaque système d'exploitation moderne a un appel système qui renvoie simplement un numéro de version et / ou une chaîne.

Bien sûr, vous pouvez simuler cette. Windows a même cela dans l'interface utilisateur (recherche de «mode de compatibilité»).

Si le programme va au-delà de cela (en essayant explicitement certaines fonctionnalités du système d'exploitation ou en recherchant des fichiers spécifiques à des endroits spécifiques), vous devez Rétroconcevez le mécanisme de détection et réfléchissez bien à la façon de le tromper.

Voir la réponse @Mike - vous inventerez rapidement les VM et les émulateurs. Et même un émulateur n'est pas une solution parfaite.

Je suis presque sûr que le mode de compatibilité fait plus que simuler la chaîne de version;quelques exemples sont donnés ici: https://superuser.com/questions/133746/how-does-the-compatibility-mode-in-windows-work et ici: http://web.archive.org/web/20181202210601/https://blogs.msdn.microsoft.com/oldnewthing/20031223-00/?p=41373#comment-117803
Prof. Falken
2020-03-05 20:55:23 UTC
view on stackexchange narkive permalink

Cela dépendra de ce (s) programme (s) que vous essayez de «tromper». S'agit-il d'un programme spécifique? Dans ce cas, regardez peut-être exactement comment il déduit le type de système d'exploitation et de machine sur lequel il fonctionne. S'il utilise juste une ou plusieurs façons de le détecter, vous pouvez trouver des moyens simples de remplacer ces appels, ou même de patcher le fichier exécutable du programme lui-même .

Mais si vous recherchez une solution générale qui trompera un ou plusieurs programmes, la réponse à la fois correcte et effrontée est d'exécuter le programme dans une sorte d'environnement émulé, comme Wine ou un émulateur système comme Qemu.

Modifier avec des exemples "pratiques" :

En utilisant WSL2 sur Windows 10, vous pouvez installer Wine dans Windows et exécuter ANCIEN Windows programmes dans Windows 10 qui pourraient ne pas fonctionner dans Windows 10 autrement. Avec winetricks, vous pouvez installer d'anciennes bibliothèques système et modifier Wine pour qu'il se comporte comme les anciennes versions de Windows.

Rahul
2020-03-05 23:05:09 UTC
view on stackexchange narkive permalink

Il suffit d'ajouter mes 10 bits ici.

Si votre contexte est basé sur le Web, vous pouvez certainement modifier la chaîne USER AGENT à l'aide des outils de développement.

Pour Chrome, accédez aux outils de développement ( Ctrl + Maj + I).

Dans l'onglet Réseau, allez dans Conditions du réseau, puis Agent utilisateur.

Décochez la case Sélectionner automatiquement. Vous pourrez désormais sélectionner l'agent utilisateur à votre guise et également le modifier.

Remarque: cette modification est temporaire et elle sera annulée si vous actualisez ou fermez les outils de développement.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...