Vraag:
Kunt u uw besturingssysteem verbergen voor programma's? Kun je een programma laten denken dat je een ander besturingssysteem gebruikt?
Wolwo
2020-03-05 01:22:30 UTC
view on stackexchange narkive permalink

Is er een manier of programma om een ​​ander programma te laten denken dat ik een ander systeem gebruik?

Laten we bijvoorbeeld zeggen dat ik momenteel Windows 7 32-bits gebruik en ik wil dat het programma Windows detecteert 10 64-bit of misschien Windows XP.

Kan ik iets soortgelijks doen met hardware? Kan ik een programma zien dat ik begin 2003 op een pc draai, ook al is het van vorig jaar (2019)?

Enigszins verwante vraag: [Waarom is de OS-verduistering verdediging tegen "Het is een Unix-systeem!"niet algemeen geïmplementeerd?] (/ q / 222839/129883)
Kunt u uitleggen WAAROM u dit wilt doen?Is het om software te laten draaien die het besturingssysteem of de hardware rechtstreeks detecteert?
Dat lukt niet omdat het detecteren van het besturingssysteem meestal meer is dan alleen het controleren van een nummer;het aanroepen van een functie die niet bestaat in het host-besturingssysteem zal het programma laten crashen.
De reikwijdte van deze vraag lijkt veel te breed - het behoeft verduidelijking of we vragen of we een programma voor de gek willen houden dat gewoon weigert uit te voeren wanneer een eenvoudige (en gemakkelijk vervalste) versiecontrole het verkeerde nummer geeft, of een programma dat actief ismisbruik maken van een anomalie die eigen is aan het specifieke besturingssysteem / hardware, die mogelijk een volledige emulatie nodig heeft (inclusief het emuleren van bugs die zijn opgelost op nieuwere hardware / OS-releases).Het meest gestemde antwoord over VM zou voor sommige scenario's overdreven zijn en onvoldoende voor andere.
FWIW Ik heb van tijd tot tijd te maken met oude software, en soms raadt het in feite zijn host-OS helemaal verkeerd - zoals een programma uit het vroege XP-tijdperk dat gelooft dat Windows 8 eigenlijk iets ouder is dan Windows 95 en als zodanig incompatibel is
Het lijkt erop dat u aanneemt dat u een binair bestand kunt uitvoeren voor het besturingssysteem * y * in het besturingssysteem * z *.Dat is over het algemeen niet waar, dus je hebt in de eerste plaats geen case.Voor besturingssystemen in dezelfde familie (waar binaire compatibiliteit een ding is), kunt u een paar systeemaanroepen vervalsen om een programma te misleiden.U kunt een besturingssysteem niet verbergen voor een programma omdat het programma ** het besturingssysteem ** nodig heeft om iets te doen.Ten slotte hebben programma's geen directe toegang tot de hardware, ze kunnen merken en leveranciersreeksen controleren (zo worden goedkope antiVM-controles uitgevoerd) of recente technologieën, maar nogmaals, gemakkelijk te vervalsen.ISA-extensies kunnen ook worden getest.
Het is misschien goedkoper om wat oude hardware op eBay of een lokale Goodwill-winkel op te halen.
Dit bestaat.[WINE] (https://www.winehq.org/) laat Unix lijken op Windows, vanuit het perspectief van het programma dat erin draait.
Zeven antwoorden:
Mike Ounsworth
2020-03-05 01:30:07 UTC
view on stackexchange narkive permalink

Brutaal antwoord: ik denk dat je op het punt staat een virtuele machine uit te vinden.

Om de hardware te vervalsen zodat het eruit ziet als een moederbord uit 2003 je zult zaken moeten doen als het schrijven van een vertaallaag voor CPU-instructies, zodat het programma binaire CPU-instructies uit het 2003-tijdperk geeft, en jouw laag vertaalt ze in instructies die je hardware uit 2019 begrijpt.

Om het besturingssysteem te vervalsen, zodat het eruitziet als Windows 7 32-bits, moet u alle binaire bestanden en andere bestanden verbergen in C: \ Windows , C: \ Program Bestanden , enz., Die duidelijk deel uitmaken van een Windows 10-installatie, en in plaats daarvan een compleet bestandssysteem "vervalsen" met alle 32-bits bestanden van Windows 7. Je hebt ook een wrapper rond de Windows 10-kernel nodig om de kernel-API's die toegankelijk zijn voor het programma eruit te laten zien en zich te gedragen als de Windows 7-kernel. dwz je kunt dit niet echt "faken"; je moet in principe een volledig functionele installatie van Windows 7 32-bit in je Windows 10 emuleren.

Tegen de tijd dat je dat allemaal hebt gedaan, zul je in feite virtuele machines hebben uitgevonden . Dus waarom download je niet gewoon VirtualBox, stel je de hardware-emulatie in op hardware uit het 2003-tijdperk en installeer je Windows 7 32-bits erop?

Als je specifiek een 2003 CPU wilt emuleren, wil je waarschijnlijk zoiets als QEMU;AFAIK VirtualBox biedt geen ondersteuning voor het kiezen van specifieke instructiesets.
X86-instructies uit het tijdperk van 2003 kunnen nog steeds worden uitgevoerd op machines uit het tijdperk van 2019 (in 32-bits modus).Er is geen vertaling nodig.Maar je moet hem nog steeds vertellen dat alleen de instructies uit het 2003-tijdperk beschikbaar zijn.En misschien moet u een foutmelding geven als een instructie later dan 2003 wordt uitgevoerd, anders kan het programma detecteren dat u liegt.
"emuleer een volledig functionele installatie van Windows 7 32-bit in uw Windows 10" - klein puntje, maar ik denk dat het OP naar andersom verwees ... ze gebruiken momenteel Win7 32-bit en willen "emuleren"Win10 64-bits (of WinXP).
@MrWhite Geen probleem als de hardware geschikt is voor x64 en virtualisatie-ondersteuning is ingeschakeld, dit is mogelijk zelfs als het host-besturingssysteem 32-bits is.Als de hardware ECHT 32-bits is (of geen hardwarevirtualisatiemogelijkheden heeft), is volledige emulatie de enige optie.En ik ken geen enkel product dat dat kan.
Klinkt als het wijnproject;maar ze maken het gemakkelijk opzettelijk op te sporen.
Zoals ik [hier] (https://stackoverflow.com/a/23998052/103167) heb uitgelegd, zou hiervoor een * emulator * nodig zijn, niet alleen een virtuele machine.Een virtuele machine wekt de illusie dat u uw eigen machine heeft, terwijl u deze in feite deelt met anderen (geen informatielek tussen VM's).Een emulator wekt de illusie dat u op een bepaald systeem werkt dat verschilt van de daadwerkelijke hardware (er lekt geen informatie over de daadwerkelijke hardware naar de geëmuleerde omgeving).
@user253751: Intel's SDE (Software Development Emulator) kan dat doen: dynamische binaire vertaling (via Intel PIN-bibliotheek) voor instructies die moeten worden geëmuleerd als aanwezig of niet-aanwezig, anders native snelheid.bijv.[Hoe de AVX-512-instructies te testen zonder ondersteunde hardware?] (Https://stackoverflow.com/q/51805127) / [Codering op onvoldoende hardware] (https://stackoverflow.com/q/53637886).Ik weet echter niet zeker of u 64-bits gebruikersruimte kunt emuleren in een 32-bits proces;uiteraard zijn de limieten van de virtuele adresruimte een probleem!QEMU kan, maar waarschijnlijk niet SDE.
CBHacking
2020-03-05 15:16:15 UTC
view on stackexchange narkive permalink

Afhankelijk van het niveau van "truc" dat u wilt, kunt u dit mogelijk doen met ingebouwde compatibiliteitsfuncties. Windows ondersteunt het uitvoeren van programma's in speciale modi die oudere versies en / of oudere hardware op verschillende manieren emuleren. De emulatie is niet perfect - het is vrij gemakkelijk om te zien dat het wordt gebruikt, als je kijkt, en om te vertellen wat het daadwerkelijke besturingssysteem is - maar het voldoet aan een stukje software dat denkt dat het alleen op Windows 2000 of dat kan draaien kent alleen de 256 kleurenmodus.

Om de software te laten denken dat het op een totaal ander besturingssysteem draait - Linux in plaats van Windows of iets dergelijks - is uw beste gok (anders dan een VM) wijn (voor Windows-code op Linux) of wsl (Windows-subsysteem voor Linux, draait ongemodificeerde ELF64 Linux-binaire bestanden en Linux-vereiste scripts, maar vereist Win10). Nogmaals, dit is behoorlijk detecteerbaar door iedereen die ernaar zoekt , maar het zal een programma voor de gek houden dat gewoon een programma- of bibliotheekoproep aanroept om de naam / versie van het besturingssysteem uit te spugen.

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

Je kunt dit tot op zekere hoogte doen, maar het zal niet gemakkelijk zijn.

Ten eerste kun je WINE proberen, een Windows-compatibiliteitslaag voor Linux. U kunt vrij eenvoudig instellen welke versie van Windows u wilt emuleren. Het nadeel is dat de compatibiliteit van applicaties erg wisselvallig kan zijn, en als je applicatie niet werkt, moet je misschien een oplossing bedenken om het te laten werken (als er al een bestaat).

De tweede aanpak, die goed zou passen bij uw tweede vereiste (hardwaregegevens verbergen) is QEMU. QEMU is gratis Virtual Machine-software en de reden dat ik dit noem over zaken als VMware of VirtualBox is dat het je veel meer controle geeft over het soort machine dat je wilt bouwen, ten koste van de bruikbaarheid.

U kunt bijvoorbeeld de vlag -cpu gebruiken om aan te geven wat voor soort CPU u wilt emuleren. U kunt bijvoorbeeld -cpu pentium3 gebruiken om een ​​Pentium 3 CPU te emuleren. Dat is wat het geïnstalleerde gast-besturingssysteem en daarom het programma zou zien.

Ik moet zeggen dat mijn Windows-applicaties geen moment voor de gek gehouden werden door WINE.Misschien was het mijn gebrek aan vaardigheid, of een voorkeur voor bier, maar mijn applicaties wisten altijd dat ze niet op * echte * vensters draaiden!
@CortAmmon hoe wisten ze dat ?!:-D
@CortAmmon WINE laat zijn eigen, gemakkelijk identificeerbare registervermeldingen achter in zijn faux-Windows-instanties.
Jens
2020-03-05 18:51:09 UTC
view on stackexchange narkive permalink

Is er een manier of programma om een ​​ander programma te laten denken dat ik een ander systeem gebruik?

Ja, en het komt vaak voor.

Bijvoorbeeld FreeBSD heeft een "Linuxulator" die het mogelijk maakt om Linux binaries te draaien. Dit is noch in een virtuele machine, noch in een emulatie. Het is een alternatieve set systeemaanroepen voor Linux-binaire bestanden. Detectie of een binair bestand native FreeBSD-systeemaanroepen of Linux-systeemaanroepen gebruikt, gebeurt via de ELF-header van het uitvoerbare bestand, AFAIK.

Een soortgelijk principe wordt gebruikt in WINE (dat Windows-native programma's op een Linux- of BSD-systeem draait) , en in versie 1 van Windows Services voor Linux (die Linux-native programma's op Windows draait).

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

Slechts tot op zekere hoogte, afhankelijk van het programma.

Elk modern besturingssysteem heeft een systeemaanroep die alleen een versienummer en / of een string retourneert.

Natuurlijk kun je nep dat. Windows heeft dit zelfs in de UI (zoek naar "compatibiliteitsmodus").

Als het programma verder gaat (expliciet bepaalde OS-mogelijkheden uitproberen of zoeken naar specifieke bestanden op specifieke plaatsen), dan moet je reverse-engineering van het detectiemechanisme en denk goed na hoe je het voor de gek kunt houden.

Zie het antwoord van @Mike - je zult snel de VM's en emulators uitvinden. En zelfs een emulator is geen perfecte oplossing.

Ik ben er vrij zeker van dat de compatibiliteitsmodus meer doet dan alleen de versiestring vervalsen;een paar voorbeelden worden hier gegeven: https://superuser.com/questions/133746/how-does-the-compatibility-mode-in-windows-work en hier: 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

Het zal afhangen van wat je programmeert (en) dat je voor de gek probeert te houden. Is het een specifiek programma? Kijk in dat geval misschien precies na hoe het afleidt op wat voor soort besturingssysteem en machine het draait. Als het slechts een of een paar manieren gebruikt om het te detecteren, zou je eenvoudige manieren kunnen vinden om die aanroepen te negeren, of zelfs om het uitvoerbare bestand zelf van het programma te patchen.

Maar als je bent op zoek naar een algemene oplossing die een of meer programma's voor de gek houdt, het juiste en brutale antwoord is om het programma in een soort geëmuleerde omgeving uit te voeren, zoals Wine of een systeememulator zoals Qemu.

Bewerken met "praktische" voorbeelden :

Met WSL2 op Windows 10 kunt u Wine in Windows installeren en OUDE Windows draaien programma's in Windows 10 die anders misschien niet werken in Windows 10. Met winetricks kunt u oude systeembibliotheken installeren en Wine aanpassen om zich te gedragen als oude Windows-versies.

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

Voeg hier gewoon mijn 10 bits toe.

Als uw context webgebaseerd is, kunt u zeker de USER AGENT-string wijzigen met behulp van ontwikkelaarstools.

Voor Chrome gaat u naar Developer Tools ( Ctrl + Shift + I).

Ga op het tabblad Netwerk naar Netwerkcondities en vervolgens naar User Agent.

Schakel het selectievakje Automatisch selecteren uit. U kunt nu naar believen User Agent selecteren en deze ook bewerken.

Opmerking: deze wijziging is tijdelijk en wordt teruggedraaid als u ontwikkelaarstools vernieuwt of sluit.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 4.0-licentie waaronder het wordt gedistribueerd.
Loading...