Kopierschutz, Verhinderung der Manipulation von Programinstanzen durch Prüfsummen
-
Ist es möglich eine Prüfsumme über eine Funktion, bzw. einer Programinstanz zu bestimmen ? Und wenn ja, wie mache ich das am besten ?
Grundidee:
BOOL Check() // Zu prüfende Funktion { return TRUE; } // \brief Berechnet CRC über eine Funktion // \param F Pointer auf Funktion über dessen Wertebereich die CRC berechnet werden soll ULONG CalcFunctionCrc(tFunction F) { BYTE* Data = (BYTE*) F; size_t DataSize = 0; while (*Data != opcode("ret")) { DataSize++; Data++; } Data = (BYTE*) F; return CalcCrc(Data, Datasize); } int main(int argc, char** argv) { ULONG StoredCRC = CalcFunctionCrc(Check); ... if (CalcFunctionCrc(Check) != StoredCRC) printf("Manipulation detected!\n"); }
-
Meinst du jetzt von einer Funktion in deinem eigenen Programm? (void*?) Oder von einem Fremden? (CreateToolhelp32Snapshot, OpenProcess, VirtualQueryEx, ReadProcessMemory)
PS:
Man kann auch einfach die prüfende Funktion manipulieren..
-
Signiere Dein Programm und prüfe ob die Signatur noch gültig ist.
-
@cooky451:
Ich meine nur eigene Funktion um beispielsweise zu verhindern das jemand meinen eigenen Kopierschutz aushebelt.@Martin Richter:
Danke, ich schaue es mir mal an wie das funktioniert.
-
Man kann auch einfach die prüfende Funktion manipulieren..
Gewiss,
es geht ja auch einfach darum demjenigen, welcher das Program disassembliert, die Laune zu vermießen, in dem man ihm ständig Steine in die Füße wirft und seinen Arbeitsaufwand erheblich erhöht.
-
Dann sorg dafür, dass "Manipulation detected!\n" nicht in Klartext in dem Programm steht. Ansonsten könnte man den Weg vermutlich einfach rückwärts gehen

-