題:
您可以從程序中隱藏操作系統嗎?您是否可以欺騙程序,使您認為自己在其他操作系統上?
Wolwo
2020-03-05 01:22:30 UTC
view on stackexchange narkive permalink

是否有一種方法或程序可以使另一個程序認為我正在使用其他系統?

例如,假設當前我在32位Windows 7上,並且我希望該程序能夠檢測到Windows10 64位或Windows XP。

我可以對硬件做類似的事情嗎?我能告訴一個程序我是從2003年初開始在PC上運行的,即使它是從去年(2019年)開始的?

某種相關的問題:[為什麼操作系統混淆防止“這是Unix系統!”沒有廣泛實施?](/ q / 222839/129883)
您能解釋為什麼要這樣做嗎?是要運行一些能夠檢測操作系統的軟件,還是直接運行硬件的軟件?
您不能因為檢測操作系統通常不只是檢查數字而已。調用主機操作系統中不存在的函數會使程序崩潰。
這個問題的範圍似乎太廣泛了-需要澄清我們是要愚弄一個簡單的(容易被欺騙的)版本檢查給出錯誤的數字而拒絕運行的程序,還是一個活躍的程序利用特定操作系統/硬件特有的異常,這可能需要完整的仿真(包括仿真較新的硬件/ OS版本中修復的錯誤)。在某些情況下,有關VM的最高票數答案過高,而在另一些情況下則不足。
FWIW我有時會處理古老的軟件,有時它確實確實在猜測其主機操作系統是完全錯誤的-就像早期的XP時代程序認為Windows 8實際上早於Windows 95且不兼容
看來您假設可以在OS * z *中為OS * y *運行二進製文件。通常情況並非如此,因此您一開始就沒有案子。對於相同系列的操作系統(需要二進制兼容性),您可以欺騙一些系統調用來欺騙程序。您無法從程序中隱藏操作系統,因為該程序“需要”操作系統執行任何操作。最後,程序無法直接訪問硬件,它們可以檢查品牌和供應商字符串(這是進行廉價的antiVM檢查的方式)或最新技術,但同樣,它很容易被欺騙。ISA擴展也可以進行測試。
在eBay或當地的Goodwill類型商店購買一些舊硬件可能會更便宜。
這個存在。[WINE](https://www.winehq.org/)使Unix從Windows中運行的角度來看似乎是Windows。
七 答案:
Mike Ounsworth
2020-03-05 01:30:07 UTC
view on stackexchange narkive permalink

厚臉皮的答案:我認為您將要發明虛擬機。

為了欺騙硬件,看起來像是2003年的主板您需要處理諸如編寫CPU指令翻譯層之類的事情,以便該程序提供2003年代的CPU二進制指令,然後您的層將它們轉換為您的2019硬件可以理解的指令。為了欺騙操作系統,使其看起來像Windows 7 32位,您需要將所有二進製文件和其他文件隱藏在 C:\ Windows C:\ Program中文件等顯然是Windows 10安裝的一部分,而是“偽造”具有所有Windows 7 32位文件的完整文件系統。您還需要圍繞Windows 10內核進行包裝,以使程序可訪問的內核API的外觀和行為類似於Windows 7內核。即你不能真的“偽造”這個;您基本上需要在Windows 10中模擬完整功能的Windows 7 32位安裝。

完成所有這些操作後,您基本上已經發明了虛擬機 。那麼,為什麼不下載VirtualBox,將硬件仿真設置為2003年以前的硬件,然後在其上安裝32位Windows 7呢?

如果要專門模擬2003 CPU,則可能需要QEMU之類的東西。AFAIK VirtualBox不支持選擇特定的指令集。
2003年代的x86指令仍將在2019年代的機器上運行(以32位模式)。無需翻譯。但是您仍然需要告訴它,僅提供2003年以前的說明。如果執行了2003年以後的指令,則可能需要引發錯誤,否則程序可能會檢測到您在撒謊。
“模仿Windows 10內的Windows 7 32位功能齊全的安裝” –一點,但我認為OP的含義相反...他們目前正在使用Win7 32位,並且希望“模仿”Win10 64位(或WinXP)。
@MrWhite如果硬件支持x64,並且啟用了虛擬化支持,即使主機操作系統為32位,也可以這樣做。如果硬件是真正的32位(或不具有硬件虛擬化功能),則完全仿真是唯一的選擇。而且我不知道有什麼產品可以做到這一點。
聽起來像葡萄酒項目;但它們使故意檢測變得容易。
正如我在[此處](https://stackoverflow.com/a/23998052/103167)所解釋的那樣,這需要一個*模擬器*,而不僅僅是一個虛擬機。實際上,當您與他人共享虛擬機時(如果虛擬機之間沒有信息洩漏),虛擬機會造成您擁有自己的計算機的錯覺。仿真器會產生一種幻象,即您正在與實際硬件不同的特定係統上運行(不會將有關實際硬件的信息洩漏到仿真環境中)。
@user253751:英特爾的SDE(軟件開發仿真器)可以做到:動態二進制翻譯(通過英特爾PIN庫),用於需要模擬為存在或不存在的指令(否則為原始速度)。例如[如何在不支持硬件的情況下測試AVX-512指令?](https://stackoverflow.com/q/51805127)/ [在硬件不足的情況下編碼](https://stackoverflow.com/q/53637886)。不過,不確定是否可以在32位進程中模擬64位用戶空間。顯然虛擬地址空間限制是個問題!QEMU可以,但可能不是SDE。
CBHacking
2020-03-05 15:16:15 UTC
view on stackexchange narkive permalink

根據所需的“技巧”級別,您可以使用內置的兼容性功能來做到這一點。Windows支持以特殊模式運行的程序,這些模式以各種方式模擬較早版本和/或較舊硬件。仿真不是完美的-如果您看一下,很容易就能知道它正在被使用,並能告訴您實際的操作系統是什麼-但它會滿足於一個認為只能在Windows 2000或更高版本上運行的軟件只知道256色模式。/ code>(對於Linux上的Windows代碼)或 wsl (Linux的Windows子系統,運行未修改的ELF64 Linux二進製文件和需要Linux的腳本,但需要Win10)。再次,任何人都可以發現它,但是它將欺騙僅調用程序或庫調用以吐出OS名稱/版本的程序。

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

您可以在一定程度上做到這一點,但這並不容易。

首先,您可以嘗試WINE(Linux的Windows兼容層)。您可以輕鬆設置要模擬的Windows版本。缺點是應用程序兼容性可能會受到影響,如果您的應用程序無法正常工作,則可能需要找出解決方法以使其正常運行(如果有的話)

第二個QEMU是最適合您的第二個要求(隱藏硬件詳細信息)的方法。QEMU是一種免費的虛擬機軟件,之所以在諸如VMware或VirtualBox之類的系統中提及它,是因為它使您可以以可用性為代價,對要構建的計算機類型進行更多控制。

例如,可以使用 -cpu 標誌指定要模擬的CPU類型。例如,您可以使用 -cpu pentium3 來模擬奔騰3 CPU。這就是已安裝的來賓操作系統以及程序所看到的。

我必須說,我的Windows應用程序從未被WINE欺騙過。也許是因為我缺乏技術或對啤酒的偏愛,但是我的應用程序始終知道它們不是在*真實*的窗口上運行!
他們怎麼知道@CortAmmon?:-D
@CortAmmon WINE在人造Windows實例中保留了自己的易於識別的註冊表項。
Jens
2020-03-05 18:51:09 UTC
view on stackexchange narkive permalink

有沒有辦法或程序讓另一個程序認為我使用的是其他系統?

是的,這很常見。

例如FreeBSD有一個“ Linuxulator”,可以運行Linux二進製文件。這既不在虛擬機中,也不在仿真中。它是Linux二進製文件的另一套系統調用。通過可執行文件的ELF標頭AFAIK來檢測二進製文件是使用本機FreeBSD系統調用還是Linux系統調用。

WINE(在Linux或BSD系統上運行Windows本機程序)中使用了類似的原理。,以及Windows Services for Linux(在Windows上運行Linux本地程序)的版本1中。

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

僅在某種程度上取決於程序。

每個現代的OS都有一個系統調用,該系統調用僅返回版本號和/或字符串。

當然,您可以偽造那。Windows甚至在UI中都有此功能(搜索“兼容模式”)。

如果程序超出了此範圍(明確嘗試某些OS功能或在特定位置搜索特定文件),則必須對檢測機制進行逆向工程,並認真思考如何使其傻瓜。

請參閱@Mike答案-您將迅速發明VM和仿真器。甚至仿真器也不是完美的解決方案。

我很確定兼容模式所做的不只是偽造版本字符串。這裡提供了一些示例:https://superuser.com/questions/133746/how-does-the-compatibility-mode-in-windows-work和此處: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

這取決於您要“傻瓜”編程的內容。它是一個特定程序嗎?在這種情況下,也許要仔細研究它如何推斷出運行哪種操作系統和計算機。如果僅使用一種或幾種方法來檢測它,則可以找到簡單的方法來覆蓋這些調用,甚至修補程序可執行文件本身

您正在尋找一種可以欺騙任何或許多程序的通用解決方案,正確的答案都是在某種模擬環境中運行該程序,例如Wine或Qemu等系統模擬器。/ p>

使用“實際”示例進行編輯

在Windows 10上使用 WSL2,您可以在Windows中安裝Wine並運行OLD WindowsWindows 10中的程序,否則可能無法在Windows 10中運行。使用 winetricks,您可以安裝舊的系統庫並調整Wine的行為使其類似於舊的Windows版本。

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

只需在此處添加我的10位。

如果上下文是基於Web的,那麼絕對可以使用開發人員工具更改USER AGENT字符串。

對於Chrome,請轉到開發人員工具(Ctrl + Shift + I)。

在“網絡”選項卡中,依次轉到“網絡條件”和“用戶代理”。

取消選中“自動選擇”複選框。現在,您可以隨意選擇用戶代理,也可以對其進行編輯。

注意:此修改是臨時的,如果刷新或關閉開發人員工具,此修改將恢復。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...