#include #include /* * Keygen for LuCiFeR's First C++ Crackme * http://crackmes.de/users/lucifer/first_c_crackme/ * * Copyright 2008 Lee Hinman */ int get_key(int namelen) { int foo = 0; __asm__ __volatile__("mov %%eax, %%edx;" "imul $0x875cd, %%edx;" "mov $0x51eb851f, %%eax;" "mul %%edx;" "mov %%edx, %%eax;" "shr $5, %%eax;" "imul $0xfffffc90, %%eax;" "mov $0, %%edx;" "push %%edx;" "push %%eax;" "fildll %%ss:(%%esp);" "fstpl 0x8(%%esp);" "mov 0x8(%%esp), %%eax;" :"=a"(foo) :"a"(namelen)); return foo; } int main(int argc, char** argv) { if (argc < 2) { printf("./keygen "); return 0; } int key; key = get_key(strlen(argv[1])); printf("key: %i-x019871\n",key); return 0; }