破解WorkgroupMail 的30天的時間限制(FCG作業)---高手莫入! (10千字)

看雪資料發表於2015-11-15

破解WorkgroupMail 的30天的時間限制!

破解者:moonlite
目標:WorkgroupMail 6.2.0
下載:http://newhua.ruyi.com/down/wm.exe (大小2964Kb)
工具:TRW 1.22, UltraEdit,W32dasm, Winhex
保護:每次啟動跳出nag窗+30天試用+動態驗證
軟體介紹:WorkgroupMail is a robust and highly scaleable POP3 server.
It can be used to automatically send and receive mail on behalf of each person
in an organization and then store received mail centrally ready for collection
by each person's e-mail client.

前言:這個軟體安裝完後,每次執行它都會跳出一個視窗提示“There are XX days remaining before your trial period expires. Please visit us at ...”。好!開始工作吧:

1)去除nag 視窗->

>>首先,用W32dasm 反彙編WMSvc.exe,在SDR中可找到”Your licensed has expired! Please visit us at ...”:

:0044019E E8FD5C0000              call 00445EA0――――――>程式啟動時,檢查是否過期的CALL
:004401A3 83C404                  add esp, 00000004
:004401A6 8B442408                mov eax, dword ptr [esp+08]
:004401AA C744243000000000        mov [esp+30], 00000000
:004401B2 85C0                    test eax, eax
:004401B4 7F40                    jg 004401F6――――――>在此一定要跳呵!/offset=401B4h
:004401B6 8D4C240C                lea ecx, dword ptr [esp+0C]

* Reference To: MFC42.Ordinal:021C, Ord:021Ch
                                  |
:004401BA E825EF0000              Call 0044F0E4
:004401BF 8B442414                mov eax, dword ptr [esp+14]
:004401C3 8D4C240C                lea ecx, dword ptr [esp+0C]
:004401C7 50                      push eax

* Possible Reference to String Resource ID=24591: "Your licensed has expired! Please visit us at %1 and purchas"
                                  |
:004401C8 680F600000              push 0000600F
:004401CD 51                      push ecx
:004401CE C644243C01              mov [esp+3C], 01

* Reference To: MFC42.Ordinal:047B, Ord:047Bh
                                  |
:004401D3 E858F10000              Call 0044F330

用UltraEdit,在offset=401B4h處,將7F40  改為EB40, 儲存後退出。

>>執行WMSvc.exe,nag窗出現。啟動TRW,Ctrl+D 啟用,搜尋字串“There are XX days ...”,記憶體中找到一處地址 6E0FD4。退出WMSvc.exe。bpx 6E0FD4設斷,並重新執行WMSvc.exe,被TRW攔住如下:

――――――――――MSVCRT!.memcpy―――――――――
015F:78001641  JMP      NEAR [ECX*4+78001704]
015F:78001648  REP MOVSD ――――――――――――――――>游標在這!
015F:7800164A  JMP      NEAR [EDX*4+78001728]
015F:78001651  MOV      EAX,EDI
015F:78001653  MOV      EDX,03
015F:78001658  SUB      ECX,BYTE +04
015F:7800165B  JC      78001669
015F:7800165D  AND      EAX,BYTE +03
015F:78001660  ADD      ECX,EAX
015F:78001662  JMP      NEAR [EAX*4+780016F4]
015F:78001669  JMP      NEAR [ECX*4+`MSVCRT!memcmp`]
015F:78001670  AND      EDX,ECX
015F:78001672  MOV      AL,[ESI]
015F:78001674  MOV      [EDI],AL
015F:78001676  MOV      AL,[ESI+01]

按三次F5後,程式會來到:

――――――――――USER!.messageboxindirect――――――
1777:012C  CLD   
1777:012D  REPNE SCASB ――――――――――――――――>游標在這!
1777:012F  NEG      CX
1777:0131  DEC      CX
1777:0132  CMP      CX,BX
1777:0134  POP      CX
1777:0135  POP      DI
1777:0136  XCHG    AX,DX
1777:0137  JA      0140
1777:0139  RET   

