CrackMe#40:Static

这是一个非常有意思的CrackMe!

首先查壳 又是UPX 直接手脱 脱壳毫无技术含量不值一提.

然后载入OD直接找到算法部分~

发现这个CM比较特别 其中的两个静态变量作为标志更是亮点中的亮点~

这意味着要输入两次Key验证,第一次使得第一个STATIC a==1,b==1;

第二次使得STAIC b++;

要当a==1,b==2的时候才算CONS~

在验证过程会发现算法只取前8位注册码 不够8位用0x20补全~

而且这个算法也是这个CM的非常漂亮的地方之一,特别是第一轮的~:

第一轮:

/*************************************************/

004568FC  /$  55            push    ebp
004568FD  |.  31C9          xor     ecx, ecx
004568FF  |.  8D30          lea     esi, dword ptr [eax]
00456901  |.  83C6 04       add     esi, 4
00456904  |.  BB 998F3337   mov     ebx, 37338F99
00456909  |.  AD            lods    dword ptr [esi]                  ;  后四位
0045690A  |.  31C3          xor     ebx, eax
0045690C  |.  C1C3 30       rol     ebx, 30
0045690F  |.  81F3 00009999 xor     ebx, 99990000
00456915  |.  C1CB 50       ror     ebx, 50
00456918  |.  83EE 08       sub     esi, 8
0045691B  |.  AD            lods    dword ptr [esi]                  ;  前四位
0045691C  |.  01C3          add     ebx, eax
0045691E  |.  81F3 99999999 xor     ebx, 99999999
00456924  |.  C1C3 70       rol     ebx, 70
00456927  |.  81FB 75533D53 cmp     ebx, 533D5375
0045692D      75 1C         jnz     short 0045694B
0045692F  |.  41            inc     ecx/*标志*/
00456930  |.  83EE 04       sub     esi, 4
00456933  |.  AD            lods    dword ptr [esi]                  ;  前四位
00456934  |.  89C3          mov     ebx, eax
00456936  |.  AD            lods    dword ptr [esi]                  ;  后四位
00456937  |.  C1CB 80       ror     ebx, 80
0045693A  |.  81F3 99990000 xor     ebx, 9999
00456940  |.  31C3          xor     ebx, eax
00456942  |.  81FB 998F3337 cmp     ebx, 37338F99
00456948      75 01         jnz     short 0045694B
0045694A  |.  41            inc     ecx/*标志*/
0045694B  |>  5D            pop     ebp
0045694C  \.  C3            retn
/******************************************************/
分析算法之前我们设两个变量:
L4==后四位注册码
F4==前四位注册码
把上面第一轮的算法翻译成数学公式就是:
(I)
(((((L4 xor 0x37338F99)rol 0x10)xor 0x99990000)rol 0x10+F4)xor 0x99999999)rol 0x10 ==0x533D5375
(II)
(F4 xor 0x00009999) xor L4==0x37338F99
由上面的(I)(II)可得:
(III)
L4==0x37338F99 xor (F4 xor 0x00009999)
再由(I)(III)可得:
(IIII)
(((((F4 xor 0x00009999)rol 0x10)xor 0x99990000)rol 0x10+F4) xor 0x99999999)rol 0x10==0x533D5375
由(IIII)可以看出 F4在第一轮中高低位互相不影响~也就是说 在这里L4 高低位是独立的~
然后我们由(IIII)推出L4  F4的计算公式:
F4=((0x533D5375 rol 0x10)xor 0x99999999)/2
L4=(F4 xor 0x9999)xor 0x37338F99
然后 第一个注册码就是:F4+L4 ==ReveRsER
第二轮的算法相对于第一轮来说没啥好说的~
/******************************************************/

一组Key:

FirstTime:ReveRsER

SecondTime:CraCkiNG

DownMe:KeyGen

发表评论

邮箱地址不会被公开。 必填项已用*标注