首页
社区
课程
招聘
加密与解密第三版错误(忘改正)
发表于: 2016-12-5 08:01 4347

加密与解密第三版错误(忘改正)

2016-12-5 08:01
4347
前段时间买了本加密与解密第三版的书在学,学到第五章的时候,无意发现书上的代码和光盘中的注册机有个错误,就指出来吧,望第四版做的更好,谢谢看雪~~

回到主题:
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作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 184
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
调到4013AC报错,应该是“跳到”吧 ,不过白璧微瑕 ,呵呵
2016-12-5 14:44
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哈哈哈~~是的
2016-12-6 06:52
0
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
第四版, 估计明年上半年可以出来。
2016-12-10 16:15
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
kanxue版主回复我了,激动~~~我要加油了,要出精品一点的教程了
2016-12-12 07:08
0
游客
登录 | 注册 方可回帖
返回
//