• 标 题:初学者(13) (2千字)
  • 作 者:liutong
  • 时 间:2000-6-9 22:43:23
  • 链 接:http://bbs.pediy.com

软件来源:软件世界2000年2A
软件用途:
WinOKE was created because I saw a need for a simple cheap way to do a Karaoke, but without the expense or hassle of getting in the big Karaoke machines. Why not set-up and run a karaoke from your home computer, a system where you could put any text into the program in time to the music would be great. Well here it is, WinOKE, and it's great!

注册时需要输入以下内容(所有的内容都将用于计算注册码)
Customer Code
Name
Adress 1
Adress 2
Adress 3
Adress 4
Post/Zip Code
Country
Unlocking Code

设中断bpx hmemcpy,点"注册"键
按F12若干次可找到
CALL 0047FC30
MOV EAX,[00490EA4]
CMP BYTE PTR [EAX],00 <----注册与否标志
JZ 0047539C  <-----错误由此跳转
追进0047FC30,找到
        CALL 00403F74
        JZ 0047FE6E
        XOR EAX,EAX
        JMP 0047FE70
0047FE6E    MOV AL,01
        MOV [0049294B],AL
0047FE70    XOR EAX,EAX
因此只需将JMP改为90 90即可使此软件变为freeware

以下是追踪注册码生成的过程:
设中断bpx hmemcpy,点"注册"键
按F12待返回到WinOKE程序后,按F10可找到两个CALL
CALL 00403F74 <----检测Customer Code
JNZ 0047FE6A

CALL 00403F74 <----检测Unlocking Code
JZ 0047FE6E    
Customer Code的生成过程:
Customer Code共6位,前4位用户输入,后2位由前4位生成
Unlocking Code的生成过程:
Unlocking Code共11位,前3位是固定的"OKE"
第4-9位由用户输入项计算生成
最后两位则有前面的9位计算生成

举例说明:
Customer Code: 0003**
Name:  LiuTong
Adress 1: HePing
Adress 2:
Adress 3:
Adress 4:
Post/Zip Code: 100028
Country: China
Unlocking Code: ***********

Customer Code的计算:
          0      0      0      3
ASCII码      30      30    30    33
系数          2      3      4      1
乘积        60      90    c0    33
将乘积相加得1E3
Customer Code中的第一个*的代码是3
将1E3右移3位得3C
Customer Code中的第二个*的代码是C
从软件中的代码表中查到
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
B R F G D C H K L M  E  N  S  P  A  Z
故Customer Code应为0003GS

Unlocking Code的计算:
第1-3位是固定的:OKE
第4和9位是根据输入数据的长度计算出来的:
软件将输入的数据整理变为:
">0003GS|LIUTONG|HEPING||||100028|CHINA<"
长度为(HEX)27
第4位的代码是2,查代码得"F"
第9位的代码是7,查代码得"K"
第5-8位由用户输入项计算出来
将">0003GS|LIUTONG|HEPING||||100028|CHINA<"同Customer Code的计算过程
得325D,则第5-8位的代码是GFCP
整理第1-9位是OKEFGFCPK
          O      K    E    F    G    F    C    P    K
ASCII码      4F    4B    45    46    47    46  43  50  4B
系数          2      3    4    1    2    3    4    1    2
乘积        9E    E1  114    46    8E    D2  10C  50  96
将乘积相加得62B
第10位代码是B,查代码得"N"
将62B右移3位得C5
第11位代码是5,查代码得"C"
整理Unlocking Code是OKEFGFCPKNC

Customer Code: 0003GS
Name:  LiuTong
Adress 1: HePing
Adress 2:
Adress 3:
Adress 4:
Post/Zip Code: 100028
Country: China
Unlocking Code: OKEFGFCPKNC