用bpx hmemcpy设断点,然后再用BPR断点监视你输入的注册码,它将你输入的注册码字符串转换成整数之后,
就到了如下的地方,要装到浮点寄存器中去了(又是浮点数!):
5187:9067 53
PUSH BX
5187:9068 90
NOP
5187:9069 DD06C00D FLD REAL8 PTR
[0DC0] //装入到浮点寄存器中去
5187:906D E86807 CALL
97D8
5187:9070 5B
POP BX
5187:9071 58
POP AX
5187:9072 803ED00D1A CMP BYTE PTR [0DD0],1A
5187:9077 7504
JNZ 907D
5187:9079 883ED00D MOV
[0DD0],BH
5187:907D E8A4F0 CALL
8124
5187:9080 CD3D INT
3D
5187:9082 5F
POP DI
5187:9083 C3
RET
5187:9084 55
PUSH BP
5187:9085 8BEC
MOV BP,SP
5187:9087 56
PUSH SI
5187:9088 B42C
MOV AH,2C
5187:908A 9AD9884701 CALL KERNEL!DOS3CALL
单步跟踪,发现最终在如下FCOMPP的地方进行注册码的比较。此时ST1寄存器中放的是你输入的假注册码,
ST0中存放的是另外一个数。它会把你的假注册码和好几个数相比,这些数中有一个是真正的注册码,
其它的数不能用,否则启动的时候它会说你的文件被破坏了 :-)
只需要在如下的FCOMPP处插入INT 3指令即可,这里应为VB3比较两个数的地方。
4B57:3C00 FFE0
JMP AX
4B57:3C02 90
NOP
4B57:3C03 D9C9
FXCH ST(1)
4B57:3C05 90
NOP
4B57:3C06 DED9
FCOMPP //比较注册码
4B57:3C08 90
NOP
4B57:3C09 DFE0
FSTSW AX
4B57:3C0B CD3D
INT 3D
4B57:3C0D 9E
SAHF
4B57:3C0E C3
RET
4B57:3C0F 2800
SUB [BX+SI],AL
4B57:3C11 B82600 MOV
AX,0026
4B57:3C14 B8A600 MOV
AX,00A6
4B57:3C17 E8E8FF CALL
3C02
4B57:3C1A B80000 MOV
AX,0000
4B57:3C1D 7501
JNZ 3C20
4B57:3C1F 48
DEC AX
4B57:3C20 50
PUSH AX
4B57:3C21 26AD
LODSW ES:
4B57:3C23 FFE0
JMP AX
一个可用的cowsense.INI文件:
[Registration]
SerialNumber=W401-9900558
UserName=zhuxiaohua
UserCompany=zhuchen
Key=80467949
OptionKey=850780
DataEntryMode=False
Chronid=313500
Version=
[File Parameters]
DataPath=
DataFileName=
[Settings]
TabStyle=Mac
ReportTitle=Cow Sense Sample Herd
ReportingYear=2000
[Options]
SystemDB=C:\temp\vb3\SYSTEM.MDA
- 标 题:找到注册码了 (2千字)
- 作 者:郭大志
- 时 间:2000-6-13 22:34:00
- 链 接:http://bbs.pediy.com