Dxtory 2.0.118 Cracked - Writeup *Update*
For everyone who got here by serveral warez and torrent sites: the posted crack does work for the trail-version bypass, but the watermark is independent from the actual program Dxtory. I think that DxtroyCore.dll (native code) includes this watermark by checking the actual licence stored in:
%LocalApplicationData%\Dxtory Software\Dxtory2.0\register.dat
Again: WATERMARK STILL INCLUDED!
Altes UPDATE: Der Artikel war bisher Passwortgeschützt, jetzt hat sich das aber zunächst erledigt. Das Programm ist zwar gecracked, aber das Wasserzeichen in den Aufnahmen ist weiterhin vorhanden. Leider kann ich in den nächsten Tagen nicht am Crack weitermachen, es wird dann ein weiteres Update mit mehr Informationen geben
Dxtroy ist eine in .NET geschriebene Aufnahmesoftware, welche über native DirectX Hooks, ähnlich Fraps, Aufnahmen macht. Eigentlich eine sehr coole Sache, nur leider bietet die Trail-Version einige Einschränkungen die es zu entfernen gilt.
Ein Keygen wird nicht erstellt, ein Patch war schlichtweg einfacher. Ein Patch ist für einen Coder leichter zu fixxen als das ganze Lizenzsystem umzustellen, so fair sollte man doch sein.
Dxtroy ist mit den Obfuscator “Dotfuscator” geschützt. Dotfuscator beschränkt sich auf das Umbenennen von allen Typen, Methoden und Feldern und ist daher für uns nicht wirklich ein Hinderhis. Sobald man sich die Klassennamen merkt findet man sich leicht zurecht. Alternativ kann man mit dem EasyAssemblyRenamer ein bisschen Ordnung schaffen, bringt viel Übersicht.
Im EntryPoint (ey.a) befinden sich wenige Zeilen, es wird das “StartupEvent” gesetzt und danach eine neue Instanz der Form gestartet. Die ganzen Checks finden in dem StartupEvent statt, daher sollte die Funktion “a(Object, StartupEventArgs)” näher angeschaut werden.
Viel Code springt einem in diesen Event entgegen, das meiste können wir getrost ignorieren. Es werden ein paar SHA-Filehashes errechnet und ein Logfile erzeugt. Interessant wird es ab diesem Punkt hier. Der Source ist übrigens von den Namen her modifiziert, im Original ist das ganze unübersichtlicher.
Assembly entryAssembly = Assembly.GetEntryAssembly(); AssemblyName name = entryAssembly.GetName(); byte[] publicKey = name.GetPublicKey(); LicenceCheck.class0_0.PublicKeyPart = new byte[publicKey.Length - 12]; Array.Copy(publicKey, 12, LicenceCheck.class0_0.PublicKeyPart, 0, LicenceCheck.class0_0.PublicKeyPart.Length); LicenceCheckThreads.StartThreads(); LicenceCheckThreads.JoinThreads(); if (!LicenceCheck.class0_0.IsLicenced) { TrialDialog trialDialog = new TrialDialog(); if (!trialDialog.ShowDialog().Value) { base.Shutdown(); return; } } if (LicenceCheckThreads.CheckIfExpired()) { base.Shutdown(); return; } |