Tmaster6.0 是一個指法練習軟體,在http://software.wx88.net/down/typm2002.exe可以下栽。或到http://www.typingmaster.com/其公司主頁
下栽。目前這個試用DEMO版本要授權檔案,可以變成正式版。
DEMO版只能用到第四課。
工具:Trw2001.22
Uledit 7.0
wdasm
進入程式後,直接學習第四課彈出對話方塊,告訴你是DEMO版,不能用,請購買之類的
好,切入TRW,下斷點
BPX MESSAGEBOXA
返回程式,要求學習第五課,程式被中斷,
* Reference To: user32.MessageBoxA, Ord:0000h
|
:0044B6B6 E821B7FBFF Call 00406DDC
<==在此處中斷呼叫MessageBoxA
:0044B6BB 8945F8
mov dword ptr [ebp-08], eax
:0044B6BE 33C0
xor eax, eax
:0044B6C0 5A
pop edx
:0044B6C1 59
pop ecx
一直按F10直到TMASTER視窗再次顯示,再點第五課的練習,回到TRW2000的介面如下:
:004B82AA FF5218
call [edx+18] <==控制命令傳送給WINDOWS
:004B82AD 8BF8
mov edi, eax
:004B82AF 8B8630010000 mov eax, dword
ptr [esi+00000130]
:004B82B5 8945F8
mov dword ptr [ebp-08], eax
:004B82B8 8BC6
mov eax, esi
:004B82BA E861ADF4FF call 00403020
:004B82BF 837DF800 cmp
dword ptr [ebp-08], 00000000
:004B82C3 7507
jne 004B82CC
:004B82C5 BF03000000 mov edi,
00000003
:004B82CA EB0F
jmp 004B82DB
一直按F10到這裡:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8368(C)
|
:004B8373 A140BC4D00 mov eax,
dword ptr [004DBC40]
:004B8378 8B00
mov eax, dword ptr [eax]
:004B837A 83780C00 cmp
dword ptr [eax+0C], 00000000 此處比較,當eax+0c地址處為0表示為試用版
:004B837E 750B
jne 004B838B <==跳到正確的地址。
:004B8380 8BC3
mov eax, ebx
:004B8382 E855FCFFFF call 004B7FDC
<==顯示為試用版資訊。
:004B8387 8BF8
mov edi, eax
:004B8389 EB0C
jmp 004B8397
在:004B837A行可以看到[eax+0C]的地址為00d56d84, 即在記憶體00d56d84處放的是是否試用版標誌。
下斷點BPM 00D56D84 RW
重新執行Tmaster6.0 ,程式被攔住
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402FC0(U)
|
:0040302C 53
push ebx
:0040302D 56
push esi
:0040302E 57
push edi
:0040302F 89C3
mov ebx, eax
:00403031 89D7
mov edi, edx
:00403033 AB
stosd
:00403034 8B4BD8
mov ecx, dword ptr [ebx-28]
:00403037 31C0
xor eax, eax
:00403039 51
push ecx
:0040303A C1E902
shr ecx, 02
:0040303D 49
dec ecx
:0040303E F3
repz
:0040303F AB
stosd 游標停在此處,此時將EAX改為1,發現變成正式版
:00403040 59
pop ecx
:00403041 83E103
and ecx, 00000003
這是呼叫DLL檔案的,該模組要呼叫很多次,不能在這裡改,否則程式將出錯。
絕續按CTRL-N,回到Tmaster6.0,出現使用者登陸,點OK後程式又被攔住住。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004D45DF(C)
|
:004D4660 A140BC4D00 mov eax,
dword ptr [004DBC40]
:004D4665 8B00
mov eax, dword ptr [eax]
:004D4667 83780C00 cmp
dword ptr [eax+0C], 00000000 <==此處判斷,當eax+0c地址處為0表示為試用版
:004D466B 7E16
jle 004D4683
:004D466D A100BC4D00 mov eax,
dword ptr [004DBC00]
:004D4672 8B00
mov eax, dword ptr [eax]
:004D4674 57
push edi
:004D4675 8DB810020000 lea edi, dword
ptr [eax+00000210]
:004D467B BE8C4C4D00 mov esi,
004D4C8C
:004D4680 A5
movsd
:004D4681 A4
movsb
:004D4682 5F
pop edi
這是程式初始化,若[eax+0C]不為零,將不出現DEMO版字樣。
為了將當eax+0c地址處改為0,將上面的部分程式碼改為如下
改為:
0167:004D4667 57 PUSH
EDI
0167:004D4668 040C ADD
AL,0C
0167:004D466A 89C7 MOV
EDI,EAX
0167:004D466C B001 MOV
AL,01
0167:004D466E AA STOSB
<==把[eax+0C]地址處的值改為01,表示正式版
0167:004D466F 89F8 MOV
EAX,EDI
0167:004D4671 5F POP
EDI
0167:004D4672 90 NOP
<==多的地方用空填補
0167:004D4673 90 NOP
<==多的地方用空填補
0167:004D4674 57 push edi
0167:004D4675 8DB810020000 lea edi, dword ptr [eax+00000210]
將上面的機器瑪抄下,在ULEDIT中修改,即可得到正式版。