一个语文教师的好帮手,可以在word中快速输入拼音。
程序语言:VB6
破解工具:OLLYDBG
适合于初学者
程序注册与重启判断采用同一代码。
00420493 MOV DWORD PTR DS:[EDX+4],ECX
00420496 PUSH zhpdw.0040DF0C UNICODE "regnumber"
0042049B MOV DWORD PTR DS:[EDX+8],EAX
0042049E MOV DWORD PTR SS:[EBP-1B0],EAX
004204A4 MOV EAX,DWORD PTR SS:[EBP-1AC]
004204AA PUSH zhpdw.0040DEF8 UNICODE "regist"
004204AF PUSH zhpdw.0040CEBC UNICODE "pyzh"
004204B4 MOV DWORD PTR DS:[EDX+C],EAX
004204B7 CALL msvbvm60.rtcGetSetting --->输入码
004204BD MOV EDX,EAX
004204BF LEA ECX,DWORD PTR SS:[EBP-2C]
004204C2 CALL msvbvm60.__vbaStrMove
004204C8 MOV EDX,EAX
004204CA MOV ECX,ESI
004204CC CALL msvbvm60.__vbaStrCopy
004204D2 LEA ECX,DWORD PTR SS:[EBP-2C]
004204D5 CALL msvbvm60.__vbaFreeStr
004204DB MOV ECX,DWORD PTR DS:[ESI]
004204DD PUSH 1
004204DF PUSH -1
004204E1 PUSH 1
004204E3 PUSH zhpdw.0040C90C --->替换后的字符,空值
004204E8 PUSH zhpdw.0040DF90 --->需替换的字符,"-"
004204ED PUSH ECX --->输入码
004204EE CALL msvbvm60.rtcReplace --->替换字符,将"-"替换为空值,即去掉"-"
004204F4 MOV EDX,EAX
004204F6 LEA ECX,DWORD PTR SS:[EBP-28] --->替换后输入码
004204F9 CALL msvbvm60.__vbaStrMove
004204FF MOV EDX,DWORD PTR SS:[EBP-28]
00420502 MOV EAX,DWORD PTR DS:[ESI]
00420504 PUSH EDX --->替换后的输入码
00420505 PUSH EAX --->替换前的输入码
00420506 CALL EBX --->__vbstrcomp,比较是否相等,即是否含"-"
00420508 MOV ECX,DWORD PTR SS:[EBP-28]
0042050B MOV ESI,msvbvm60.__vbaLenBstr
00420511 MOV EBX,EAX --->比较结果
00420513 NEG EBX --->取反,相等则错误,故必须含"-"
00420515 SBB EBX,EBX
00420517 PUSH ECX
00420518 INC EBX
00420519 CALL msvbvm60.__vbaLenBstr --->读替换后输入码长度
0042051B XOR EDX,EDX
0042051D CMP EAX,8 --->与8比较
00420520 SETLE DL --->大于等于8则置DL为0
00420523 OR EBX,EDX --->EBX与EDX是否等于0
00420525 JNZ zhpdw.004206F6 --->任意一个不等于0则错,故必须含"-",且去掉"-"后长度大于等于8
0042052B MOV EAX,DWORD PTR SS:[EBP-28]
0042052E PUSH EAX
0042052F CALL ESI
00420531 MOV ECX,DWORD PTR SS:[EBP+8]
00420534 MOV EBX,msvbvm60.__vbaVarTstEq
0042053A MOV DWORD PTR SS:[EBP-268],EAX
00420540 MOV DWORD PTR DS:[ECX+44],1
00420547 MOV EDX,DWORD PTR SS:[EBP+8] --->以下为循环判断注册码
0042054A MOV EAX,DWORD PTR DS:[EDX+44]
0042054D CMP EAX,DWORD PTR SS:[EBP-268]
00420553 JG zhpdw.004206F6
00420559 LEA EDX,DWORD PTR SS:[EBP-58]
0042055C PUSH EDX
0042055D PUSH EAX
0042055E LEA ECX,DWORD PTR SS:[EBP-28]
00420561 LEA EAX,DWORD PTR SS:[EBP-1B8]
00420567 MOV DWORD PTR SS:[EBP-1B0],ECX
0042056D PUSH EAX
0042056E LEA ECX,DWORD PTR SS:[EBP-68]
00420571 PUSH ECX
00420572 MOV DWORD PTR SS:[EBP-50],8
00420579 MOV DWORD PTR SS:[EBP-58],2
00420580 MOV DWORD PTR SS:[EBP-1B8],4008
0042058A CALL msvbvm60.rtcMidCharVar --->取中间字符,每次8位
00420590 LEA EDX,DWORD PTR SS:[EBP-68]
00420593 PUSH EDX
00420594 LEA EAX,DWORD PTR SS:[EBP-2C]
00420597 PUSH EAX
00420598 CALL msvbvm60.__vbaStrVarVal --->取出字符转为串
0042059E PUSH EAX --->取出的字符串
0042059F CALL msvbvm60.rtcR8ValFromBstr --->转为浮点值
004205A5 FSUB QWORD PTR DS:[4016C0] --->减[4016C0]的值,我这里是8074191
004205AB LEA ECX,DWORD PTR SS:[EBP-78]
004205AE PUSH ECX
004205AF FSTP QWORD PTR SS:[EBP-70] --->保存结果
004205B2 FSTSW AX
004205B4 TEST AL,0D
004205B6 JNZ zhpdw.00420DD3
004205BC LEA EDX,DWORD PTR SS:[EBP-88]
004205C2 PUSH EDX
004205C3 MOV DWORD PTR SS:[EBP-78],5
004205CA CALL msvbvm60.rtcHexVarFromVar --->结果转为十六进制
004205D0 SUB ESP,10
004205D3 MOV EDX,ESP
004205D5 MOV ECX,0A
004205DA MOV DWORD PTR DS:[EDX],ECX
004205DC MOV DWORD PTR SS:[EBP-1E8],ECX
004205E2 MOV ECX,DWORD PTR SS:[EBP-1E4]
004205E8 MOV EAX,80020004
004205ED MOV DWORD PTR DS:[EDX+4],ECX
004205F0 PUSH zhpdw.0040CFA8 UNICODE "fontcolor"
004205F5 MOV DWORD PTR DS:[EDX+8],EAX
004205F8 MOV DWORD PTR SS:[EBP-1E0],EAX
004205FE MOV EAX,DWORD PTR SS:[EBP-1DC]
00420604 PUSH zhpdw.0040CECC UNICODE "setting"
00420609 PUSH zhpdw.0040CEBC UNICODE "pyzh"
0042060E MOV DWORD PTR DS:[EDX+C],EAX
00420611 CALL msvbvm60.rtcGetSetting --->读注册表信息,本机码,
我这里是131A5C3,即20030915,感觉是时间限制
00420617 LEA ECX,DWORD PTR SS:[EBP-88]
0042061D PUSH ECX
0042061E LEA EDX,DWORD PTR SS:[EBP-98]
00420624 PUSH EDX
00420625 MOV DWORD PTR SS:[EBP-90],EAX
0042062B MOV DWORD PTR SS:[EBP-98],8008
00420635 CALL EBX --->__vbavartsteq,比较本机码与计算后的输入码是否相等。
00420637 LEA ECX,DWORD PTR SS:[EBP-2C]
0042063A MOV SI,AX
0042063D CALL msvbvm60.__vbaFreeStr
00420643 LEA EAX,DWORD PTR SS:[EBP-98]
00420649 PUSH EAX
0042064A LEA ECX,DWORD PTR SS:[EBP-88]
00420650 PUSH ECX
00420651 LEA EDX,DWORD PTR SS:[EBP-78]
00420654 PUSH EDX
00420655 LEA EAX,DWORD PTR SS:[EBP-68]
00420658 PUSH EAX
00420659 LEA ECX,DWORD PTR SS:[EBP-58]
0042065C PUSH ECX
0042065D PUSH 5
0042065F CALL msvbvm60.__vbaFreeVarList
00420665 ADD ESP,18
00420668 CMP SI,DI
0042066B JE SHORT zhpdw.004206DB --->相等则成功
以下略,从第一位开始,每次取8位字符进行计算并比较,经过数次循环结束。
小结:注册码形式为任意XXXX-XXXXXXXX,长度没有限制,"-"前为注册姓名,"-"后为要比较的注册码,正确结果为8074191+20030915=281051060
我用QGJ-281051060
前段时间跟了几个程序都未果,虽然可以显示为注册成功,但功能依然有限制,又找不到地方,感觉破解越来越难了。突然看到这么简单的程序,简直不敢相信自己的眼睛。希望程序没有其它的限制吧。
希望论坛能多出些详细的破文,让我等菜鸟多学习学习。