Windows: วิธีการทำให้โปรแกรมคิดว่าพวกเขาไม่ได้ทำงานในเซสชันเซิร์ฟเวอร์เทอร์มินัล


11

ฉันใช้โปรแกรม "SoftXPand 2011 Duo" โดย Miniframe บนพีซี Windows 7 ของฉัน มันทำให้สองเวิร์กสเตชันจากคอมพิวเตอร์เครื่องเดียว จะใช้บริการ terminal ที่สร้างขึ้นใน Windows เพื่อสร้างเซสชั่นเพิ่มเติม ฉันใช้สองหน้าจอคีย์บอร์ดสองตัวและเมาส์สองตัวเพื่อสร้าง "ภาพลวงตา" ของคอมพิวเตอร์สองเครื่องนี้ มันใช้งานได้ค่อนข้างดีและฉันยังสามารถเล่นเกมสามมิติที่แตกต่างกันสองหน้าจอที่แนบมากับเครื่องเดียวนี้ (โดยใช้ Radeon HD5770 และ Core i5 2500k พร้อม RAM 8 Gbytes)

มีข้อเสียอยู่เล็กน้อยสำหรับเรื่องนี้ ฉันเพิ่งพบเกี่ยวกับที่ซ่อนอยู่ในรูปลักษณ์แรก เซสชันที่คุณอยู่ (แม้ในเวิร์กสเตชันแรก) จะระบุว่าเป็นเซสชันเซิร์ฟเวอร์เทอร์มินัล! ขณะนี้บางโปรแกรมจะทำงานด้วยเอฟเฟกต์ที่ จำกัด (กราฟิก) และบางโปรแกรมจะไม่ทำงานเลย

สิ่งนี้ยังส่งผลให้บางเกมไม่ทำงานเลย พวกเขาเพียงพูดว่า "ไม่สามารถทำงานในเซสชันเซิร์ฟเวอร์เทอร์มินัล" และออก ฉันได้พิสูจน์แล้วว่าเกมทันสมัยอันดับต้น ๆ (DirectX 10, 11) ทำงานได้ดีเหมือนบนเครื่องเดียวกันโดยไม่มี SoftXPand ดังนั้นนี่จึงเป็นข้อ จำกัด ที่ค่อนข้างเทียม!

ดังนั้นฉันจะแฮ็กเซสชันปัจจุบันของฉันได้หรือไม่ IE

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

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

จะคืนค่า FALSE หรือไม่ (ไม่ใช่คำถามการเขียนโปรแกรม! เป็นเพียงตัวอย่างที่โปรแกรมตรวจพบว่าอยู่ในเซสชันของเทอร์มินัลเซิร์ฟเวอร์หรือไม่)


คุณมีสองคีย์บอร์ด / หน้าจอหรือไม่? โปรดอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าของคุณ
harrymc

@harrymc ใช่ฉันทำ การแก้ไข
sinni800

เหตุผลที่แอปปฏิเสธที่จะทำงานบนเซิร์ฟเวอร์เทอร์มินัลแม้ในขณะที่คุณกำลังใช้เซสชันคอนโซลเป็นเพราะเหตุผลด้านลิขสิทธิ์ - ดังนั้นจึงไม่สามารถใช้สิทธิ์การใช้งานมากกว่าหนึ่งคนพร้อมกันได้
Paradroid

คำตอบ:


9

แอปพลิเคชันมีหลายวิธีในการตรวจสอบว่าแอปพลิเคชันทำงานในเซสชัน Terminal Server บางคนอาจแฮ็คดังต่อไปนี้:

  1. HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompatRegistry:
    คีย์นี้หายไปในเซสชันปกติบนเดสก์ท็อปของฉัน
    คุณอาจลองลบมันถ้าทำได้
  2. ค่าตัวแปรสภาพแวดล้อม SESSIONNAME: Console / "RDP #" / (ว่าง)
    คุณอาจลองเรียกใช้เกมจาก Command Prompt (cmd) หลังจากทำ
    SET SESSIONNAME=Console(ค่าเดสก์ทอปของฉัน) หรือSET SESSIONNAME=(ว่าง)
    เพื่อหาค่าปัจจุบันให้ป้อนSET SESSIONNAMEก่อนที่จะเปลี่ยนแปลงอะไรก็ได้
  3. ระบบเรียกใช้GetSystemMetrics (SM_REMOTESESSION)และGetVersionEx ( OSVERSIONINFOEX.wSuiteMask ) ส่งคืนบริบทการดำเนินการ
    ไม่มากที่คุณสามารถทำสิ่งนี้ได้ยกเว้นการเขียนเบ็ดสำหรับระบบ
    หากสนใจโปรดดูบทความ codeproject.com นี้: API hooking เปิดเผย

