这是一个非常有意思的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