A keygenme is specifically designed for the reverser to not only identify the protection algorithm used in the application but also create a small key generator (keygen) in the programming language of their choice.
Most keygenmes, when properly manipulated, can be made self-keygenning. For example, during validation, they might generate the correct key internally and compare it to the user's input. This allows the key generation algorithm to be easily replicated.
Anti-debugging and anti-disassembly routines are often used to confuse debuggers or render disassembly output useless.2 Code obfuscation is also used to further complicate reverse engineering.3
"crackmes.de Frequently Asked Questions". Archived from the original on 2006-07-14. Retrieved 2008-10-31. https://web.archive.org/web/20060714121844/http://www.crackmes.de/faq/ ↩
"Windows Anti-Debug Reference". Archived from the original on 2008-05-15. https://web.archive.org/web/20080515114824/http://www.securityfocus.com/infocus/1893 ↩
"Code Obfuscaton". Archived from the original on 2008-10-21. Retrieved 2008-10-31. https://web.archive.org/web/20081021074010/http://palisade.plynt.com/issues/2005Aug/code-obfuscation/ ↩