บน 2) ชื่อเซสชันคือ "คอนโซล" (What the heck?) กุญแจ TSAppCompat ที่สำคัญก็หายไปเช่นกัน เกี่ยวกับที่สาม ... ดูยากที่จะทำ ไม่มีโปรแกรมที่อยู่ด้านบนของโปรแกรมอื่นและสกัดกั้นการโทรของระบบเหมือนกับที่ฉันพูดถึงหรือไม่ GetSystemMetrics
sinni800

ตามข้อมูลของคุณอาจเป็นวิธีที่ 3 เป็นวิธีที่คุ้มค่าสำหรับการโจมตี GetVersionEx และ GetSystemMetrics ฉันได้เพิ่มลิงก์ด้านบน (เพื่อใช้โดยโปรแกรมเมอร์)
harrymc

หมายเหตุอื่น: หากมีวิธีการใช้MSTSC / adminใน SoftXPand นี่จะคุ้มค่าที่จะลอง
harrymc

@harrymc ทำไมต้องเป็น MSTSC / admin ฉันจะตรวจสอบ api hooking ... มันอาจซับซ้อนเกินไปสำหรับความสามารถในการเขียนโปรแกรมของฉัน
sinni800

"MSTSC / admin" เป็นภาพที่ค่อนข้างยาว: มันเป็นประเภทเซสชันระยะไกลที่แตกต่างกันดังนั้นบางโปรแกรมอาจตรวจไม่พบ
harrymc

0

ฉันพบวิธีแก้ปัญหา: ใช้งานโปรแกรมที่คุณต้องการด้วย "runas"

หลังจากคุณเข้าสู่ระบบผ่านเดสก์ท็อปพิมพ์ใน cmd:

Runas / ผู้ใช้: YOUR_NAME "YOUR_PROGRAM_PATH"

ฉันทดสอบกับโปรแกรมของ Bently และพวกมันทำงานได้ดี


นี่เป็นการหลีกเลี่ยงปัญหาเซิร์ฟเวอร์เทอร์มินัลหรือไม่ น่าสนใจฉันต้องลอง
sinni800

ไม่สามารถใช้งานกับเอฟเฟ็กต์มวล 3 (โปรแกรมนี้ไม่สามารถรันได้จากระยะไกล)
Mgamerz

0

ฉันใช้ Microsoft Remote Desktop และฉันได้ลอง 2 วิธีแรกที่โพสต์โดย @harrymc แต่ไม่สามารถใช้งานได้ในกรณีของฉัน อันที่สามนั้นซับซ้อนเกินไปสำหรับฉันดังนั้นฉันจึงไม่ได้ลอง

ในที่สุดฉันพบว่าการเข้าถึงแบบขนานช่วยให้ฉันสามารถใช้โปรแกรมที่แสดงข้อผิดพลาด มันไม่ราบเรียบเท่า RDP ดังนั้นฉันจึงใช้มันถ้าฉันต้องใช้โปรแกรมจริงๆ


0

ไม่ตอบคำถาม SoftXPand โดยตรง แต่ฉันลงเอยที่นี่เพราะการค้นหาของ Google และเป็นไปตามคำตอบของ @ harrymc

ฉันสร้างไฟล์แบตช์ที่มีความล่าช้า 60 วินาทีแล้วเริ่มแอพที่ฉันต้องการเรียกใช้ ฉันเริ่มแบตช์ไฟล์ออกจากการเชื่อมต่อ RDP รอประมาณ 5 นาทีจากนั้นเชื่อมต่อใหม่ด้วย RDP แอพที่น่ารำคาญที่ฉันต้องการคือรอฉันเมื่อฉันกลับมา นี่คือเนื้อหาของแบทช์:

timeout 60

start /D "your path here" yourExecutable.exe

คำพูดรอบ ๆ พา ธ นั้นจำเป็นถ้าคุณมีช่องว่างในพา ธ

มีข้อมูลชุดแบทช์จากที่นี่: /programming/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.