crackme6 分析

注册机:


  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. #define _DEBUG 
  5.  
  6. int main (int argc, const char * argv[]) 
  7.     // title : crackme6 
  8.     // author: edmond 
  9.     // date: 2012.6.25 
  10.  
  11.     // Register Name: edmond  
  12.     // Serial: T8166813790 
  13.     char *name = “”
  14.      
  15.     // f1(Name) = mid_serial; 
  16.     char *code_table = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
  17.     char *sec_mid_serial = {0}; 
  18.     int name_sum = 0; 
  19.     sec_mid_serial = malloc(strlen(name)+1); 
  20.      
  21.     for (int i=0; i<strlen(name); i++) 
  22.         name_sum += name[i]; 
  23.     for (int i=0; i<strlen(name); i++) 
  24.         sec_mid_serial[i] = (char)( 
  25.                                    ( 
  26.                                     ( 
  27.                                      ( (code_table[i*3-1]^name[i]) +  
  28.                                        (name_sum*(i-1)^0xFFFFFFFF) +  
  29.                                        0x14D +  
  30.                                        strlen(name)*(i+3)*name[i] 
  31.                                      )%10+0x30 
  32.                                     )^0xADAC 
  33.                                    )*(i+2)%10+0x30 
  34.                                   ); 
  35.     char *mid_serial = malloc(100); 
  36.     sprintf(mid_serial, “T%s-%d”, sec_mid_serial, (int)(strlen(name)*name_sum%0x64+0x30)); 
  37.      
  38.     // f2(mid_serial) = last_serial; 
  39.     char *final_serial = malloc(100); 
  40.     final_serial[0] = mid_serial[0]; 
  41.     for (int i=1; i<strlen(mid_serial); i++) 
  42.         final_serial[i] = (mid_serial[i]^0x20)%10+0x30; 
  43.      
  44. #ifdef _DEBUG 
  45.     printf(“%s\n”,final_serial); 
  46. #endif    
  47.      
  48.     free(sec_mid_serial); 
  49.     free(mid_serial); 
  50.     free(final_serial); 
  51.     return 0;