简单算法——学友计算机等级考试试题汇编2002A+
下载页面:
http://www.skycn.com/soft/8393.html
软件大小:
769 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 考试系统
应用平台: Win9x/NT/2000/XP
加入时间:
2002-11-05 15:25:55
下载次数: 11521
推荐等级: ***
【软件简介】:这是一个全国计算机等级考试辅助学习软件,本套软件对用户的计算机配置要求极低,能正常运行Win98的电脑均可流畅的运行它,且支持最新的Windows XP操作系统。本套软件适用于个人自学、学校或电脑培训部教学时使用,当前的2002A+版本已经包含了 一级Windows考试从 1999年至2002年上半年 的考试试题,二级考试中的 C语言 和 FOXBASE 这两门程序设计语言从 1994年至2002年上半年 的考试试题,题库中的试题数量达到1870多题,均为百分之百的考试试卷原题。本软件的主要功能:用户可根据自己的需要选择每种程序设计语言在某年的4月份或9月份的考试试卷,并可在答卷过程中随时打开[试卷评分面板],系统将自动对当前试卷进行评分,并显示出每道试题的对错情况和用户所选择的答案以及标准答案,此时用户仍可继续答题,对做错的试题还可加以改正,以利于加深用户对做错的试题的印象,此[试卷评分面板]可被随时关闭。用户可随意修改试题显示区域的背景色或前景色。用户在查看试卷评分后如想退出答卷环境则可使用交卷功能。交卷后即可再选做其它试卷。
【软件限制】:功能限制
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000娃娃修改版、FI2.5、AspackDie、W32Dasm8.93黄金版
—————————————————————————————
【过
程】:
Windjks.exe为ASPACK
2.12壳。用AspackDie脱之。反汇编。
TRW2000装入目标程序。
填入试炼码(即:假码,试炼码是我的习惯称呼):13572468
注意:至少要8位!!!
CTR+N切入TRW,下万能断点:BPX HMEMCPY,F5返回,点注册,立即拦下。
BD,暂停断点。
下PMODULE指令,返回程序领空,按F12七次,DELPHI编的东西许多都是按F12七次到达核心。
—————————————————————————————
F10走,多看看,多留意。
请看:
:004BB1BA
E8A999F4FF call 00404B68
:004BB1BF
83F808 cmp eax,
00000008
====>比较试炼码位数是否不小于8位?
:004BB1C2
7D2C jge
004BB1F0
====>不跳则OVER!
:004BB1C4
8D45FC lea eax,
dword ptr [ebp-04]
:004BB1C7 BA0A000000
mov edx, 0000000A
:004BB1CC E81B9DF4FF
call 00404EEC
:004BB1D1 BB01000000
mov ebx, 00000001
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BB1E9(C)
|
:004BB1D6
8D45FC lea eax,
dword ptr [ebp-04]
:004BB1D9 E8DA9BF4FF
call 00404DB8
:004BB1DE 6BD30D
imul edx, ebx, 0000000D
:004BB1E1 885418FF
mov byte ptr [eax+ebx-01], dl
:004BB1E5
43 inc
ebx
:004BB1E6 83FB0B
cmp ebx, 0000000B
:004BB1E9 75EB
jne 004BB1D6
:004BB1EB E9A7000000
jmp 004BB297
跳到这:
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BB1C2(C)
|
:004BB1F0
8D55E4 lea edx,
dword ptr [ebp-1C]
:004BB1F3 8B862C030000
mov eax, dword ptr [esi+0000032C]
:004BB1F9 E84A55F8FF
call 00440748
:004BB1FE 8B45E4
mov eax, dword ptr [ebp-1C]
:004BB201
8D55E8 lea edx,
dword ptr [ebp-18]
:004BB204 E81BDDF4FF
call 00408F24
:004BB209 8B45E8
mov eax, dword ptr [ebp-18]
:004BB20C 8D55EC
lea edx, dword ptr [ebp-14]
:004BB20F
E8DCDCF4FF call 00408EF0
:004BB214
8B45EC mov eax,
dword ptr [ebp-14]
:004BB217 50
push eax
:004BB218 8D55E0
lea edx, dword ptr [ebp-20]
:004BB21B 8BC6
mov eax,
esi
:004BB21D E836FBFFFF call
004BAD58
====>算法CALL!
:004BB222
8B55E0 mov edx,
dword ptr [ebp-20]
:004BB225 58
pop eax
:004BB226
E8819AF4FF call 00404CAC
====>比较注册码!
:004BB22B
7543 jne
004BB270
:004BB22D 8BC6
mov eax, esi
:004BB22F E848FEFFFF
call 004BB07C
:004BB234 8D45FC
lea eax, dword ptr [ebp-04]
:004BB237 BA0A000000
mov edx, 0000000A
:004BB23C
E8AB9CF4FF call 00404EEC
:004BB241
BB01000000 mov ebx, 00000001
—————————————————————————————
F8进入算法CALL:004BB21D
call 004BAD58
即比较注册码的上一个CALL
*
Referenced by a CALL at Address:
|:004BB21D
|
:004BAD58 55
push ebp
:004BAD59 8BEC
mov ebp, esp
:004BAD5B B906000000
mov ecx, 00000006
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BAD65(C)
|
:004BAD60
6A00 push
00000000
:004BAD62 6A00
push 00000000
:004BAD64 49
dec ecx
:004BAD65 75F9
jne 004BAD60
:004BAD67
51 push
ecx
:004BAD68 53
push ebx
:004BAD69 56
push esi
:004BAD6A 8BF2
mov esi, edx
:004BAD6C 8BD8
mov ebx,
eax
:004BAD6E 33C0
xor eax, eax
:004BAD70 55
push ebp
:004BAD71 68D3AE4B00
push 004BAED3
:004BAD76 64FF30
push dword ptr fs:[eax]
:004BAD79
648920 mov dword
ptr fs:[eax], esp
:004BAD7C 8D55F8
lea edx, dword ptr [ebp-08]
:004BAD7F 8BC3
mov eax, ebx
:004BAD81
E80AFDFFFF call 004BAA90
:004BAD86
8D45FC lea eax,
dword ptr [ebp-04]
*
Possible StringData Ref from Code Obj ->"8888"
====>注意此数!
|
:004BAD89
BAE8AE4B00 mov edx, 004BAEE8
====>8888移入EDX
:004BAD8E
E8B59BF4FF call 00404948
:004BAD93
8D45FC lea eax,
dword ptr [ebp-04]
:004BAD96
E81DA0F4FF call 00404DB8
====>此CALL取得你的BIOS的日期,
我的机子是“老古董”了,BIOS日期是020598,即98年5月2日的
:004BAD9B
8B55F8 mov edx,
dword ptr [ebp-08]
====>EDX=020598
:004BAD9E
8A5201 mov dl, byte
ptr [edx+01]
====>EDX的第二位移入DL ?DL=32(即2)
:004BADA1
8810 mov
byte ptr [eax], dl
====>把DL移入[EAX],即2移入[EAX]
:004BADA3
8D45FC lea eax,
dword ptr [ebp-04]
====>D EAX=2888,装入[EBP-04]
即8888的第一位“让位”给2了
:004BADA6
E80DA0F4FF call 00404DB8
:004BADAB
8B55F8 mov edx,
dword ptr [ebp-08]
====>[EBP-08]里放的BIOS日期,
即把 020598又移入EDX
:004BADAE
8A5203 mov dl, byte
ptr [edx+03]
====>把EDX的第四位移入DL,DL=5
:004BADB1
885001 mov byte
ptr [eax+01], dl
====>把5移入[EAX+01]
:004BADB4
8D45F4 lea eax,
dword ptr [ebp-0C]
====>D EAX=2588,装入[EBP-0C]
即2888的第二位又“让”给5了
:004BADB7
8B55FC mov edx,
dword ptr [ebp-04]
====>此时[EBP-4]=2588
:004BADBA
8A5201 mov dl, byte
ptr [edx+01]
====>把2588的第二位“5”移入DL,DL=35
:004BADBD
E8CE9CF4FF call 00404A90
:004BADC2
8B45F4 mov eax,
dword ptr [ebp-0C]
:004BADC5 E8BEE4F4FF
call 00409288
:004BADCA 8BD8
mov ebx, eax
====>EAX=5,即上面DL=35的HEX值对应的字符
把5移入EBX
:004BADCC
83C348 add ebx,
00000048
====>EBX=5+48=4D,16进制相加。
:004BADCF 8D45FC
lea eax, dword ptr [ebp-04]
:004BADD2 E8E19FF4FF
call 00404DB8
====>4D对应的字符为M
:004BADD7 885802
mov byte ptr [eax+02],
bl
====>把BL中的M移入[EAX+2]
:004BADDA
8D45F0 lea eax,
dword ptr [ebp-10]
====>EAX=25M8
====>即2588的第三位8变为M了
:004BADDD
8B55FC mov edx,
dword ptr [ebp-04]
====>EDX=25M8
:004BADE0
8A12 mov
dl, byte ptr [edx]
====>DL=32,即2的HEX值
:004BADE2
E8A99CF4FF call 00404A90
:004BADE7
8B45F0 mov eax,
dword ptr [ebp-10]
:004BADEA E899E4F4FF
call 00409288
:004BADEF 8BD8
mov ebx, eax
====>EAX=2,移入EBX
:004BADF1
83C343 add ebx,
00000043
====>EBX=2+43=45,16进制相加
:004BADF4
8D45FC lea eax,
dword ptr [ebp-04]
:004BADF7 E8BC9FF4FF
call 00404DB8
====>此CALL把45转化为对应的字符:E
:004BADFC
885803 mov byte
ptr [eax+03], bl
====>把BL中的E移入[EAX+03]
:004BADFF
BBC5440D00 mov ebx, 000D44C5
====>D44C5移入EBX。注意程序给的此数!
:004BAE04
8D45E8 lea eax,
dword ptr [ebp-18]
:004BAE07 8B55FC
mov edx, dword ptr [ebp-04]
====>25ME 移入EDX
:004BAE0A
8A5202 mov dl, byte
ptr [edx+02]
====>把EDX的第三个字符移入DL,即M
:004BAE0D
885001 mov byte
ptr [eax+01], dl
====>M 移入[EAX+01]
:004BAE10
C60001 mov byte
ptr [eax], 01
:004BAE13 8D55E8
lea edx, dword ptr [ebp-18]
:004BAE16 8D45E4
lea eax, dword ptr [ebp-1C]
:004BAE19
E8D681F4FF call 00402FF4
:004BAE1E
8D45E0 lea eax,
dword ptr [ebp-20]
:004BAE21 8B55FC
mov edx, dword ptr [ebp-04]
====>25ME移入 EDX
:004BAE24 8A5203
mov dl, byte ptr [edx+03]
====>25ME的第四位移入DL,即E
:004BAE27
885001 mov byte
ptr [eax+01], dl
====>E 移入[EAX+01]
:004BAE2A
C60001 mov byte
ptr [eax], 01
:004BAE2D 8D55E0
lea edx, dword ptr [ebp-20]
:004BAE30 8D45E4
lea eax, dword ptr [ebp-1C]
:004BAE33
B102 mov
cl, 02
:004BAE35 E88A81F4FF call
00402FC4
:004BAE3A 8D55E4
lea edx, dword ptr [ebp-1C]
:004BAE3D 8D45EC
lea eax, dword ptr [ebp-14]
:004BAE40
E8C79CF4FF call 00404B0C
====>此CALL取得上面两次移入的字符ME
:004BAE45
FF75EC push [ebp-14]
====>DD*(EBP-14)=ME
********** 真码的第一部分!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
:004BAE48 8B45F8 mov
eax, dword ptr [ebp-08]
====>D EAX=020598
我的BIOS日期
:004BAE4B E838E4F4FF call
00409288
====>?EAX=5076(十进制=20598)
:004BAE50
33C3 xor
eax, ebx 异或运算
====>EBX=D44C5,即004BADFF处移入的值
====>5076 XOR D44C5=D14B3
********** D14B3的十进制是857267,真码的第2部分!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
:004BAE52
8D55D4 lea edx,
dword ptr [ebp-2C]
:004BAE55 E8CAE3F4FF
call 00409224
:004BAE5A 8B45D4
mov eax, dword ptr [ebp-2C]
:004BAE5D 8D55D8
lea edx, dword ptr [ebp-28]
:004BAE60
E8BFE0F4FF call 00408F24
:004BAE65
8B45D8 mov eax,
dword ptr [ebp-28]
:004BAE68 8D55DC
lea edx, dword ptr [ebp-24]
:004BAE6B E880E0F4FF
call 00408EF0
:004BAE70 FF75DC
push [ebp-24]
:004BAE73
8D45D0 lea eax,
dword ptr [ebp-30]
:004BAE76 8B55FC
mov edx, dword ptr [ebp-04]
====>25ME移入EDX
:004BAE79 8A5201
mov dl, byte ptr [edx+01]
====>第二位 5 移入DL
:004BAE7C
E80F9CF4FF call 00404A90
:004BAE81
FF75D0 push [ebp-30]
====>DD*(EBP-30)=5
********** 真码的第三部分!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
:004BAE84
8D45CC lea eax,
dword ptr [ebp-34]
:004BAE87 8B55FC
mov edx, dword ptr [ebp-04]
:004BAE8A 8A12
mov dl, byte ptr [edx]
====>DL=32,即2
:004BAE8C E8FF9BF4FF
call 00404A90
:004BAE91 FF75CC
push [ebp-34]
====>DD*(EBP-34)=2
**********
真码的第四部分!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
:004BAE94
8D45F8 lea eax,
dword ptr [ebp-08]
:004BAE97 BA04000000
mov edx, 00000004
:004BAE9C E8879DF4FF
call 00404C28
====>此CALL把1、2、3、4部分连接起来!
即把ME、857267、5、2-->ME85726752
放在[EBP-08]
:004BAEA1
8BC6 mov
eax, esi
:004BAEA3 8B55F8
mov edx, dword ptr [ebp-08]
====>真码移入EDX
:004BAEA6
E8599AF4FF call 00404904
—————————————————————————————
算法总结:
一、程序先给出4个字符:8888
取得你的机子的BIOS日期。如我的是020598,从中取第二个、第四个数,移入“8888”的第一、第二位。8888-->2588。
把新得出的2588的第二位“5”作为16进制数和程序给的48相加。5+48=4D,4D所对应的字符为“M”。把M移入2588的第三位,2588-->25M8
同样,取第一位“2”作为16进制数和程序给的43相加。2+43=45,45所对应的字符为“E”。把E移入2588的第三位,25M8-->25ME。
至此:8888-->25ME。
二、取新得出的25ME的第三、四位作为真码的第一、二位。即:ME
三、取BIOS日期作为16进制数与程序给的 D44C5 进行异或运算,5076 XOR D44C5=D14B3。
D14B3的十进制是857267,真码的第2部分。
四、取25ME的第二位“5”,作为真码的第三部分。
五、取25ME的第一位“2”,作为真码的第四部分。
最后得出完整的真码:ME85726752
—————————————————————————————
记得
有声有色 7.0 也是把BIOS的日期作为一个主要参数。
BIOS日期:
REGEDIT4
[HKEY_LOCAL_MACHINE\Enum\Root\*PNP0C01\0000]
"BIOSName"="Award"
"BIOSVersion"="Award
Modular BIOS v4.51PG"
"BIOSDate"="02/05/98"
—————————————————————————————
F8进入比较CALL:004BB226 call 00404CAC
:00404CAC
53 push
ebx
:00404CAD 56
push esi
:00404CAE 57
push edi
:00404CAF 89C6
mov esi, eax
:00404CB1 89D7
mov edi,
edx
:00404CB3 39D0
cmp eax, edx
====>比较了!
====>D EAX=13572468(假码)
====>D
EDX=真码!!!
:00404CB5
0F848F000000 je 00404D4A
:00404CBB
85F6 test
esi, esi
:00404CBD 7468
je 00404D27
:00404CBF 85FF
test edi, edi
:00404CC1 746B
je 00404D2E
:00404CC3
8B46FC mov eax,
dword ptr [esi-04]
:00404CC6 8B57FC
mov edx, dword ptr [edi-04]
:00404CC9 29D0
sub eax, edx
:00404CCB
7702 ja 00404CCF
—————————————————————————————
【KeyMake之内存注册机】:
中断地址:406751
中断次数:1
第一字节:51
指令长度:1
中断地址:406751
中断次数:1
第一字节:51
指令长度:1
内存方式:ECX
—————————————————————————————
【注册信息保存】:
C:\WINDOWS\INF
下有一个文件:
{F982X26B-19PA-81C5-32EG-O096345608NK}
没有后缀名,删之即变回未注册版。
—————————————————————————————
【整
理】:
机器码:28771035
真码:ME85726752
—————————————————————————————
Cracked By 巢水工作坊——fly【OCN】
2003-2-4