软件大小: 1059 KB
软件语言: 英文
软件类别: 国外软件 /
共享版 / 桌面工具
应用平台: Win9x/NT/2000/XP
界面预览: 无
加入时间:
2003-05-19 08:59:25
下载次数: 49
推荐等级:
破解工具:Pescan3.31,OllyDbg1.09,Wdasm8.93
作者声明:初学破解,仅作学习交流之用,失误之处敬请大侠赐教
软件下载: http://count.skycn.com/softdown.php?id=11962&url=http://on165-http.skycn.net:8080/down/phelper21cn.exe
软件说明:
使用便签可以方便的储存你的临时或者用其他用途的信息,就如同日常使用纸质便签一样方便,便签编辑支持格式,可以设置字体的大小颜色等。实际上等同于一个小的写字板,并且每个便签可以单独的设置时间提醒。具备与天文时钟自动或者手动同步的功能,可以让你的系统时钟每时每刻都是最精准的。还可以替换Windows任务栏时钟显示,可以改变颜色,显示内容等,使得Windwos时钟的显示完全可以定制化。试用版开放全部功能,但是只能使用30天。30天到期后请购买注册,或者将本程序卸载。
用Pescan检查,aspack2.12的壳,脱壳,419K-->1232K,反汇编,查找字串,很快就找到关键点,用OD载入!任意填入用户名ShenGe和注册码12345678。
004D9460 PUSH DWORD PTR FS:[EAX]
004D9463 MOV
DWORD PTR FS:[EAX], ESP
004D9466 LEA EDX,
[LOCAL.1]
004D9469 MOV EAX, DWORD PTR
DS:[EBX+308]
004D946F CALL 1.0044765C
<---取假码
004D9474
MOV EAX, [LOCAL.1]
<---EAX="12345678"
004D9477 PUSH
EAX
004D9478 LEA EDX, [LOCAL.2]
004D947B
MOV EAX, DWORD PTR DS:[EBX+304]
004D9481 CALL
1.0044765C
<---取用户名
004D9486 MOV EDX,
[LOCAL.2]
<---EDX="ShenGe"
004D9489 MOV EAX, DWORD PTR
DS:[4E036C]
004D948E MOV EAX, DWORD PTR DS:[EAX]
004D9490 MOV ECX, 1.004D95A8
004D9495 CALL
1.004B4884
<---关键的Call,跟进!
004D949A TEST AL, AL
004D949C
JNZ SHORT 1.004D94A8
<---关键跳转
004D949E MOV EAX,
1.004D95B8
004D94A3 CALL 1.00440850
<---注册失败
004D94A8 MOV
EAX, DWORD PTR DS:[4E036C]
004D94AD MOV EAX, DWORD
PTR DS:[EAX]
004D94AF MOV EDX, DWORD PTR
DS:[EAX+5C]
004D94B2 MOV EAX, DWORD PTR
DS:[EBX+308]
004D94B8 CALL 1.0044768C
004D94BD
MOV EAX, DWORD PTR DS:[4E036C]
004D94C2 MOV
EAX, DWORD PTR DS:[EAX]
004D94C4 MOV
EDX, DWORD PTR DS:[EAX+48]
004D94C7 MOV EAX, DWORD
PTR DS:[EBX+304]
004D94CD CALL 1.0044768C
004D94D2
MOV EAX, DWORD PTR DS:[4E036C]
004D94D7 MOV
EAX, DWORD PTR DS:[EAX]
004D94D9 CALL
1.004B4538
004D94DE LEA EDX, [LOCAL.3]
004D94E1
CALL 1.00408EBC
004D94E6 MOV EDX,
[LOCAL.3]
004D94E9 MOV EAX, DWORD PTR
DS:[EBX+300]
004D94EF CALL 1.0044768C
004D94F4
MOV EAX, DWORD PTR DS:[4E036C]
004D94F9 MOV
EAX, DWORD PTR DS:[EAX]
004D94FB CALL
1.004B4578
004D9500 TEST AL, AL
004D9502
JE SHORT 1.004D9522
004D9504 MOV
EDX, 1.004D95CC
004D9509 MOV EAX, EBX
004D950B
CALL 1.0044768C
<---注册成功!
004D9510 MOV EDX, 1.004D95E0
跟进那个关键的Call,可看到如下代码:
004B4884 PUSH
EBP
004B4885 MOV EBP, ESP
004B4887 ADD
ESP, -10
004B488A PUSH EBX
004B488B
XOR EBX, EBX
004B488D MOV [LOCAL.4],
EBX
004B4890 MOV [LOCAL.3], EBX
004B4893 MOV
[LOCAL.2], ECX
004B4896 MOV [LOCAL.1], EDX
004B4899 MOV
EBX, EAX
004B489B MOV EAX,
[LOCAL.1]
004B489E CALL 1.00404B0C
004B48A3 MOV
EAX, [LOCAL.2]
004B48A6 CALL
1.00404B0C
004B48AB MOV EAX, [ARG.1]
004B48AE
CALL 1.00404B0C
004B48B3 XOR EAX,
EAX
004B48B5 PUSH EBP
004B48B6 PUSH
1.004B496E
004B48BB PUSH DWORD PTR
FS:[EAX]
004B48BE MOV DWORD PTR FS:[EAX], ESP
004B48C1
MOV EAX, [LOCAL.1]
<---EAX="ShenGe"
004B48C4 CALL
1.00404924
<---取用户名长度
004B48C9 CMP EAX, DWORD PTR
DS:[EBX+4C]
<---用户名长度不能大于25
004B48CC JG SHORT
1.004B48E7
004B48CE MOV EAX, [LOCAL.1]
004B48D1
CALL 1.00404924
004B48D6 CMP EAX,
DWORD PTR DS:[EBX+50]
<---用户名长度不能小于3
004B48D9 JL SHORT
1.004B48E7
004B48DB MOV EAX, [ARG.1]
<---EAX="12345678"
004B48DE CALL
1.00404924
004B48E3 TEST EAX, EAX
<---判断是否输入了注册码
004B48E5
JNZ SHORT 1.004B48EB
004B48E7 XOR
EBX, EBX
004B48E9 JMP SHORT 1.004B494B
004B48EB
LEA EDX, [LOCAL.3]
004B48EE MOV EAX,
[ARG.1]
004B48F1 CALL 1.00408A1C
004B48F6 MOV
EDX, [LOCAL.3]
004B48F9 LEA EAX,
[ARG.1]
004B48FC CALL 1.00404704
004B4901 LEA
ECX, [LOCAL.4]
004B4904 MOV EDX,
[LOCAL.1]
<---EDX="ShenGe"
004B4907 MOV EAX,
EBX
004B4909 CALL 1.004B4580
<---计算注册码的Call,跟进去看看!
004B490E
MOV EAX, [LOCAL.4]
<---EAX="000079CBD764",真码
004B4911 MOV
EDX, [ARG.1]
<---EDX="12345678",假码
004B4914 CALL
1.00408A94
<---注册码比较
004B4919 TEST EAX, EAX
004B491B
JE SHORT 1.004B4921
004B491D XOR
EBX, EBX
004B491F JMP SHORT 1.004B494B
004B4921
LEA EAX, DWORD PTR DS:[EBX+48]
004B4924 MOV
EDX, [LOCAL.1]
004B4927 CALL 1.004046C0
004B492C
LEA EAX, DWORD PTR DS:[EBX+54]
004B492F MOV
EDX, [LOCAL.2]
004B4932 CALL 1.004046C0
004B4937
LEA EAX, DWORD PTR DS:[EBX+5C]
004B493A MOV
EDX, [ARG.1]
004B493D CALL 1.004046C0
004B4942
MOV EAX, EBX
004B4944 CALL
1.004B4AFC
004B4949 MOV BL, 1
004B494B XOR
EAX, EAX
<---EAX=0,注册码不对跳到这
004B494D POP EDX
004B494E POP ECX
004B494F POP ECX
004B4950
MOV DWORD PTR FS:[EAX], EDX
004B4953 PUSH
1.004B4975
004B4958 LEA EAX, [LOCAL.4]
004B495B
MOV EDX, 4
004B4960 CALL
1.00404690
004B4965 LEA EAX, [ARG.1]
004B4968
CALL 1.0040466C
004B496D
RETN
我们再跟进计算注册码的那个Call:
004B45A8 PUSH DWORD PTR
FS:[EAX]
004B45AB MOV DWORD PTR FS:[EAX],
ESP
-------------------------------------------
004B45AE MOV
EAX, [LOCAL.1]
004B45B1 CALL 1.00404924
004B45B6
CMP EAX, DWORD PTR DS:[ESI+4C]
004B45B9 JG
SHORT 1.004B45C8
004B45BB MOV EAX,
[LOCAL.1]
004B45BE CALL 1.00404924
004B45C3 CMP
EAX, DWORD PTR DS:[ESI+50]
004B45C6 JGE
SHORT
1.004B45D4
-------------------------------------------
此段见前面注释,判断用户长是否大于3且小于25
004B45C8
MOV EAX, EDI
004B45CA CALL
1.0040466C
004B45CF JMP 1.004B4673
004B45D4
MOV EAX, [LOCAL.1]
<---EAX="ShenGe"
004B45D7 CALL
1.00404924
<---取用户名长度
004B45DC MOV EBX, EAX
<---EBX=6
004B45DE
JMP SHORT
1.004B4611
---------------------------------------------
004B45E0
/MOV EAX, [LOCAL.1]
|
<---EAX="ShenGe"
004B45E3 |MOV
AL, BYTE PTR DS:[EAX+EBX-1]
|
<---按位取用户名的每个字符参与后面的运算,从后往前取
004B45E7 |AND
EAX, 0FF
|
<---保留低2位,EAX=65<-----e
|
47<-----G
|
6E<-----n
|
65<-----e
|
68<-----h
|
53<-----S
004B45EC |XOR EDX, EDX
004B45EE |PUSH EDX
004B45EF
|PUSH EAX
004B45F0 |MOV EAX, DWORD PTR
DS:[ESI+68]
|
<---EAX=3A2015E0,为机器码的Hex形式
004B45F3 |MOV EDX,
DWORD PTR DS:[ESI+6C]
004B45F6 |CALL 1.00405744
|
<---此Call将机器码除字符值,返回值为余数值,在EAX中
|
3A2015E0 mod 65=14
| 3A2015E0 mod
47=2B
|
3A2015E0 mod 6E=28
|
3A2015E0 mod 65=14
| 3A2015E0 mod 68=8
| 3A2015E0
mod 53=4
004B45FB |PUSH EDX
004B45FC |PUSH EAX
004B45FD
|LEA EAX, [LOCAL.7]
004B4600 |CALL 1.00408EEC
|
<---将前面的余数值格式化成10进制值
004B4605 |MOV EDX,
[LOCAL.7]
|
<---EDX=20 <-----14
|
43 <-----2B
|
40 <-----28
|
20 <-----14
|
8 <-----8
|
4 <-----4
004B4608
|LEA EAX, [LOCAL.3]
004B460B |CALL
1.0040492C
|
<---此Call将上面格式化后的值连接起来
004B4610 |DEC
EBX
004B4611 |MOV EAX, [LOCAL.1]
| <---上面跳到这,EAX="ShenGe"
004B4614
|CALL 1.00404924
|
<---取用户名长度到EAX中
004B4619 |SUB
EAX, 6
|
<---EAX=EAX-6,由此可看出,如果用户名
|
长度大于6,只对后7个字符进行运算
004B461C |CMP
EBX, EAX
004B461E |JL SHORT
1.004B4624
004B4620 |TEST EBX, EBX
| <---比较是否取完用户名
004B4622 \JG
SHORT
1.004B45E0
---------------------------------------
004B4624 LEA
EDX, [LOCAL.2]
004B4627 MOV EAX,
[LOCAL.3]
<---EAX=2043402084,为连接后的值
004B462A CALL
1.00405850
<---Dec转换成Hex
004B462F MOV [LOCAL.6],
EAX
<---低位部分,EAX=79CBD764
004B4632 MOV [LOCAL.5],
EDX
<---高位部分,EDX=00000000
004B4635 MOV EBX, DWORD
PTR DS:[ESI+60]
<---ESI=C,注册码为12位
004B4638 TEST EBX,
EBX
004B463A JG SHORT 1.004B464D
004B463C
PUSH [LOCAL.5]
004B463F PUSH [LOCAL.6]
004B4642 MOV
EDX, EDI
004B4644
XOR EAX, EAX
004B4646 CALL 1.00408F5C
004B464B JMP SHORT 1.004B4673
004B464D
PUSH [LOCAL.5]
<---第1部分,79CB764
004B4650 PUSH [LOCAL.6]
<---第2部分,00000000
004B4653 MOV EDX, EDI
004B4655 MOV EAX, EBX
<---EAX=C
004B4657 CALL
1.00408F5C
<---将高低位部分连接起来,取后12位
004B465C MOV
EAX, DWORD PTR DS:[EDI]
<---EAX=000079CBD764,正确注册码
004B465E CALL
1.00404924
004B4663 MOV ECX, EAX
004B4665
SUB ECX, DWORD PTR DS:[ESI+60]
004B4668 MOV
EDX, DWORD PTR DS:[ESI+60]
004B466B INC
EDX
004B466C MOV EAX, EDI
004B466E CALL
1.00404BBC
004B4673 XOR EAX, EAX
004B4675
POP EDX
004B4676 POP ECX
004B4677
POP ECX
004B4678 MOV DWORD PTR
FS:[EAX], EDX
004B467B PUSH 1.004B46A0
004B4680
LEA EAX, [LOCAL.7]
004B4683 CALL
1.0040466C
004B4688 LEA EAX, [LOCAL.3]
004B468B
CALL 1.0040466C
004B4690 LEA EAX,
[LOCAL.1]
004B4693 CALL 1.0040466C
004B4698 RETN
破解这个软件并不难,只是写出完整的算法费了我一点时间,特别是对于16进制转换部分,我跟了几次,对于大数的16进制转换不知上面的描述对不对!欢迎高手指正!
我得到的注册码为:用户名:ShenGe 注册码:000079CBD764
或用户名:Flyhorse 注册码:126CD348178C
Crack By ShenGe