破解XFtpSvr =====> 請進 (5千字)

看雪資料發表於2001-07-01

軟體名稱:XNETECH FTP Server 0.1.1.616
軟體簡介:基於Windows95/98/NT/2000的FTP伺服器;支援RFC-959標準中所有基本的FTP命令;支援多執行緒、斷點續傳等功能;不限制使用者數,允許不同使用者使用不同的路徑;不同使用者可以賦予不同的的許可權;對使用者的目錄進行容量的限制;自動識別IP地址,並對不同的IP地址賦予不同的的許可權;擴充套件FTP命令集,使用FTP客戶端軟體能管理FTP伺服器;遠端檢視FTP伺服器的當前狀態;遠端增加或刪除使用者的帳戶;遠端斷開任何使用者或IP地址的FTP連線;遠端啟動或停止FTP伺服器的執行;遠端檢視使用者的帳戶; 允許匿名訪問;簡單而強大的圖形介面,操作十分簡單;無須進行安裝設定即可執行;
下載地址(軟體主頁):http://xnetech.363.net/
破解難度:very easy
破解人:Edea[BCG]    (QQ:3849036)

首先,用FI檢查,發現該軟體用UPX加殼,用UPX -d脫之。
用Wdasm反彙編,在反彙編的同時,開啟軟體(嘿嘿,為了節約時間)。點Help/Register Info,填入:
UserName=Edea
Company=BCG
RegisterNO=9876543210
點OK,對話方塊消失,沒任何反映(我暈~~~),經過N(N<=1)分鐘的努力,我發現該軟體把我填的註冊資訊放到了軟體目錄中得xftpsvr.ini裡。
反彙編完成,又經過N(N<=2)分鐘的努力,在反彙編出來的程式碼中,找到這麼一段:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00499218(C)
|
:00499226 8B9324040000            mov edx, dword ptr [ebx+00000424]
:0049922C 8BC3                    mov eax, ebx
:0049922E E8557CF9FF              call 00430E88
:00499233 8B9328040000            mov edx, dword ptr [ebx+00000428]
:00499239 8BC3                    mov eax, ebx
:0049923B E8287CF9FF              call 00430E68
:00499240 8B932C040000            mov edx, dword ptr [ebx+0000042C]
:00499246 8BC3                    mov eax, ebx
:00499248 E85F7CF9FF              call 00430EAC
:0049924D 8B9330040000            mov edx, dword ptr [ebx+00000430]
:00499253 8BC3                    mov eax, ebx
:00499255 E8727CF9FF              call 00430ECC
:0049925A E825F3FDFF              call 00478584                    ----->關鍵CALL
:0049925F 84C0                    test al, al
:00499261 7519                    jne 0049927C                    ----->嘿嘿,關鍵跳轉點
:00499263 A1C4624A00              mov eax, dword ptr [004A62C4]
:00499268 C70001000000            mov dword ptr [eax], 00000001

* Possible StringData Ref from Code Obj ->"XNETECH FTP SERVER - http://xnetech.363.net/ "
                                        ->"[UnRegister]"
                                  |
:0049926E BAC0924900              mov edx, 004992C0
:00499273 8BC3                    mov eax, ebx
:00499275 E82A84F9FF              call 004316A4
:0049927A EB0C                    jmp 00499288

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00499261(C)
|

* Possible StringData Ref from Code Obj ->"XNETECH FTP Server - http://xnetech.363.net/"
                                  |
:0049927C BA04934900              mov edx, 00499304
:00499281 8BC3                    mov eax, ebx
:00499283 E81C84F9FF              call 004316A4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0049927A(U)
|
:00499288 8BC3                    mov eax, ebx
:0049928A 8B10                    mov edx, dword ptr [eax]
:0049928C FF9280000000            call dword ptr [edx+00000080]
:00499292 8BC3                    mov eax, ebx
:00499294 E82B040000              call 004996C4
:00499299 8BC3                    mov eax, ebx
:0049929B E8C8020000              call 00499568
:004992A0 33C0                    xor eax, eax
:004992A2 5A                      pop edx
:004992A3 59                      pop ecx
:004992A4 59                      pop ecx
:004992A5 648910                  mov dword ptr fs:[eax], edx
:004992A8 68B5924900              push 004992B5

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

該軟體在啟動的時候會檢查儲存在xftpsvr.ini裡的註冊碼,判斷註冊與否。
退出程式,開啟TRW2000(我的最愛),下斷點bpx 0049924D,然後再執行程式,被攔下:

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

0177:0049924D  MOV      EDX,[EBX+0430]
0177:00499253  MOV      EAX,EBX
0177:00499255  CALL    00430ECC
0177:0049925A  CALL    00478584              ------>F8跟入
0177:0049925F  TEST    AL,AL
0177:00499261  JNZ      0049927C
0177:00499263  MOV      EAX,[004A62C4]
0177:00499268  MOV      DWORD [EAX],01
0177:0049926E  MOV      EDX,004992C0
0177:00499273  MOV      EAX,EBX
0177:00499275  CALL    004316A4
0177:0049927A  JMP      SHORT 00499288
0177:0049927C  MOV      EDX,00499304
0177:00499281  MOV      EAX,EBX


Call from 0049925A:
0177:00478584  PUSH    EBP
0177:00478585  MOV      EBP,ESP
0177:00478587  PUSH    BYTE +00
0177:00478589  PUSH    EBX
0177:0047858A  XOR      EAX,EAX
0177:0047858C  PUSH    EBP
0177:0047858D  PUSH    DWORD 004785DC
0177:00478592  PUSH    DWORD [FS:EAX]
0177:00478595  MOV      [FS:EAX],ESP
0177:00478598  LEA      EAX,[EBP-04]
0177:0047859B  PUSH    EAX
0177:0047859C  MOV      CX,2710
0177:004785A0  MOV      EDX,[004A7AFC]          ----->"BCG"==>EDX
0177:004785A6  MOV      EAX,[004A7AF8]          ----->"Edea"==>EAX
0177:004785AB  CALL    004785EC                ----->算註冊碼的Call,如果要寫序號產生器就跟入
0177:004785B0  MOV      EAX,[EBP-04]            ----->真註冊碼==>EAX
0177:004785B3  MOV      EDX,[004A7B00]          ----->假註冊碼==>EDX
0177:004785B9  CALL    00403FC8                ----->比較真假註冊碼
0177:004785BE  JNZ      004785C4                ----->不相等嗎?去死吧!
0177:004785C0  MOV      BL,01
0177:004785C2  JMP      SHORT 004785C6
0177:004785C4  XOR      EBX,EBX
0177:004785C6  XOR      EAX,EAX
0177:004785C8  POP      EDX


我的註冊碼:
UserName=Edea   
Company=BCG
RegisterNO=C86428289719A64C3ADEC11B45C91EEA


這個軟體破解很簡單,我的本意是想寫一下這個軟體的序號產生器,可惜功力不夠,在程式中轉暈了頭。希望各位兄弟(特別是偽哥)能幫忙寫出序號產生器,讓小弟學習學習。

相關文章