* 原信信区: CRACK.JY (黑客练兵场)
* 原发信者: Ken Lewis 6:652/3.2 (Sunday April 25 1999 01:03)
* 原收信者: [All]
* 原信主题: [CRACK!]
=============================================================================
. 今天LYX找到了一个小软件:WinAmp Skin Maker,就是做
WINAMP面板的东西.还顺手装上了S-ICE,说是想学学注册.我
拿来一看,原来这个东西的注册是那么简单.于是把注册的过
程写出来,算是给初学者的入门教材吧.
. 首先,保证机器上已经设置好了S-ICE,然后运行WinAmp
Skin Maker(一下简称WSM).找到注册的地方,填写用户名和注
册码,当然是随便填了.
. 用户名:DELVE 注册码:78787878 (又是这个!)
. 按CTRL-D激活S-ICE,输入
S 30:0 L FFFFFFFF '78787878'
;找刚才输入
的注册码
然后系统就会显示出下面的信息:
Pattern found at 0030:8381F66A (8381F66A) ;找到了
. 再输入
BPM 30:8381F66A
;在这个地方设断点
按CTRL-D切回WSM.
. 按"OK"按钮,S-ICE回截获中断,进入S-ICE的调试状态.
0137:9EEE REPZ MOVSD
0137:9EF2 POP ECX
.. .. .. ..
. 不要管这些,先输入BD *屏蔽刚才的中断,然后按F10一直
走,大概按60多下,出现下面的语句:
0157:00408BB5 LEA EAX,[ESP+08]
0157:00408BB9 PUSH EAX
0157:00408BBA CALL 00409520
<-(1)
0157:00408BBF ADD ESP,04
0157:00408BC2 MOV EDI,EAX
0157:00408BC4 LEA EAX,[ESP+28]
<-(2)
0157:00408BC8 PUSH EAX
0157:00408BC9 CALL 004095A0
<-(3)
0157:00408BCE ADD ESP,04
. 把光标移到(1)处,按下F9设断点,因为这个地方很重要,一会
我们就讲为什么.然后按F10单步执行,当执行完(1)以后,我们看一
下EAX中的值:0058B12C.
. 继续按F10往下走,执行到(2)的地方,我们就可以看见S-ICE提
示我们[ESP+28]里面存储的就是我们输入的注册码:78787878!于是
我们分析下面的(3)的子程序就是对我们输入的注册码进行处理的
地方.所以,走到(3)处,按F8跟进去:
0157:004095A0 PUSH EBX
0157:004095A1 PUSH ESI
.. .. ..
..
0157:004095AA CALL [004102D8]
<-(4)
0157:004095B0 LEA EDI,[EAX-01]
0157:004095B3 MOV ECX,00000001
0157:004095B8 TEST EAX,EAX
. 走到(4)处,按F10,会发现EAX的值变成了0008,这说明(4)的子
程序是检查输入的注册码的位数的.
0157:004095BA JLE 004095D1
0157:004095BC MOVSX EDX,BYTE PTR [EDI+ESI]
0157:004095C0 SUB EDX,30
0157:004095C3 DEC EDI
0157:004095C4 IMUL EDX,ECX
<-(5)
0157:004095C7 ADD EBX,EDX
0157:004095C9 LEA ECX,[ECX*4+ECX]
0157:004095CC ADD ECX,ECX
<-(6)
0157:004095CE DEC EAX
0157:004095CF JNZ 004095BC
0157:004095D1 MOV EAX,EBX
0157:004095D3 POP EDI
. 我们来分析一下(5)-(6)之间的程序做了什么.
EDX=EDX*ECX
EBX=EBX+EDX
ECX=ECX*5
ECX=ECX+ECX
简单写出来就是
EDX=EDX*ECX
EBX=EBX*EDX
ECX=ECX*10
. 也就是说EDX每次乘以10^n后累加到EBX中.而EDX是什么呢?
EDX是从[EDI+ESI]中取出来以后减去30H得到的.我们输入的78等
都是字符,他们的ASCII码是37H,38H,减去30H后正好是7,8!那么
最后EBX中保存的就是78787878的16进制数!后面的语句将EBX的
值保存到EAX作为返回值.
. 然后我们再往下走,出了这个子程序后,会看见下面的语句.
0157:00408C0A CMP EAX,EDI
0157:00408C0C JNZ 00408C42
. 这是比较EAX和EDI.EAX是刚才我们的注册码78787878的16进
制数04B23526H,那么EDI中呢?就是刚才(1)算出来的0058B12CH.
这两个进行比较,肯定EDI就是正确的注册码了.那么它的10进制是
什么呢?算一下.5812524!这个就是正确的注册码了.
. 这次就到这里,下次我们从(1)进去看看正确的注册码是怎么
算出来的,然后根据它写出注册器,记着来看! :)
... (\-----/) 肥牛 / Ken Lewis BP:191-2114152
... (( O O )) http://www.zb169.net/~kenlewis
... (o o) Email
: kenlewis@126.com
- 标 题:转载一篇什么时候?在trw2000 or sice中用"?"来看密码还有code分析! (3千字)
- 作 者:peterchen
- 时 间:2001-3-28 10:56:46
- 链 接:http://bbs.pediy.com