Reverser ärgern

06/14/2013 12:34 Crack-wtf#1
Wie kann man einem Reverser so richtig auf den Pisser gehn?

Beispiel.
Ich habe eine Funktion zum Beschrieben einer Addresse.
Ich dachte mir folgendes.

- Die Zu beschreibende Addresse in mehreren Klassen "Splitten" und später Parsen.
- Die Funktion zu beginn Kopieren, Verschlüsseln und irwo Abspeichern.
Dann beim Callen die Funktion Entschlüsseln und ausführen.

Aber ich denke das reicht noch nicht. Und das Ver/Entschlüsseln ist bestimmt Performancelastig, wenn man plant sie öfter zu callen.
Habt ihr Ideen?
06/14/2013 13:07 MrSm!th#2
Wieso die Funktion zur Laufzeit verschlüsseln und später entschlüsseln? Direkt verschlüsselt ins Binary. Nur für den Aufruf entschlüsseln und direkt danach wieder verschlüsseln. Am besten ne Art Kontrollwert aus der verschlüsselten Funktion berechnen, der als Key für die Entschlüsselung der nächsten dient. Code direkt von nem Server streamen. Kontrollthreads, die die Ausführzeit kontrollieren und so das Durchsteppen erschweren.
Alles natürlich ziemlich unpraktikabel und aufwändig (hauptsächlich manuell zu realisieren) und deshalb für große Dinge nicht so geeignet, aber für kleine Programme und Crackmes sicherlich ;O

In "Reversing - The secrets of reverse engineering" werden ziemliche viele derartige Techniken in ein Crackme eingebaut.
06/14/2013 16:39 Nightblizard#3
Skype macht das ganz gut!
Die haben überall total sinnlose Checks drinnen, die ganz zufällig fake-exceptions werfen. Außerdem ist jeder call dynamisch berechnet.

Das macht es sau schwer den Code zu verstehen, wenn man ihn durch einen disassembler jagen tut.

Ist ganz interessant was die da so alles gemacht haben! Hier ist ne pdf dazu:
[Only registered and activated users can see links. Click Here To Register...]