|
WS_FTP
Pro 6.02 Eval
|
|
|
|
Subject: Cracking |
|
This essay is for knowledge purposes only!! Software developers spend much time in making their programs. They live from the money we give them! Please buy good software!! |
| I. Introduction |
| Yeah, another essay! This time on how to crack the WS_FTP
Pro 6.02 Eval. I just love the program, rather than CuteFTP or any other FTP program. It's easy to use, not that big...in one word: great! First day I tried to crack it I gave up and removed it from my harddisk. But next day I woke up and I realised that I used a wrong approach. So I reinstalled it, started cracking and the job was done in less than 20 minutes. ;-) Now before you start the essay, first this: this essay learns you how to crack the ws_ftp main program...not how to crack the Explorer interface (an util I never use btw) and also not how to crack the ftp finder util! (however it's dead easy) |
| II. About the protection |
Nag/ trial |
| III. Cracking it |
Every time you run ws_ftp it displays a nagscreen. It shows you how many days you have left Disassemble the ftp95pro.exe and save the dead list. When looking to
the string references you won't see anything of what is For removing the nagscreen I developed myself a new method (it probably
already exists, but I never 've read it in an essay).
call xxxxxxxx
...
instructions
...
call xxxxxxxx (nag appears)
... |
trace--push ebp
... ...
instructions
...
call xxxxxxxx (nag appears)
... |
trace--push ebp
... ...
instructions
...
call xxxxxxxx (real nag procedure)
...
For the ones who still don't get it: the only thing you do is refining. You could NOP out the first call that draws the nag, but that call probably contains other valuable code for the program. So that's why you have to trace into the call and search there for another call that draws the nag....until you can't refine anymore and then you've found the real nag routine. If still not clear, just follow how I cracked the prog ;-) Our first problem is finding a good place to set a breakpoint on. A
good place= a place not too far from where the nagscreen ***************************Start of partial code***************************
:00427F05 68B6360000 push 000036B6
* Possible StringData Ref from Data Obj ->"ws_ftp.key"
|
:00427F0A 684C224500 push 0045224C <- Let's break here
:00427F0F 6A00 push 00000000
:00427F11 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"99.08.10"
|
:00427F13 6858224500 push 00452258
* Possible StringData Ref from Data Obj ->"WS_FTP Pro"
|
:00427F18 6864224500 push 00452264
:00427F1D 8B4508 mov eax, dword ptr [ebp+08]
***************************End of partial code***************************
So fire up SoftICE symbol loader, load ftp95pro.exe and run it....when sice breaks set a breakpoint on 427F0A (=bpx 427F0A). Step over the code (=F10) ***************************Start of partial code***************************
:00427F3D 687C224500 push 0045227C
:00427F42 8B4508 mov eax, dword ptr [ebp+08]
:00427F45 50 push eax
:00427F46 6A00 push 00000000
:00427F48 E85D48FFFF call 0041C7AA <- This call will draw the nag
:00427F4D 83C410 add esp, 00000010
:00427F50 85C0 test eax, eax
:00427F52 0F8F07000000 jg 00427F5F
:00427F58 33C0 xor eax, eax
:00427F5A E971070000 jmp 004286D0
***************************End of partial code***************************
Go ahead and step over the call, the nag appears, clear all breakpoints (bc *), and set a breakpoint on the call (doubleclick on the call with your mouse). Exit sice (ctrl-d) and quit the program. Fire ws_ftp again from within the symbol loader!! This is important as otherwise SoftICE won't break, for some odd reason, on the breakpoint you've just set! Now if SoftICE breaks, trace into the call (=F8). Now step over the code again just as we did in the beginning (=F10). ***************************Start of partial code***************************
:0041C7C8 68284D4500 push 00454D28
:0041C7CD 8D4DEC lea ecx, dword ptr [ebp-14]
:0041C7D0 E82B020000 call 0041CA00
:0041C7D5 C745FC00000000 mov [ebp-04], 00000000
:0041C7DC C745F000000000 mov [ebp-10], 00000000
:0041C7E3 6A00 push 00000000
:0041C7E5 8B4508 mov eax, dword ptr [ebp+08]
:0041C7E8 50 push eax
:0041C7E9 E871E9FFFF call 0041B15F <- This call displays the nag
:0041C7EE 83C408 add esp, 00000008
:0041C7F1 85C0 test eax, eax
:0041C7F3 0F8508000000 jne 0041C801
:0041C7F9 E887FAFFFF call 0041C285
:0041C7FE 8945F0 mov dword ptr [ebp-10], eax
***************************End of partial code***************************
I hope you know how to proceed! Just set a breakpoint on the call and after you restarted ws_ftp, trace into the call....go on like this until you see this: ***************************Start of partial code***************************
:0041F438 8B85F8DFFFFF mov eax, dword ptr [ebp+FFFFDFF8]
:0041F43E 8B4010 mov eax, dword ptr [eax+10]
:0041F441 50 push eax
:0041F442 8B0DB8034500 mov ecx, dword ptr [004503B8]
:0041F448 E872190000 call 00420DBF
:0041F44D 8985FCEFFFFF mov dword ptr [ebp+FFFFEFFC], eax
:0041F453 83BDFCEFFFFF00 cmp dword ptr [ebp+FFFFEFFC], 00000000
:0041F45A 0F8505000000 jne 0041F465 <- This jumps to the nag
:0041F460 E9E2000000 jmp 0041F547 <- This executes the main program
***************************End of partial code***************************
Voilą! Clear all breakpoints and goto code location 41F45A in your dead listing and get the offset adress. Fire up HIEW and change the jne 0041F465 into NOP instructions (hex code=90). If you run ws_ftp, the nag is gone, but the time trial is still active.
But this one's quite easy: first make sure your time trial ***************************Start of partial code***************************
* Possible StringData Ref from Data Obj ->"ws_ftp.key"
|
:00427F0A 684C224500 push 0045224C <- Break here
:00427F0F 6A00 push 00000000
:00427F11 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"99.08.10"
|
:00427F13 6858224500 push 00452258
* Possible StringData Ref from Data Obj ->"WS_FTP Pro"
|
:00427F18 6864224500 push 00452264
:00427F1D 8B4508 mov eax, dword ptr [ebp+08]
:00427F20 50 push eax
:00427F21 E81A26FFFF call 0041A540
:00427F26 83C424 add esp, 00000024
:00427F29 85C0 test eax, eax
:00427F2B 0F8D07000000 jnl 00427F38 <- Jump
:00427F31 33C0 xor eax, eax
:00427F33 E998070000 jmp 004286D0
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00427F2B(C)
|
* Possible StringData Ref from Data Obj ->"CyberSuite"
|
:00427F38 6870224500 push 00452270
* Possible StringData Ref from Data Obj ->"ipswitch.key"
|
:00427F3D 687C224500 push 0045227C
:00427F42 8B4508 mov eax, dword ptr [ebp+08]
:00427F45 50 push eax
:00427F46 6A00 push 00000000
:00427F48 E85D48FFFF call 0041C7AA
:00427F4D 83C410 add esp, 00000010
:00427F50 85C0 test eax, eax
:00427F52 0F8F07000000 jg 00427F5F <- Jump
:00427F58 33C0 xor eax, eax
:00427F5A E971070000 jmp 004286D0
***************************End of partial code***************************
So we 've got two conditional jumps: 1. jnl 00427F38Now do the same but with the program expired! You will see that the "jnl 00427F38" still jumps but the "jg 00427F5F" doesn't!! Could this be our check-if-expired-jump ?? Let's check it out and change it in HIEW into "jmp 00427F5F". Run ws_ftp.....we've made it (finally!) it's cracked! ;-)) Congrats if you made it this far *g* |
| IV. In the end |
|
I know there's also the Explorer and FTP find thing. Cracking the FTP
find prog isn't difficult: the protection is in the I want to dedicated this essay to all the fellow crackers on #cracking4newbies
and #evc99...thx guyz for everything and Greetings |
|
Essay written by The Blackbird © 1999-2000 This essay can be freely distributed/ published/ printed etc... as long as no modifications are made. |