web-dev-qa-db-ja.com

プログラムからOSを隠すことはできますか?プログラムをだまして、別のOSを使用していると思い込ませますか?

別のプログラムに別のシステムを使用していると思わせる方法またはプログラムはありますか?

たとえば、現在Windows 7 32ビットを使用していて、プログラムでWindows 10 64ビットまたはおそらくWindows XPを検出するとします。

ハードウェアで同様のことができますか?昨年(2019)からだとしても、2003年の初めからPCで実行しているプログラムを通知できますか?

51
Wolwo

生意気な答え:仮想マシンを発明しようとしていると思います。

ハードウェアを偽装するため 2003マザーボードのように見えるようにするには、CPU命令変換レイヤーを作成するなどの処理を行う必要があります。これにより、プログラムは2003年のCPUバイナリー命令を提供し、レイヤーは変換されます。 2019ハードウェアが理解できる指示にそれらを追加します。

OSを偽装するため Windows 7 32ビットのように見えるようにするには、C:\WindowsC:\Program Filesなどのすべてのバイナリとその他のファイルを非表示にする必要があります。明らかにWindows 10インストールの一部であり、代わりにすべてのWindows 7 32ビットファイルを含む完全なファイルシステムを "偽造"します。また、プログラムにアクセスできるカーネルAPIをWindows 7カーネルのように見せ、動作させるには、Windows 10カーネルのラッパーも必要です。つまり、これを「偽造」することはできません。基本的に、Windows 10内でWindows 7 32ビットの完全に機能するインストールをエミュレートする必要があります。

すべての作業を終えた時点で、基本的には仮想マシンを発明したことになります。では、VirtualBoxをダウンロードし、ハードウェアエミュレーションを2003年のハードウェアに設定して、Windows 7 32ビットをインストールしてみませんか?

152
Mike Ounsworth

必要な「トリック」のレベルによっては、組み込みの互換性機能を使用してこれを実行できる場合があります。 Windowsは、古いバージョンや古いハードウェアをさまざまな方法でエミュレートする特別なモードでのプログラムの実行をサポートしています。エミュレーションは完璧ではありません-見れば、使用されていることを確認し、実際のOSが何であるかを確認することは非常に簡単ですが、Windows 2000でしか実行できないと考えるソフトウェアの一部を満たすでしょう。 256色モードについてのみ知っています。

ソフトウェアをだまして、まったく異なるOS(WindowsではなくLinuxなど)で実行していると思わせるには、wine(Linux上のWindowsコードの場合)またはwsl(LinuxのWindowsサブシステム、変更されていないELF64を実行)が最適です。 LinuxバイナリとLinuxを必要とするスクリプトですが、Win10が必要です)。繰り返しになりますが、これはかなり検出可能です探しているものはすべてですが、プログラムまたはライブラリの呼び出しを呼び出すだけで、OS名/バージョンを吐き出すプログラムをだますことになります。

25
CBHacking

これはある程度できますが、簡単ではありません。

まず、LinuxのWindows互換性レイヤーであるWINEを試すことができます。エミュレートするWindowsのバージョンを簡単に設定できます。欠点は、アプリケーションの互換性に大きな打撃が及ぶ可能性があり、アプリケーションが機能しない場合は、動作させるための回避策を見つける必要がある場合があります(存在する場合)。

2番目のアプローチは、2番目の要件(ハードウェアの詳細を非表示にする)とうまく調和するQEMUです。 QEMUは無料の仮想マシンソフトウェアであり、VMwareやVirtualBoxなどについてこれを述べた理由は、使いやすさを犠牲にして、構築するマシンの種類をはるかに制御できるためです。

たとえば、-cpuフラグを使用して、エミュレートするCPUの種類を指定します。たとえば、-cpu pentium3 Pentium 3 CPUをエミュレートします。これはインストールされたゲストOSであり、したがってプログラムで認識されます。

9
520

別のプログラムに別のシステムを使用していると思わせる方法またはプログラムはありますか?

はい、それは一般的です。

たとえば、FreeBSDにはLinuxバイナリを実行できる「Linuxulator」があります。これは仮想マシンにもエミュレーションにもありません。これは、Linuxバイナリの代替システムコールセットです。バイナリがネイティブのFreeBSDシステムコールを使用しているかLinuxシステムコールを使用しているかの検出は、実行可能ファイルのELFヘッダーAFAIKを介して行われます。

同様の原則が、WINE(LinuxまたはBSDシステムでWindowsネイティブプログラムを実行する)、およびLinux用Windowsサービスのバージョン1(WindowsでLinuxネイティブプログラムを実行する)でも使用されています。

7
Jens

プログラムによっては、ある程度まで。

すべての最近のOSには、バージョン番号や文字列を返すだけのシステムコールがあります。

もちろん、あなたはそれを偽造することができます。 WindowsのUIにもこの機能があります(「互換モード」を検索してください)。

プログラムがそれを超える場合(特定のOS機能を明示的に試すか、特定の場所で特定のファイルを検索する場合)、検出メカニズムをリバースエンジニアリングして、それをだます方法をよく考える必要があります。

@Mikeの回答をご覧ください。VMとエミュレータをすぐに発明します。また、エミュレータでさえ完全なソリューションではありません。

5
fraxinus

それは、あなたが「だまそう」としているプログラムに依存します。 one特定のプログラムですか?その場合は、実行されているオペレーティングシステムとマシンの種類を推測する方法を正確に調べてください。それを検出するために1つまたはいくつかの方法を使用する場合、それらの呼び出しをオーバーライドする、またはプログラムにパッチを適用する簡単な方法を見つけることができます実行可能ファイル自体

しかし、任意または多くのプログラムをだます一般的なソリューションを探している場合、正しいの両方の生意気な答えは、ある種のプログラムを実行することですWineのようなエミュレートされた環境、またはQemuのようなシステムエミュレータ。

「実用的な」例で編集

Windows 10で WSL2 を使用すると、WineをWindowsにインストールし、Windows 10で古いWindowsプログラムを実行できます。 winetricks を使用すると、古いシステムライブラリとTweak Wineをインストールして、古いWindowsバージョンのように動作させることができます。

2
Prof. Falken

ここに私の10ビットを追加するだけです。

コンテキストがWebベースの場合、開発者ツールを使用してUSER AGENT文字列を変更できます。

Chromeの場合は、デベロッパーツールに移動します(Ctrl + Shift + I)。

[ネットワーク]タブ内で、[ネットワーク条件]に移動し、次に[ユーザーエージェント]に移動します。

[自動的に選択]チェックボックスをオフにします。これで、ユーザーエージェントを自由に選択して編集することができます。

注:この変更は一時的なものであり、開発者ツールを更新または閉じると元に戻ります。

2
Rahul