虽不是小组成员,斗胆发个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 原帖由 hczcyy 于 2006-5-22 18:56 发表
【文章标题】: PYG 5.4 Cracker 小组 课外练习10 PJ
【文章作者】: hczcyy
【作者邮箱】: [email protected]
【作者QQ号】: 55346577
【软件名称】: PYG 5.4 Cracker 小组 课外练习10
【下载地址】: 上面
【加 ...
牛人呀。。。我们小组随时欢迎兄弟来指导!呵呵。。。 :handshake :victory: 原帖由 野猫III 于 2006-5-22 19:59 发表
牛人呀。。。我们小组随时欢迎兄弟来指导!呵呵。。。 :handshake :victory:
谢谢对我的鼓励.
我在TM上申请加入企业群了. 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里面了。 楼上 的分析的对的啊
eax寄存器最大8位
而63164152D34是11位
所以前3位放到edx中可以认为是进位 呵呵 过来学习一下~ 原帖由 lhl8730 于 2006-5-22 22:29 发表
00401123 0FA2 cpuid //获取cpuid ==eax=6b4(我的机器是这个,不同的应该不同)
00401125 8B0D 58304000 mov ecx,dword ptr ds: //序列号入栈...
谢谢指导,我明白了 看来多看看算法过程还是有好处的,谢谢! 原帖由 fantasy 于 2006-5-22 23:47 发表
楼上 的分析的对的啊
eax寄存器最大8位
而63164152D34是11位
所以前3位放到edx中可以认为是进位
原来如此!
页:
[1]