| UltraEdit 32 v6.20b | |
|  | |
| 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 | |
| Welcome in this howto crack UltraEdit essay! Of all essays I wrote this is the most difficult | |
| II. About the protection | |
| 
 | |
| III. Cracking it | |
| Run the program and note the message the nagscreen displays: 
      "This is an unregistered copy...."************Start-of-partial-code************ 
* Possible StringData Ref from Data Obj ->"Days to expire"
                                  |
:0045A68B 689C064D00              push 004D069C
:0045A690 57                      push edi
:0045A691 E8D1030300              call 0048AA67
:0045A696 A14C6D4D00              mov eax, dword ptr [004D6D4C]
:0045A69B A3546D4D00              mov dword ptr [004D6D54], eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045A724(C)
|
:0045A6A0 391D206D4D00            cmp dword ptr [004D6D20], ebx<-Registered?
:0045A6A6 7519                    jne 0045A6C1             <- Jump if it is
* Possible Reference to String Resource ID=00005: "ULTRAEDT.MAC"
                                  |
:0045A6A8 6A05                    push 00000005
:0045A6AA 8D8E28010000            lea ecx, dword ptr [esi+00000128]
:0045A6B0 E8557C0200              call 0048230A
:0045A6B5 FFB644010000            push dword ptr [esi+00000144]
* Reference To: USER32.UpdateWindow, Ord:0291h            <- Display nag
                                  |
:0045A6BB FF15ECB64A00            Call dword ptr [004AB6EC]
Okay so first thing we have to do is changing the 7519 jne 0045A6C1 into: EB19 jmp 0045A6C1 Run the program again, and you'll see the nag has disappeared. Note that the time trial is still active, so let's crack that bitch :) You can use the program unregistered for 45 days. The hex value for 45 is "2D". So, there might be a check like "cmp register, 0000002D". Let's guess and take eax for the register, so search for "cmp eax, 0000002D"....and BINGO! ************Start-of-partial-code************ 
* Possible StringData Ref from Data Obj ->"Settings"
                                  |
:0045A6FD 68F0054D00              push 004D05F0
:0045A702 E860030300              call 0048AA67
:0045A707 A14C6D4D00              mov eax, dword ptr [004D6D4C]
:0045A70C 2B05546D4D00            sub eax, dword ptr [004D6D54]
:0045A712 50                      push eax
:0045A713 E8323C0100              call 0046E34A <- Calculate usage
:0045A718 83F82D                  cmp eax, 0000002D <-Compare days
:0045A71B 59                      pop ecx
:0045A71C 7F0C                    jg 0045A72A <- jump if expired
:0045A71E 399E44010000            cmp dword ptr [esi+00000144], ebx
:0045A724 0F8576FFFFFF            jne 0045A6A0
************End-of-partial-code************ 
      Yeah indeed, nop out that jump :) 7F0C jg 0045A72A becomes: 90 NOP 90 NOP Now the program is fully functional as the registered program should be, but there's still one thing left: the "unregistered" string in the aboutbox. This nasty thing costed me quite some time to find out: there are so many "This is an unregistered copy...." strings that it'd be impossible to find out what string is used for the about box. So I started thinking, and this is what I found out: the program probably checks the registered flag twice -> once for the nagscreen and once for the about box. So I started searching for a second "cmp dword ptr [004D6D20], ebx". I didn't find one, and I was getting quite frustrated, until I thought: "Maybe, it used another register to check that memory location!?". So again I started searching for all occurences with all different registers until....TADAAAAAAM if found: "cmp dword ptr [004D6D20], edi" :)) ************Start-of-partial-code************ 
:004061D7 C645FC01                mov [ebp-04], 01
:004061DB C70378D04A00            mov dword ptr [ebx], 004AD078
:004061E1 E8EACA0700              call 00482CD0
:004061E6 393D206D4D00            cmp dword ptr [004D6D20], edi <- Registered?
:004061EC 7462                    je 00406250 <- Jump if not registered
* Possible Reference to String Resource ID=00009: "
This copy of UltraEdit-32 is licensed to :
  "
                                  |
:004061EE 6A09                    push 00000009
:004061F0 8BCE                    mov ecx, esi
:004061F2 E868CF0700              call 0048315F
:004061F7 68FC544D00              push 004D54FC
:004061FC 8BCE                    mov ecx, esi
:004061FE E85CCD0700              call 00482F5F
:00406203 BFA4CF4C00              mov edi, 004CCFA4 | |
| IV. In the end | |
| 
 Heh, my favorite part of tutorials :) You can freely use this essay on your page, as long as  Greetings  | |
| Essay written by The Blackbird © 1999-2000 This essay can be freely distributed/ published/ printed etc... as long as no modifications are made. | |