| Source Insight是一个功能强劲的程序编辑器,他内置对C/C++,Java和x86汇编语言程序的解析;有自己的动态数据库在你编程时提供有用的文本提示,包括有关的函数,宏,参数等 软件定位按钮事件自已找,我只是对软件分析下
 [C] 纯文本查看 复制代码 int __stdcall Matching_RegCode(char *regcode)
{
  int result; // eax@2
  if ( cmpstring(regcode) )                     // 检验注冊码是否以ASCII "ES3US"开头 他妈太阴险了这个有两个算法CALL ES3US以这个字串开头注册码就会进入一个假算法,不怎配件都不成功!让我陷在里面好久
    result = FalseArithmetic(regcode);          // 假算法CALL,跟进去匹配不出注册码
  else
    result = Arithmetic(regcode);               // 检验注冊码是否以ASCII "SI3US"开头
  return result;
}
 
 [C] 纯文本查看 复制代码 int __stdcall Arithmetic(char *regcode)
{
  int v1; // eax@1
  int result; // eax@2
  int v3; // [sp+0h] [bp-110h]@7
  unsigned int i; // [sp+4h] [bp-10Ch]@7
  char regcode_2[4]; // [sp+8h] [bp-108h]@3 存放第二部分注册码的前四位
  unsigned int v6; // [sp+108h] [bp-8h]@12
  int regcode_3_halsh; // [sp+10Ch] [bp-4h]@3 存放第三部分16进制的形式
  v1 = strlen(aSi3us);
  if ( cmpstr(regcode, aSi3us, v1) )
  {
    if ( sub_449244(regcode, regcode_2, ®code_3_halsh) )// 检验注册码格式,并copy出第二部注册码,以及第三部分16进制
    {
      if ( Checkout(regcode_2, regcode_2[0]) )  // 不能出现连续相同字符比如 111111 222222
      {
        result = 0;
      }
      else
      {
        v3 = atoi(regcode_2);                   // atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数
        for ( i = 0; i < 0x1E; ++i )
        {
          if ( v3 == key[i] )                   // key存放的是第二部分不能出现的字串,其实是黑名单,如果注册码有这些字串注册是出错
            return 0;
        }
        v6 = KernelArithmetic(regcode_2);
        result = regcode_3_halsh == v6;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
 
 [C] 纯文本查看 复制代码 int __stdcall sub_449244(char *regcode, char *regcode_2, int regcode_3)
{
  int result; // eax@2
  char *x; // eax@5
  char *v5; // [sp+4h] [bp-10h]@5
  char *m; // [sp+8h] [bp-Ch]@5
  char *n; // [sp+10h] [bp-4h]@1
  n = strchr(regcode, 0x2D);                    // 查找字符串s中首次出现字符-的位置 n
  if ( n )
  {
    if ( n - regcode == strlen(aSi3us) )        // SI3US后面为连接符
    {
      m = n + 1;                                // 第一连接符地址m
      x = strchr(n + 1, 0x2D);                  // 查找下个"-"的位置x
      v5 = x;
      if ( x )                                  // 没找到返回失败
      {
        *x = 0;
        if ( x - m == 6 )                       // 第一连接符在第连符相隔6
        {
          strcpy(regcode_2, m);                 // 把第二组注冊码输出
          if ( strlen(v5 + 1) == 5 )            // 第三组注册码长度为5
          {
            *regcode_3 = atoi(v5 + 1);          // 是把字符串转换成整型数的一个函数
            *v5 = 0x2D;
            result = 1;
          }
          else
          {
            result = 0;
          }
        }
        else
        {
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}
 
 [AppleScript] 纯文本查看 复制代码 unsigned int __stdcall KernelArithmetic(char *regcode_2)
{
  int v2; // [sp+4h] [bp-Ch]@1
  char *i; // [sp+8h] [bp-8h]@1
  int Halsh; // [sp+Ch] [bp-4h]@1
  Halsh = atoi(regcode_2);                      // atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数
  v2 = 0;
  for ( i = regcode_2; *i; ++i )
  {
    Halsh = (key2[v2++] ^ *i) + 4 * Halsh;
    if ( v2 == 0xA )
      v2 = 0;
  }
  return Halsh % 0x186A0u;
}
 未注册
 
   
   已注册
 
   
   
   
 
 
 |