前段时间买了本加密与解密第三版的书在学,学到第五章的时候,无意发现书上的代码和光盘中的注册机有个错误,就指出来吧,望第四版做的更好,谢谢看雪~~
回到主题:
1.将serial.exe拉入OD分析,下个GetDlgItemTextA断点,输入用户名,密码,到这时候会在系统领域断下来,单步走吧,会走到下面代码出:
00401223 . 83F8 00 cmp eax,0x0
00401226 .^ 74 BE je short serial.004011E6
00401228 . 68 8E214000 push serial.0040218E ; ASCII "VICTOR"
0040122D . E8 4C010000 call serial.0040137E ; F1函数(转换用户名)
40122D这个函数在push用户名的下面,应该就是加密用户名的函数吧,跟进去看看就知道了!
0040137E /$ 8B7424 04 mov esi,dword ptr ss:[esp+0x4] ; 用户名地址
00401382 |. 56 push esi ; serial.WndProc
00401383 |> 8A06 /mov al,byte ptr ds:[esi]
00401385 |. 84C0 |test al,al
00401387 |. 74 13 |je short serial.0040139C ; 判断是字符串否已经结束
00401389 |. 3C 41 |cmp al,0x41
0040138B |. 72 1F |jb short serial.004013AC ; 低于字符'A'调到4013AC报错
0040138D |. 3C 5A |cmp al,0x5A
0040138F |. 73 03 |jnb short serial.00401394 ; 大于等于 大写字符'Z'则跳
00401391 |. 46 |inc esi ; serial.WndProc
00401392 |.^ EB EF |jmp short serial.00401383
00401394 |> E8 39000000 |call serial.004013D2 ; F1(用户名)进入此函数,将大于等于'Z'的符号全部-0X20,转换为大写!!
00401399 |. 46 |inc esi ; serial.WndProc
0040139A |.^ EB E7 \jmp short serial.00401383
0040139C |> 5E pop esi ; serial.WndProc
0040139D |. E8 20000000 call serial.004013C2 ; F2(用户名)
004013A2 |. 81F7 78560000 xor edi,0x5678 ; 将所得数的结果与0X5678 XOR一下
004013A8 |. 8BC7 mov eax,edi
004013AA |. EB 15 jmp short serial.004013C1
004013AC |> 5E pop esi ; serial.WndProc
004013AD |. 6A 30 push 0x30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
004013AF |. 68 60214000 push serial.00402160 ; |Error!
004013B4 |. 68 69214000 push serial.00402169 ; |Incorrect!,Try Again
004013B9 |. FF75 08 push [arg.1] ; |hOwner = 000303A0 ('CrackMe v1.0',class='No need to disasm the code!')
004013BC |. E8 79000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
004013C1 \> C3 retn
因为这是我第一次自己独立的逆向,注释我都写的很详细了。。高手忽略吧,主要目的是想点出书中的一个错误~~~嘻嘻,我应该是处女座吧?
这段代码中的下面两句指令如下:
0040138D |. 3C 5A |cmp al,0x5A
0040138F |. 73 03 |jnb short serial.00401394 ; 大于等于 大写字符'Z'则跳
这句话翻译过来就是:
if( 字符 >= 0X5A)
jmp 00401394调到这个call这里,简单分析以下,这个call是将字符的ASCII减去0X20
但是加密与解密三这本书和光盘中的代码是
k1 += (ch > 'Z') ? (ch - 32) : ch;
只是大于号!!当输入的用户名中有大写字母Z的时候,注册机肯定是会出现错误的注册码的!~~~
有疑问的留言回复吧~~~~
[课程]FART 脱壳王!加量不加价!FART作者讲授!