Pytanie:
Czy możesz ukryć swój system operacyjny przed programami? Czy możesz oszukać program, aby pomyślał, że korzystasz z innego systemu operacyjnego?
Wolwo
2020-03-05 01:22:30 UTC
view on stackexchange narkive permalink

Czy istnieje sposób lub program, który sprawi, że inny program pomyśli, że używam innego systemu?

Na przykład, powiedzmy, że obecnie używam 32-bitowego systemu Windows 7 i chcę, aby program wykrył system Windows 10 64-bitowy, a może Windows XP.

Czy mogę zrobić coś podobnego ze sprzętem? Czy mogę powiedzieć programowi, który używam na komputerze PC z początku 2003 roku, nawet jeśli pochodzi z zeszłego roku (2019)?

Nieco pokrewne pytanie: [Dlaczego system operacyjny chroni przed zaciemnieniem komunikatu „To system Unix!”nie są powszechnie stosowane?] (/ q / 222839/129883)
Czy możesz wyjaśnić, DLACZEGO chcesz to zrobić?Czy jest to po to, aby uruchomić jakieś oprogramowanie, które wykrywa system operacyjny lub bezpośrednio sprzęt?
Nie możesz, ponieważ wykrycie systemu operacyjnego to zwykle coś więcej niż sprawdzenie liczby;wywołanie funkcji, która nie istnieje w systemie operacyjnym hosta, spowoduje awarię programu.
Zakres tego pytania wydaje się zbyt szeroki - należy wyjaśnić, czy pytamy o próbę oszukania programu, który po prostu odmawia uruchomienia, gdy proste (i łatwe do sfałszowania) sprawdzenie wersji podaje niewłaściwy numer, czy też program, który jest aktywniewykorzystywanie anomalii charakterystycznej dla konkretnego systemu operacyjnego / sprzętu, który może wymagać pełnej emulacji (w tym emulowania błędów, które zostały naprawione w nowszych wersjach sprzętu / systemu operacyjnego).Najczęściej głosowana odpowiedź dotycząca VM byłaby przesada w niektórych scenariuszach i niewystarczająca w innych.
FWIW Od czasu do czasu mam do czynienia ze starożytnym oprogramowaniem i czasami tak naprawdę zgaduję, że jego system operacyjny jest całkowicie błędny - jak program z wczesnej ery XP, który wierzył, że Windows 8 jest w rzeczywistości czymś starszym niż Windows 95 i jako taki niekompatybilny
Wygląda na to, że zakładasz, że możesz uruchomić plik binarny dla systemu operacyjnego * y * w systemie operacyjnym * z *.To generalnie nie jest prawdą, więc przede wszystkim nie masz sprawy.W przypadku systemów operacyjnych z tej samej rodziny (gdzie kompatybilność binarna jest ważna), możesz sfałszować kilka wywołań systemowych, aby oszukać program.Nie możesz ukryć systemu operacyjnego przed programem, ponieważ program ** potrzebuje ** systemu operacyjnego, aby cokolwiek zrobić.Wreszcie, programy nie mają bezpośredniego dostępu do sprzętu, mogą sprawdzać marki i ciągi dostawców (tak wykonuje się tanie testy AntiVM) lub najnowsze technologie, ale znowu łatwo je sfałszować.Rozszerzenia ISA można również przetestować.
Może być tańsze, aby kupić stary sprzęt w serwisie eBay lub w lokalnym sklepie typu Goodwill.
To istnieje.[WINE] (https://www.winehq.org/) sprawia, że Unix wygląda jak Windows, z perspektywy uruchomionego w nim programu.
Siedem odpowiedzi:
Mike Ounsworth
2020-03-05 01:30:07 UTC
view on stackexchange narkive permalink

Zuchwała odpowiedź: myślę, że masz zamiar wymyślić maszynę wirtualną.

Aby sfałszować sprzęt , aby wyglądał jak płyta główna z 2003 roku będziesz musiał poradzić sobie z takimi rzeczami, jak napisanie warstwy tłumaczenia instrukcji procesora, aby program dawał instrukcje binarne procesora z roku 2003, a twoja warstwa tłumaczyła je na instrukcje zrozumiałe dla sprzętu z 2019 roku.

Aby sfałszować system operacyjny , aby wyglądał jak 32-bitowy Windows 7, musisz ukryć wszystkie pliki binarne i inne pliki w C: \ Windows , C: \ Program Pliki itd., Które są ewidentnie częścią instalacji systemu Windows 10, a zamiast tego „fałszywy” kompletny system plików ze wszystkimi 32-bitowymi plikami systemu Windows 7. Potrzebowałbyś także otoki wokół jądra systemu Windows 10, aby interfejsy API jądra, które są dostępne dla programu, wyglądały i zachowywały się jak jądro systemu Windows 7. tj. naprawdę nie można tego „udawać”; po prostu musisz emulować w pełni funkcjonalną instalację 32-bitowego systemu Windows 7 w swoim systemie Windows 10.

Zanim to wszystko zrobisz, po prostu wymyślisz maszyny wirtualne . Dlaczego więc po prostu nie pobierzesz VirtualBox, nie ustawisz emulacji sprzętu na sprzęt z ery 2003 i nie zainstalujesz na nim 32-bitowego systemu Windows 7?

Jeśli chcesz emulować specjalnie procesor 2003, prawdopodobnie będziesz potrzebował czegoś takiego jak QEMU;AFAIK VirtualBox nie obsługuje pobierania określonych zestawów instrukcji.
Instrukcje x86 ery 2003 będą nadal działać na maszynach ery 2019 (w trybie 32-bitowym).Nie jest potrzebne żadne tłumaczenie.Ale nadal musisz mu powiedzieć, że dostępne są tylko instrukcje z 2003 roku.I może być konieczne zgłoszenie błędu, jeśli instrukcja późniejsza niż 2003 zostanie wykonana, w przeciwnym razie program może wykryć, że kłamiesz.
„emuluj w pełni funkcjonalną instalację 32-bitowego systemu Windows 7 w systemie Windows 10” - drobna uwaga, ale myślę, że OP odnosił się do odwrotnej strony ... obecnie używają 32-bitowego systemu Windows 7 i chcą „emulować”Win10 64-bit (lub WinXP).
@MrWhite Nie ma problemu, jeśli sprzęt obsługuje architekturę x64 i ma włączoną obsługę wirtualizacji, jest to możliwe nawet wtedy, gdy system operacyjny hosta jest 32-bitowy.Jeśli sprzęt jest NAPRAWDĘ 32-bitowy (lub nie ma możliwości wirtualizacji sprzętu), jedyną opcją jest pełna emulacja.I nie znam żadnego produktu, który to potrafi.
Brzmi jak projekt wina;ale ułatwiają celowe wykrycie.
Jak wyjaśniłem [tutaj] (https://stackoverflow.com/a/23998052/103167), wymagałoby to * emulatora *, a nie tylko maszyny wirtualnej.Maszyna wirtualna stwarza iluzję, że masz własną maszynę, podczas gdy w rzeczywistości udostępniasz ją innym (brak wycieku informacji między maszynami wirtualnymi).Emulator tworzy złudzenie, że pracujesz na określonym systemie innym niż rzeczywisty sprzęt (brak wycieku informacji o rzeczywistym sprzęcie do emulowanego środowiska).
@user253751: SDE (Emulator rozwoju oprogramowania) firmy Intel może to zrobić: dynamiczne tłumaczenie binarne (za pośrednictwem biblioteki Intel PIN) instrukcji, które muszą być emulowane jako obecne lub nieobecne, w przeciwnym razie prędkość natywna.na przykład[Jak przetestować instrukcje AVX-512 bez obsługiwanego sprzętu?] (Https://stackoverflow.com/q/51805127) / [Kodowanie na niewystarczającym sprzęcie] (https://stackoverflow.com/q/53637886).Nie jestem pewien, czy możesz emulować 64-bitową przestrzeń użytkownika w procesie 32-bitowym;oczywiście ograniczenia wirtualnej przestrzeni adresowej są problemem!QEMU może, ale prawdopodobnie nie SDE.
CBHacking
2020-03-05 15:16:15 UTC
view on stackexchange narkive permalink

W zależności od poziomu „sztuczki”, który chcesz, możesz to zrobić za pomocą wbudowanych funkcji zgodności. Windows obsługuje uruchamianie programów w specjalnych trybach, które na różne sposoby emulują starsze wersje i / lub starszy sprzęt. Emulacja nie jest idealna - łatwo jest stwierdzić, że jest używana, jeśli spojrzysz i powiedzieć, jaki jest rzeczywisty system operacyjny - ale zaspokoi to oprogramowanie, które myśli, że może działać tylko w systemie Windows 2000 lub tamto wie tylko o trybie 256 kolorów.

Aby oszukać oprogramowanie, by pomyślało, że działa na zupełnie innym systemie operacyjnym - Linux zamiast Windows lub podobnym - najlepszym rozwiązaniem (innym niż VM) jest wine (dla kodu systemu Windows w systemie Linux) lub wsl (podsystem Windows dla systemu Linux, uruchamia niezmodyfikowane pliki binarne ELF64 Linux i skrypty wymagające Linuksa, ale wymaga Win10). Ponownie, jest to całkiem wykrywalne przez wszystko, co go szuka , ale oszuka program, który po prostu wywołuje program lub wywołanie biblioteki, aby wypluć nazwę / wersję systemu operacyjnego.

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

Możesz to zrobić do pewnego stopnia, ale nie będzie to łatwe.

Po pierwsze, możesz wypróbować WINE, warstwę zgodności Windows dla Linuksa. Możesz łatwo ustawić wersję systemu Windows, którą chcesz emulować. Wadą jest to, że kompatybilność aplikacji może być bardzo chybiona, a jeśli twoja aplikacja nie działa, być może trzeba będzie znaleźć obejście, aby działała (jeśli w ogóle istnieje)

Drugi Podejściem, które dobrze pasowałoby do twojego drugiego wymagania (ukrywanie szczegółów sprzętu), jest QEMU. QEMU to bezpłatne oprogramowanie do maszyn wirtualnych, a powodem, dla którego wspominam o tym przy takich rzeczach, jak VMware lub VirtualBox, jest to, że zapewnia znacznie większą kontrolę nad rodzajem maszyny, którą chcesz zbudować, kosztem użyteczności.

Na przykład, możesz użyć flagi -cpu , aby określić, jaki rodzaj procesora chcesz emulować. Możesz na przykład użyć -cpu pentium3 do emulacji procesora Pentium 3. To właśnie zobaczy zainstalowany system-gość, a tym samym program.

Muszę powiedzieć, że WINE ani na chwilę nie oszukało moich aplikacji Windows.Może to był mój brak umiejętności lub preferencja dla piwa, ale moje aplikacje zawsze wiedziały, że nie działają na * prawdziwych * oknach!
@CortAmmon, skąd oni wiedzieli ?!:-RE
@CortAmmon WINE pozostawia własne, łatwe do zidentyfikowania wpisy rejestru w swoich instancjach fałszywego systemu Windows.
Jens
2020-03-05 18:51:09 UTC
view on stackexchange narkive permalink

Czy istnieje sposób lub program, który sprawi, że inny program uzna, że ​​używam innego systemu?

Tak, i jest to powszechne.

Na przykład FreeBSD posiada "Linuxulator", który pozwala na uruchamianie binariów Linuksa. To nie jest maszyna wirtualna ani emulacja. Jest to alternatywny zestaw wywołań systemowych dla plików binarnych Linuksa. Wykrywanie, czy plik binarny używa natywnych wywołań systemowych FreeBSD, czy wywołań systemowych Linuksa, odbywa się za pomocą nagłówka ELF pliku wykonywalnego, AFAIK.

Podobną zasadę stosuje się w WINE (który uruchamia programy natywne dla Windows w systemie Linux lub BSD) iw wersji 1 usług Windows dla systemu Linux (który uruchamia programy natywne dla systemu Linux w systemie Windows).

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

Tylko do pewnego stopnia, w zależności od programu.

Każdy nowoczesny system operacyjny ma wywołanie systemowe, które po prostu zwraca numer wersji i / lub ciąg znaków.

Jasne, możesz udawać że. Windows ma to nawet w interfejsie użytkownika (wyszukaj „tryb zgodności”).

Jeśli program wykracza poza to (jawnie wypróbowuje pewne możliwości systemu operacyjnego lub wyszukuje określone pliki w określonych miejscach), musisz przeprojektuj mechanizm wykrywania i zastanów się, jak go oszukać.

Zobacz odpowiedź @Mike - szybko wymyślisz maszyny wirtualne i emulatory. A nawet emulator nie jest idealnym rozwiązaniem.

Jestem prawie pewien, że tryb zgodności robi więcej niż tylko fałszowanie numeru wersji;kilka przykładów podano tutaj: https://superuser.com/questions/133746/how-does-the-compatibility-mode-in-windows-work i tutaj: 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

Zależy to od tego, co program (y) próbujesz „oszukać”. Czy jest to jeden konkretny program? W takim przypadku może przyjrzeć się dokładnie, w jaki sposób wywnioskuje, na jakim systemie operacyjnym i maszynie działa. Jeśli używa tylko jednego lub kilku sposobów, aby go wykryć, możesz znaleźć proste sposoby na przesłonięcie tych wywołań lub nawet załatanie samego programu plik wykonywalny .

Ale jeśli szukasz ogólnego rozwiązania, które oszuka dowolne lub wiele programów, zarówno poprawną i bezczelną odpowiedzią jest uruchomienie programu w jakimś emulowanym środowisku, takim jak Wine lub emulator systemu, taki jak Qemu.

Edytuj za pomocą „praktycznych” przykładów :

Używając WSL2 w Windows 10, możesz zainstalować Wine w Windows i uruchomić STARY Windows programy w systemie Windows 10, które w przeciwnym razie mogą nie działać w systemie Windows 10. Dzięki winetricks możesz zainstalować stare biblioteki systemowe i dostosować Wine, aby zachowywał się jak stare wersje systemu Windows.

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

Dodam tutaj tylko moje 10 bitów.

Jeśli Twój kontekst jest oparty na sieci, zdecydowanie możesz zmienić ciąg znaków USER AGENT za pomocą narzędzi programistycznych.

W przypadku przeglądarki Chrome przejdź do Narzędzi dla programistów ( Ctrl + Shift + I).

W zakładce Network przejdź do Network Conditions, a następnie User Agent.

Usuń zaznaczenie pola wyboru Wybierz automatycznie. Będziesz mógł teraz dowolnie wybierać klienta użytkownika, a także go edytować.

Uwaga: ta modyfikacja jest tymczasowa i zostanie cofnięta, jeśli odświeżysz lub zamkniesz narzędzia programistyczne.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...