我們知道這是在呼叫視窗函式,也就是說nag窗快登場了!(有朋友會說,攔視窗太費事了,bpx messageboxindirect不就結了---我試過,這招不靈呵) 好! 按兩次F12,nag窗彈出。按下“確定”按鈕,又返回TRW領空:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043FF37(C)
|
:0043FF4E A1E83D4700              mov eax, dword ptr [00473DE8]
:0043FF53 85C0                    test eax, eax――――――>使eax=0,可跳過提示註冊的nag窗/offset=3FF53h
:0043FF55 7415                    je 0043FF6C
:0043FF57 8B4C240C                mov ecx, dword ptr [esp+0C]
:0043FF5B 8B542408                mov edx, dword ptr [esp+08]
:0043FF5F 8B442404                mov eax, dword ptr [esp+04]――――――>eax 指向字串“There are XX days remaining ...”
:0043FF63 51                      push ecx
:0043FF64 52                      push edx
:0043FF65 50                      push eax

* Reference To: MFC42.Ordinal:04B0, Ord:04B0h
                                  |
:0043FF66 E8A3F10000              Call 0044F10E――――――>nag窗的CALL
:0043FF6B C3                      ret


心裡還想呢,這個nag窗太好去除了^_^。

開啟UltraEdit, Ctrl+G,來到 3FF53h處,將8530 改為31C0 (即xor eax, eax
儲存退出。執行WMSvc.exe。那個nag視窗沒了...。將時間調快兩個月,再執行它,nag視窗也沒出現,可高興了沒有兩秒,它在工具攔的圖示競消失了!一定還有暗樁,難道有CRC校驗,不會呵,執行時可沒報錯呵~~

難道其它地方還有時間的校驗,該不是...
再演示一遍。一定要搶在程式退出以前,用TRW中斷它吆!
在工具攔的圖示出現後,迅速Ctrl+D,來到TRW的領空,下 bpx getsystemtime。開始按F5吧,會按幾次的,別忘了做筆記。

最後,會發現以下程式碼:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402B4E(C)
|
:00402B57 E8B42E0400              call 00445A10――――――>動態驗證是否過期的CALL/過期,則eax=0
:00402B5C 85C0                    test eax, eax――――――>看上去很面熟呵~~
:00402B5E 7507                    jne 00402B67――――――>一定要跳呵!!/offset=2B5Eh
:00402B60 8BCE                    mov ecx, esi
:00402B62 E859050000              call 004030C0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402B5E(C)
|
:00402B67 C705C444470000000000    mov dword ptr [004744C4], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402AEA(C)
|
:00402B71 5E                      pop esi
:00402B72 C20400                  ret 0004

>>用UltraEdit,將offset=2B5Eh處的7507  改為EB07。儲存退出->執行WMSvc.exe――>搞定!!


2)啟動時時間的驗證:

有朋友會問,到底軟體提示中用了多少天是怎麼算出來的呵?和我一樣,總是很好奇。。。好,我和你切磋一下!

安裝WorkgroupMail 後,安裝的時間記錄會儲存在同目錄下的檔案WMData.dat中。它是一個二進位制資料檔案,記錄著你的配置資訊和軟體安裝時間:
用UltraEdit開啟後發現:

偏移地址
00000000:1600000073716C3B0001000000010000

注意73716C3B這四個位元組,就是你安裝軟體的時間。讓我們看以下程式碼:

:00403D5E E8ED390400              call 00447750
:00403D63 85C0                    test eax, eax
:00403D65 7512                    jne 00403D79
:00403D67 6AFF                    push FFFFFFFF
:00403D69 53                      push ebx

* Possible Reference to String Resource ID=24638: "Unable to load settings file WMData.dat!"
                                  |
