• recursion的算法分析


     1 UINT __cdecl sub_401150(HWND hDlg)
     2 {
     3   UINT result; // eax@3
     4   unsigned int lenth; // kr04_4@4
     5   signed int v3; // esi@4
     6   unsigned int v4; // edi@5
     7   char v5; // bl@6
     8   unsigned int v6; // edx@8
     9   unsigned int v7; // eax@16
    10   signed int j; // eax@21
    11 
    12   *(_DWORD *)szName = 0;
    13   dword_4084E4 = 0;
    14   dword_4084E8 = 0;
    15   dword_4084EC = 0;
    16   memset(&unk_4085FC, 0, 0x1000u);
    17   byte_4084F0 = 0;
    18   dword_4085F8 = 0;
    19   dword_4095FC = 0;
    20   if ( GetDlgItemTextA(hDlg, 1001, szName, 16) )
    21   {
    22     sub_401000();
    23     sub_401040();
    24   }
    25   result = GetDlgItemTextA(hDlg, 1002, &szKey, 256);
    26   if ( result )                                 // 如果获取注册码成功
    27   {
    28     lenth = strlen(&szKey) + 1;
    29     v3 = 0;
    30     lenTemp = lenth - 1;
    31     if ( lenth == 1 )
    32     {
    33 LABEL_21:
    34       j = 1;
    35       while ( byte_406030[j] != 1 )
    36       {
    37         ++j;
    38         if ( j > 9 )
    39           return 1;
    40       }
    41     }
    42     else
    43     {
    44       v4 = dword_4085F8;
    45       while ( 1 )
    46       {
    47         v5 = *(&szKey + v3);
    48         if ( v5 > 57 )
    49           break;
    50         if ( v5 < 48 )
    51           break;
    52         v6 = ((v4 >> v3 % 31) % 0xA + v5 - 48) % 0xA;
    53         if ( v6 == 1 )
    54         {
    55           byte_406031 ^= 1u;
    56         }
    57         else
    58         {
    59           if ( v6 == 2 )
    60           {
    61             byte_406032 ^= 1u;
    62           }
    63           else
    64           {
    65             if ( !v6 || byte_40602F[v6] || byte_40602E[v6] != 1 )
    66               break;
    67             if ( v6 >= 3 )
    68             {
    69               v7 = 1;
    70               if ( v6 - 2 > 1 )
    71               {
    72                 while ( byte_406030[v7] != 1 )
    73                 {
    74                   ++v7;
    75                   if ( v7 >= v6 - 2 )
    76                     goto LABEL_19;
    77                 }
    78                 break;
    79               }
    80             }
    81 LABEL_19:
    82             byte_406030[v6] ^= 1u;
    83           }
    84         }
    85         ++v3;
    86         if ( v3 >= (unsigned int)lenTemp )
    87           goto LABEL_21;
    88       }
    89     }
    90     result = 0;
    91   }
    92   return result;
    93 }

    还有对用户名的处理部分:

     1 void __cdecl sub_401000()
     2 {
     3   int v0; // ebp@1
     4   int i; // ebx@1
     5   int v2; // eax@2
     6 
     7   v0 = (int)szName;
     8   for ( i = 610800471; ; i = ((57807712 * (i + v2) + 324478056) >> 7) | ((57807712 * (i + v2) + 324478056) << 25) )
     9   {
    10     v2 = *(_BYTE *)v0;
    11     if ( !*(_BYTE *)v0 )
    12       break;
    13     ++v0;
    14   }
    15   dword_4085F8 = i;
    16 }

    下面也是:

     1 unsigned int __cdecl sub_401040()
     2 {
     3   unsigned int result; // eax@1
     4   signed int v1; // ecx@1
     5 
     6   result = dword_4085F8;
     7   v1 = 1;
     8   do
     9   {
    10     byte_406030[v1] = (result >> v1) & 1;
    11     ++v1;
    12   }
    13   while ( (unsigned int)v1 < 9 );
    14   byte_406039 = 1;
    15   return result;
    16 }

    ......

    对其中一个函数分析,写为:

     1 int  __cdecl sub_401000(CString szName)
     2 {
     3     int nLen=szName.GetLength();
     4     char *Name=new char [nLen];
     5     Name=szName.GetBuffer(0);
     6 
     7     int m; 
     8     int i; 
     9     int v2; 
    10     
    11     m = (int)Name;
    12     for ( i = 610800471; ; i = ((57807712 * (i + v2) + 324478056) >> 7) | ((57807712 * (i + v2) + 324478056) << 25) )
    13     {
    14         v2 = *(BYTE *)m;
    15         if ( !*(BYTE *)m )
    16             break;
    17         ++m;
    18     }
    19     return i;
    20  }

    ....

  • 相关阅读:
    第三个实验代码
    20165104孟凡斌-第五周作业
    20165104孟凡斌-第四周作业
    20165104孟凡斌-第二次java考试课下作业
    20165104孟凡斌-第三周作业
    20165104孟凡斌-第二次JAVA作业
    20165104孟凡斌-第一次Java考试课下作业
    2018-2019-1 《信息安全系统设计基础》 20165235 实验五 通信协议设计
    2018-2019-1 20165235 实验四 外设驱动程序设计
    20165235 实现pwd功能
  • 原文地址:https://www.cnblogs.com/tk091/p/2475732.html
Copyright © 2020-2023  润新知