.bin File ausführen
-
Hi,
Neuerdings ist es ja bei einigen spielen in mode gekommen die Spiel.exe ( *g ) in einem anderem Format im Spielordner zu Platzieren, die Einstiegspunkte zu verschieben um so den User zu Zwingen den dazugehörigen Launcher zu benutzen.
Ich will jetzt zwar niemanden auf Launcher zwingen, aber wie funktioniert das ? Wie kann man sowas in C++ realisieren oder nach was muss ich googeln :D?
Wäre nett wenn ihr mir da helfen könnt
-
bump
-
1. Kannst du Beispiele nennen von Spielen, wo das in die Mode gekommen ist. Ich weiss irgendwie nix davon. Das einzige was ich kenne ist, dass man alle Daten in ein einzelnes Format abspeichert. Also von den 3D-Modellen über Texturen bis hin zu den Soundfiles. Aber das hat nichts mit der auführbaren Datei zu tun.
2. Es wäre ganz sicher nicht über Standard C++ realisierbar. Da müsste man, wenn das denn überhaupt ginge, mit der WinAPI (auf Windows) arbeiten. Wobei es mich ein wenig wundern würde, wenn man sowas wirklich bewerkstelligen könnte.
3. Wofür möchte man sowas überhaupt machen? Das leuchtet mir irgendwie am allerwenigsten ein.
Grüssli
-
Habe das bis jetzt auch noch nie beobachtet, dass die eine auführbare exe verschleiern..
Allerdings kannst du ja die exe einfach als spiel.dufindestmichnicht speichern und durch den Launcher als ausführbare Datei handhaben.
Allerdings sehe ich den Sinn auch nicht so ganz.
EDIT:
Du kannst ja natürlich auch noch die exe in einem verschlüsselten Ordner speicher und dann das durch den Loader laden.
-
Wofür möchte man sowas überhaupt machen?
bei onlinespiele bzw spielen mit nem online multiplayerteil will man oft die aktuellste version erzwingen.
Wobei man das eigentlich mit nem einfachen versionscheck handhaben koennte.
Ist aber ned so komfortabel als wenn sich alles wie von selbst aktualisiert.das in bestimmten Faellen die exe "umbenannt" wird, iss mir auch noch ned begegnet.
am einfachsten man schreibt nen launcher, der sich um die aktualitaet bemueht, und verlagert das komplette Spiel in ne dll, die man zur laufzeit, also nach dem updaten erst anzieht ....Falls man aber andere prozessbedingungen im spiel als wie im launcher haben will/muss, ok, dann geht das ned mit der dll, man muesst dann den prozess überlagern, also von dem launcher die spiel.exe aufrufen.
Was es fuer einen sinn machen soll, die exe zu verschleiern, keine ahnung, selbst bei der methode koannt man vor dem ausfruehren der exe die checksumme prufen um sicherzustellen, das es die korreckte exe ist, und paar parameter mitgeben, das man die ned manuell starten kann ... oder im launcher nen Globales IPC object anlegen, ohne dem die spiele.exe ned startet ... etc ...
Ciao ...
-
bei onlinespiele bzw spielen mit nem online multiplayerteil will man oft die aktuellste version erzwingen.
Wobei man das eigentlich mit nem einfachen versionscheck handhaben koennte.
Ist aber ned so komfortabel als wenn sich alles wie von selbst aktualisiert.Das ist aber ein wenig komisch. Lass das Spiel einfach nicht starten, wenn eine alte Version da ist und regle das über den Launcher, den du als "normalen" Pfad angibst. Fertig. Wenn da jemand die exe holt, dann ist der ja selber schuld, wenn er rumpfuscht.
Also das kann ja auch nicht der Grund sein..
-
drakon schrieb:
bei onlinespiele bzw spielen mit nem online multiplayerteil will man oft die aktuellste version erzwingen.
Wobei man das eigentlich mit nem einfachen versionscheck handhaben koennte.
Ist aber ned so komfortabel als wenn sich alles wie von selbst aktualisiert.Das ist aber ein wenig komisch. Lass das Spiel einfach nicht starten, wenn eine alte Version da ist und regle das über den Launcher, den du als "normalen" Pfad angibst. Fertig. Wenn da jemand die exe holt, dann ist der ja selber schuld, wenn er rumpfuscht.
Also das kann ja auch nicht der Grund sein..Mehr Code wo unnötig wenn Launcher explizit gestartet werden muss.
-
Kopierschutz. SafeDisc macht das z.B. Die .bin ist die eigentliche Exe. Diese wird entschlüsselt und gestartet, sobald der Kopierschutzcheck erfolgreich war.
-
unsinnig schrieb:
drakon schrieb:
bei onlinespiele bzw spielen mit nem online multiplayerteil will man oft die aktuellste version erzwingen.
Wobei man das eigentlich mit nem einfachen versionscheck handhaben koennte.
Ist aber ned so komfortabel als wenn sich alles wie von selbst aktualisiert.Das ist aber ein wenig komisch. Lass das Spiel einfach nicht starten, wenn eine alte Version da ist und regle das über den Launcher, den du als "normalen" Pfad angibst. Fertig. Wenn da jemand die exe holt, dann ist der ja selber schuld, wenn er rumpfuscht.
Also das kann ja auch nicht der Grund sein..Mehr Code wo unnötig wenn Launcher explizit gestartet werden muss.
Du versteckst also lieber deine Dateien, als eine einfache Zeile Code in dein Projekt einzufügen?
if (version < expectet_version) throw "To old version!";
-
Na es geht ja nicht nur um die Version, aber mir geht es eigentlich eher so ums hintergrundwissen wie sowas funktioniert. Weil mit unbenennen und ausführen das is nicht so einfach. Manchmal ist es verschlüsselt wie schon gesagt wurde oder der Entry Point ist verschoben.
Aktuellstes Beispiel. Warhammer Online:
-
Schurke schrieb:
Na es geht ja nicht nur um die Version, aber mir geht es eigentlich eher so ums hintergrundwissen wie sowas funktioniert. Weil mit unbenennen und ausführen das is nicht so einfach. Manchmal ist es verschlüsselt wie schon gesagt wurde oder der Entry Point ist verschoben.
Aktuellstes Beispiel. Warhammer Online:
Da ist die exe aber nicht versteckt, oder was auch immer. Ich nehme mal an, dass, wenn du über den Launcher starten musst der einfach einen string übergibt, der dann überprüft wird. ( Du kannst einer exe ja Parameter übergeben ).
Und wenn du normal startest wird halt nix übergeben und somit ev. abgebrochen.
-
drakon schrieb:
Da ist die exe aber nicht versteckt, oder was auch immer. Ich nehme mal an, dass, wenn du ueber den Launcher starten musst der einfach einen string uebergibt, der dann ueberprueft wird. ( Du kannst einer exe ja Parameter uebergeben ).
Und wenn du normal startest wird halt nix uebergeben und somit ev. abgebrochen.das waere aber ein unzureichender Kopierschutz... schliesslich muss man nur in Erfahrung bringen, mit welchen Argumenten die Anwendung gestartet wurde...
-
zwutz schrieb:
drakon schrieb:
Da ist die exe aber nicht versteckt, oder was auch immer. Ich nehme mal an, dass, wenn du ueber den Launcher starten musst der einfach einen string uebergibt, der dann ueberprueft wird. ( Du kannst einer exe ja Parameter uebergeben ).
Und wenn du normal startest wird halt nix uebergeben und somit ev. abgebrochen.das waere aber ein unzureichender Kopierschutz... schliesslich muss man nur in Erfahrung bringen, mit welchen Argumenten die Anwendung gestartet wurde...
Seit wann geht es hier um einen Kopierschutz? Es gingt einmal darum, dass die Version gecheckt wird und man durch einen Launcher gezwungen wird vorher zu upgraden.
Aber natürlich geht der Kopierschutzt dann halt (beim Launcher) online und checkt da den Account und übergibt die Daten der exe, welche dann decodiert, oder was auch immer..
Die technische Umsetzung ist nicht das Problem. Das Problem ist, wie du schon richtig sagst die sichere (verschlüsselte) Kommunikation, was aber ein ganz anderes Thema ist. Dafür braucht man dann aber auch keinen Launcher.
-
drakon schrieb:
Seit wann geht es hier um einen Kopierschutz? Es gingt einmal darum, dass die Version gecheckt wird und man durch einen Launcher gezwungen wird vorher zu upgraden.
also dem OP ging es um die technik hinter launchern, die eine veraenderte oder irgendwie verschluesselte EXE starten. wozu auch immer.
im endeffekt machen alle kommerziellen kopierschutze genau das. frueheres safedisc hat tatsaechlich eine externe BIN nachgeladen. heutige kopierschutze packen die verschluesselte BIN zusammen mit dem loader/decrypter direkt in eine EXE rein.
die technik dahinter (abgesehen von der decryption) ist eher simpel, da wird IMO einfach speicher allocated, in diesen dann das neue EXE image entpackt, und dann wird der execution pointer oder wie das ding heisst auf den entry point dieser entpackten exe gesetzt.
-
loki1985 schrieb:
[...]
Also so eine Art "Security through obscurity". Hmm. Kein Wunder, dass der Krempel immer so schnell geknackt wird.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
loki1985 schrieb:
...
die technik dahinter (abgesehen von der decryption) ist eher simpel, da wird IMO einfach speicher allocated, in diesen dann das neue EXE image entpackt, und dann wird der execution pointer oder wie das ding heisst auf den entry point dieser entpackten exe gesetzt...
genau sowas meinte ich _ nur wie mache ich das jetzt in c++? oder nach was muss ich da googeln :D?
-
puh, wie du das machst: eher nicht auf die einfache tour. wenn du das wirklich willst, dann wirst du wohl etwas zeit investieren muessen.
kannst dir ja mal quellcode von EXE-packern anschauen, wie dort entpackt und dann auf den neuen speicher verwiesen wird.
@Tachyon: exakt. das einzige was man fruher tun musste war einen breakpoint an der richtigen stelle setzen, den speicher dumpen, und dann die imports korrigieren. war noch nicht so wirklich ein problem.
heutzutage machen die kopierschutze meist eine art VM, sie entpacken nicht die komplette binary in den speicher, sondern nur aktuell genutzte teile, und verschluesseln diese sogar teilweise nach der nutzung wieder... aber auch das laesst sich knacken wie woechentlich bewiesen wird...