Windows:プログラムに、ターミナルサーバーセッションで実行していないと思わせる方法は?


11

Windows 7 PCでMiniframeの「SoftXPand 2011 Duo」プログラムを使用しています。1台のコンピューターから2台のワークステーションを作成します。Windowsに組み込まれているターミナルサービスを使用して、追加のセッションを作成します。2つの画面、2つのキーボード、および2つのマウスを使用して、2つのコンピューターの「幻想」を作成します。それは非常にうまく機能し、この1台のマシンに接続された2つの画面で2つの異なる3Dゲームをプレイすることもできます(Radeon HD5770と8GバイトRAMのCore i5 2500kを使用)。

これにはいくつかの欠点があります。見た目で隠されているものを見つけました。現在のセッション(最初のワークステーション上でも)は、ターミナルサーバーセッションとして識別されます。現在、一部のプログラムは限られた効果(グラフィカル)で実行され、一部はまったく実行されません。

これにより、一部のゲームがまったく動作しなくなりました。「ターミナルサーバーセッションでは実行できません」と言って終了します。私はすでに、最新のトップゲーム(DirectX 10、11)がSoftXPandなしの同じマシンで同じように動作することを証明しているため、これはかなり人為的な制限です!

では、ターミナルサーバーセッションのように見えないように、現在のセッションを何らかの方法でハッキングできますか?IE

#include <windows.h>
#pragma comment(lib, "user32.lib")

BOOL IsRemoteSession(void)
{
   return GetSystemMetrics( SM_REMOTESESSION );
}

FALSEを返しますか?(プログラミングに関する質問ではありません。プログラムがターミナルサーバーセッションにいるかどうかをプログラムが検出する例にすぎません!)


2つのキーボード/画面をお持ちですか?セットアップについてもう少し詳しく説明してください。
harrymc

@harrymcはい、そうです。編集。
sinni800 2011年

コンソールセッションを使用している場合でも、アプリがターミナルサーバーでの実行を拒否するのは、ライセンス上の理由によるため、1つのライセンスを複数のユーザーが同時に使用することはできません。
パラドロイド、2011

回答:


9

アプリケーションがターミナルサーバーセッションで実行されているかどうかを確認する方法はいくつかあります。以下のように、ハッキングする可能性のあるもののいくつか:

  1. レジストリ:HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat
    このキーは、デスクトップの通常のセッションでは見つかりません。
    可能であれば削除してみてください。
  2. SESSIONNAME環境変数の値:コンソール/ "RDP#" /(空)。(デスクトップの値)または(空)
    を実行した後、コマンドプロンプト(cmd)からゲームを実行してみてください。 現在の値を確認するには、何かを変更する前に入力してください。
    SET SESSIONNAME=ConsoleSET SESSIONNAME=
    SET SESSIONNAME
  3. システムがGetSystemMetrics(SM_REMOTESESSION)を呼び出し、GetVersionExOSVERSIONINFOEX.wSuiteMask)が実行コンテキストを返します。
    システムフックを作成する以外は、これに対してできることは多くありません。
    興味を持っている場合は、このcodeproject.comの記事を参照してください:APIフックを明らかにしました

2)では、セッション名は「コンソール」です(一体何ですか)。ここにもキーTSAppCompatがありません。3番目について...難しいように見えます。別のプログラムの上に座って、先ほど述べたようなシステムコールをインターセプトするプログラムはありませんか?GetSystemMetrics。
sinni800 2011年

あなたの情報によると、おそらく3番目の方法は、GetVersionExとGetSystemMetricsを攻撃する価値がある方法です。上記のリンクを追加しました(プログラマーが使用します)。
harrymc

別のメモ:SoftXPandでMSTSC / adminを使用する方法がある場合、これは試してみる価値があります。
harrymc

@harrymcなぜMSTSC / admin?私はapiフッキングを調べます...しかし、私のプログラミング能力にとっては複雑すぎるかもしれません。
sinni800 2011年

"MSTSC / admin"はかなり長いショットです。リモートセッションのタイプが多少異なるため、一部のプログラムでは検出されない可能性があります。
harrymc

0

解決策を見つけました:「runas」で必要なプログラムを実行します

デスクトップ経由でログインした後、それをcmdに入力します。

runas / user:YOUR_NAME "YOUR_PROGRAM_PATH"

私はそれをベントリーのソフトウェアに対してテストしました、そしてそれらはうまく働きます。


これはターミナルサーバーの問題を回避しますか?興味深いことに、私は試さなければなりません。
sinni800 2014年

マスエフェクト3では動作しません(このプログラムはリモートで実行できません)
Mgamerz

0

Microsoftリモートデスクトップを使用していて、@ harrymcによって投稿された最初の2つの方法を試しましたが、私の場合は機能しません。3番目は複雑すぎるので、試してみませんでした。

最終的に、Parallel Accessを使用すると、エラーが表示されていたプログラムを使用できることがわかりました。RDPほどスムーズではないので、本当にプログラムを使用する必要がある場合は、RDPを使用します。


0

SoftXPandの質問には直接対応していませんが、Google検索が原因でここにたどり着き、@ harrymcの回答に沿っています。

60秒の遅延があるバッチファイルを作成し、実行するアプリを起動しました。バッチファイルを開始し、RDP接続からログアウトし、約5分待ってから、RDPに再接続しました。私が欲しかった厄介なアプリは、戻ったときに私を待っていました。バッチファイルの内容は次のとおりです。

timeout 60

start /D "your path here" yourExecutable.exe

パスにスペースがある場合は、パスを囲む引用符が必要です。

ここからバッチ情報を取得しました:https : //stackoverflow.com/questions/8324352/creating-a-batch-file-for-programs-to-start-using-a-delay

この男への小道具:https : //stackoverflow.com/users/959263/raihan

(詳細を提供し、私の研究を共有すると言われています)


興味深い解決策ですが、正直なところ、SoftXPandに適用できるかどうかはわかりません。RDPのようにセッションを「終了」できないので。
sinni800
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.