hczcyy 发表于 2006-5-22 18:56:24

虽不是小组成员,斗胆发个PYG 5.4 Cracker 小组 课外练习10的注册过程.

【文章标题】: PYG 5.4 Cracker 小组 课外练习10 PJ
【文章作者】: hczcyy
【作者邮箱】: [email protected]
【作者QQ号】: 55346577
【软件名称】: PYG 5.4 Cracker 小组 课外练习10
【下载地址】: 上面
【加壳方式】: 无
【保护方式】: 机器码+序列号
【使用工具】: peid,od
【操作平台】: winxp+sp2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1.下载,运行随便输入87654321,提示输入的注册码不对.
2.用peid查壳,无壳显示ms c++7.0
3.用od载入.查找"输入的注册码不对",双击,来到这里:

004010F8    6A 68         push 68
004010FA    FF75 08         push dword ptr ss:
004010FD    E8 CC000000   call <jmp.&USER32.GetDlgItemTextA>      //取得假码"87654321"
00401102    803D 6C304000 0>cmp byte ptr ds:,0            //比较第一个字符是否为"o",也就是比较是否输入
00401109    74 69         je short Crackme1.00401174            //为空,为空则完
0040110B    68 18304000   push Crackme1.00403018               ; 输入的序列号不正确!
00401110    68 6C304000   push Crackme1.0040306C               ; e:\
00401115    E8 F0000000   call <jmp.&KERNEL32.lstrcmpA>          //这个call是对假码进行比较,看是否为数字,不是数字则完
0040111A    85C0            test eax,eax
0040111C    74 56         je short Crackme1.00401174
0040111E    B8 01000000   mov eax,1                               // eax=1
00401123    0FA2            cpuid                                 //获取cpuid ==eax=6b4(我的机器是这个,不同的应该不同)
00401125    8B0D 58304000   mov ecx,dword ptr ds:         //序列号入栈 "ec83e421"
0040112B    33D2            xor edx,edx                           //清零 edx
0040112D    F7E1            mul ecx                                 //eax=eca×eax
0040112F    03C2            add eax,edx                           //eax=edx+eax (干脆edx清零了,这里怎么成了631?请高手指教)
00401131    50            push eax                              //结果入栈 "64153365".
00401132    68 3E304000   push Crackme1.0040303E               ; %1x    //把刚才计算出来的结果转换为字符串
00401137    68 5C304000   push Crackme1.0040305C               ; ec83e421 //
0040113C    E8 7B000000   call <jmp.&USER32.wsprintfA>
00401141    83C4 0C         add esp,0C
00401144    68 6C304000   push Crackme1.0040306C               ; e:\       //假码
00401149    68 5C304000   push Crackme1.0040305C               ; ec83e421//真码 ==>>这里下内存注册机
0040114E    E8 B7000000   call <jmp.&KERNEL32.lstrcmpA>                  //比较函数
00401153    85C0            test eax,eax
00401155    75 1D         jnz short Crackme1.00401174                     //关键跳转. 75==>>74 爆破
00401157    6A 10         push 10
00401159    E8 7C000000   call <jmp.&USER32.MessageBeep>
0040115E    6A 00         push 0
00401160    68 00304000   push Crackme1.00403000               ; 注册成功
00401165    68 09304000   push Crackme1.00403009               ; 谢谢你的注册!
0040116A    FF75 08         push dword ptr ss:
0040116D    E8 6E000000   call <jmp.&USER32.MessageBoxA>
00401172    EB 0F         jmp short Crackme1.00401183
00401174    68 18304000   push Crackme1.00403018               ; 输入的序列号不正确!
00401179    6A 68         push 68
0040117B    FF75 08         push dword ptr ss:
0040117E    E8 69000000   call <jmp.&USER32.SetDlgItemTextA>


--------------------------------------------------------------------------------
【经验总结】
序列号:ec83e421
注册码:64153365

算法注册机我不会,因为用到了cpuid,估计这个用到了汇编编程.
第一次发文,请大家多多指教.

--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年05月22日 18:55:01

野猫III 发表于 2006-5-22 19:59:35

原帖由 hczcyy 于 2006-5-22 18:56 发表
【文章标题】: PYG 5.4 Cracker 小组 课外练习10 PJ
【文章作者】: hczcyy
【作者邮箱】: [email protected]
【作者QQ号】: 55346577
【软件名称】: PYG 5.4 Cracker 小组 课外练习10
【下载地址】: 上面
【加 ...

牛人呀。。。我们小组随时欢迎兄弟来指导!呵呵。。。 :handshake :victory:

hczcyy 发表于 2006-5-22 20:01:38

原帖由 野猫III 于 2006-5-22 19:59 发表


牛人呀。。。我们小组随时欢迎兄弟来指导!呵呵。。。 :handshake :victory:

谢谢对我的鼓励.
我在TM上申请加入企业群了.

lhl8730 发表于 2006-5-22 22:29:41

00401123    0FA2            cpuid                                 //获取cpuid ==eax=6b4(我的机器是这个,不同的应该不同)
00401125    8B0D 58304000   mov ecx,dword ptr ds:         //序列号入栈 ""
0040112B    33D2            xor edx,edx                           //清零 edx
0040112D    F7E1            mul ecx                                 //eax=eca×eax
0040112F    03C2            add eax,edx                           //eax=edx+eax (干脆edx清零了,这里怎么成了631?请高手指教)
00401131    50            push eax                              //结果入栈 "64153365".
因为ec83e421乖6b4=63164152d34即631    64152d34,如果不明白,这样理解因为EAX载不下了,所以放到EDX里面了。

fantasy 发表于 2006-5-22 23:47:18

楼上 的分析的对的啊
eax寄存器最大8位
而63164152D34是11位
所以前3位放到edx中可以认为是进位

Nisy 发表于 2006-5-23 06:59:57

呵呵 过来学习一下~

hczcyy 发表于 2006-5-23 16:57:07

原帖由 lhl8730 于 2006-5-22 22:29 发表
00401123    0FA2            cpuid                                 //获取cpuid ==eax=6b4(我的机器是这个,不同的应该不同)
00401125    8B0D 58304000   mov ecx,dword ptr ds:         //序列号入栈...


谢谢指导,我明白了

hanxiucao 发表于 2006-6-8 20:04:08

看来多看看算法过程还是有好处的,谢谢!

一帆风 发表于 2006-6-12 12:46:16

原帖由 fantasy 于 2006-5-22 23:47 发表
楼上 的分析的对的啊
eax寄存器最大8位
而63164152D34是11位
所以前3位放到edx中可以认为是进位

原来如此!
页: [1]
查看完整版本: 虽不是小组成员,斗胆发个PYG 5.4 Cracker 小组 课外练习10的注册过程.