:00403D6A 683E600000              push 0000603E
:00403D6F E80CC20300              call 0043FF80
:00403D74 83C40C                  add esp, 0000000C
:00403D77 EB10                    jmp 00403D89

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403D65(C)
|
:00403D79 8BCE                    mov ecx, esi
:00403D7B E820030000              call 004040A0
:00403D80 E8CBC30300              call 00440150――――――>啟動時檢查執行天數及是否過期的CALL
:00403D85 85C0                    test eax, eax
:00403D87 7533                    jne 00403DBC
                             
在00403D79處設斷。並執行WMSvc.exe,TRW攔住後。suspend並返回windows,開啟Winhex的RAM的Editor,搜尋HEX值“73716C3B”找到地址 7E2CB8 一處。bpm 7E2CB8,按F5,中斷在:

* Reference To: MFC42.Ordinal:0EE3, Ord:0EE3h
                                  |
:00440040 E87BF00000              Call 0044F0C0
:00440045 8B08                    mov ecx, dword ptr [eax]
:00440047 8B15FC484700            mov edx, dword ptr [004748FC]
:0044004D 51                      push ecx
:0044004E 894C2418                mov dword ptr [esp+18], ecx
:00440052 8B4A08                  mov ecx, dword ptr [edx+08]――――――>指向安裝時間記錄
:00440055 8BC4                    mov eax, esp――――――>游標在這!
:00440057 8D542424                lea edx, dword ptr [esp+24]
:0044005B 89642420                mov dword ptr [esp+20], esp
:0044005F 8908                    mov dword ptr [eax], ecx――――――>時間記錄送[eax]儲存
:00440061 52                      push edx
:00440062 8D4C241C                lea ecx, dword ptr [esp+1C]――――――>指向的是系統時間
:00440066 E885FBFCFF              call 0040FBF0]――――――>進入――>>


***************************
* Referenced by a CALL at Addresses:
|:0040F898  , :00426D2C  , :004306ED  , :00432322  , :004329B0 
|:004357B9  , :00440066  , :0044390A  , :00443998  , :004457DA 
|
:0040FBF0 8B09                    mov ecx, dword ptr [ecx]――――――>指向的是系統時間
:0040FBF2 8B442408                mov eax, dword ptr [esp+08]――――――>指向安裝時間記錄
:0040FBF6 2BC8                    sub ecx, eax――――――>做減法
:0040FBF8 8B442404                mov eax, dword ptr [esp+04]――――――>指定差值的存放地址
:0040FBFC 8908                    mov dword ptr [eax], ecx――――――>差值儲存在[eax]
:0040FBFE C20800                  ret 0008

******************************


:0044006B 8B08                    mov ecx, dword ptr [eax]――――――>差值送ecx
:0044006D B807452EC2              mov eax, C22E4507]――――――>換算引數送ecx
:00440072 F7E9                    imul ecx
:00440074 03D1                    add edx, ecx
:00440076 C1FA10                  sar edx, 10
:00440079 8BC2                    mov eax, edx
:0044007B C1E81F                  shr eax, 1F
:0044007E 03D0                    add edx, eax
:00440080 8BDA                    mov ebx, edx――――――>ebx中是你已試用的天數
:00440082 7904                    jns 00440088
:00440084 33C0                    xor eax, eax
:00440086 EB11                    jmp 00440099

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00440082(C)
|
:00440088 B81E000000              mov eax, 0000001E――――――>1E就是30天
:0044008D 33C9                    xor ecx, ecx
:0044008F 2BC3                    sub eax, ebx――――――>用30天減去已試用的天數
:00440091 85C0                    test eax, eax――――――>測試判斷
:00440093 0F9EC1                  setle cl
:00440096 49                      dec ecx
:00440097 23C1                    and eax, ecx

...夜很深了,感覺很疲憊。在此收工吧。!

3)小結:改三處

offset@401B4h                7F40 -->EB40
offset@3FF53h                8530 --> 31C0
offset@2B5Eh                  7507 -->EB07

★☆ moonlite 於2001-8-6☆★
交流請聯絡:qq_midi@yahoo.com.cn

相關文章