Cracking Tutorial for Malz++Kassner CAD 4.7 (Economy)
 
 


Target Program: Malz++Kassner CAD 4.7 (Economy)
Description: Malz++Kassner CAD is a useful program for technical illustration, drawing and graphic. It's very fast and easy to use. It features many drawing and construction posibilities.
Location: http://www.malz-kassner.com
Protection: User Name & Unlock Code
Tools needed: - SoftICE 3.24
Ob duh: Do I really have to remind you all that by BUYING and NOT stealing the software you use will ensure that these software houses will continue to produce even *better* software for us to use and more importantly, to continue offering even more challenges to breaking their often weak protection systems.
BTW, It's illegal to use cracked Software!

 
If you're looking for cracks or serial numbers from these pages then your wasting your time, try to search elsewhere on the Web under Warez, Cracks, etc.
Info: Brand and product names are trademarks or registered trademarks of their respective holders.
Level: (X)Beginner ( )Intermediate ( )Advanced ( )Expert

To start our cracking session choose "Bestellen & Freischalten" (Ordering & Unlock). Now you'll be looking at two input fields. One asking for your User Name and one asking for your Unlock Code. As User Name enter "Cracking Tutorial" and as Unlock Code enter "12345". Now we need to set the breakpoints in SoftICE, so enter SoftICE and set a breakpoint to HMEMCPY. Then leave SoftICE and press the Unlock Button (the button with the key). SoftICE will pop up now; since there were two input fields, we can skip the first one, so press CTRL-D. SoftICE will pop up again. Press F12 until something like the following code get's displayed:
 
  :0042B903    MOV     EDI,[KERNEL32!lstrlen]
  :0042B909    LEA     EAX,[EBP+FFFFFBE8]
  :0042B90F    PUSH    EAX
  :0042B910    CALL    EDI
  :0042B912    CMP     EAX,04                         ; Has User Name at least 4 chars?
  :0042B915    JGE     0042B92D                       ; If so, JMP!
   ...         ...
  :0042B923    CALL    00407DE2
  :0042B928    JMP     0042BB03
  :0042B92D    LEA     EAX,[EBP-0214]
  :0042B933    PUSH    EAX                            ; PUSH our fake Unlock Code
  :0042B934    CALL    EDI                            ; do some Unlock Code checking
  :0042B936    TEST    EAX,EAX                        ; Special Part of Unlock Code ok?
  :0042B938    JNZ     0042B95E                       ; if not JMP

Since this JNZ at 42B938 is very important, we must check that CALL at 42B934! So enter this CALL. After some tracing something like the following code snippet will be displayed:

  :0042B95E    LEA     EAX,[EBP-0214]
  :0042B964    PUSH    EAX                            ; PUSH fake Unlock Code
  :0042B965    LEA     EAX,[EBP+FFFFFBE8]
  :0042B96B    PUSH    EAX                            ; PUSH User Name
  :0042B96C    CALL    004F6F1A                       ; do some checking

Well, the CALL at 42B96C will check a part of our unlock code obviously, so ENTER this CALL. Now something like the following code snippet will be displayed:

  :004F6F1A    PUSH    EBP                            ; PUSH fake Unlock Code
  :004F6F1B    MOV     EBP,ESP
  :004F6F1D    SUB     ESP,00000204
  :004F6F23    LEA     EAX,[EBP-0204]
  :004F6F29    PUSH    EAX
  :004F6F2A    PUSH    DWORD PTR [EBP+08]             ; PUSH User Name
  :004F6F2D    PUSH    DWORD PTR [EBP+0C]
  :004F6F30    CALL    004F6E81

Since our fake Unlock Code and our User Name get's checked again, we need to trace this CALL at 4F6F30. So if you enter this CALL you'll be confrontated with the following code snippet:

  :004F6E81    MOV     EAX,[ESP+04]                  ; MOV fake Unlock Code in EAX
   ...         ...
  :004F6E93    MOV     CL,[EAX+EDX]                  ; MOV edxTH number of fake UC in CL
  :004F6E96    CMP     CL,30                         ; compare CL with "1"
  :004F6E99    JL      004F6F14                      ; if less, invalid code message
  :004F6E9B    CMP     CL,39                         ; compare CL with "9"
  :004F6E9E    JG      004F6F14                      ; if greater, invalid code message
  :004F6EA0    MOVSX   ECX,CL
  :004F6EA3    LEA     ESI,[EDI*4+EDI]
  :004F6EA6    INC     EDX                           ; EDX+1 (next number of fake UC)
  :004F6EA7    CMP     EDX,05                        ; 5th number of fake UC reached?
  :004F6EAA    LEA     EDI,[ESI*2+ECX-30]
  :004F6EAE    JL      004F6F93                      ; if not, JMP to 4F6F93
  :004F6EB0    CMP     BYTE PTR [EAX+05],2D          ; Is 6th number of UC a "-"?
  :004F6EB4    JNZ     004F6F14                      ; If not so, invalid code message
  :004F6EB6    CMP     EDI,00004E20                  ; Is "12345" less than 20000?
  :004F6EBC    JL      004F6F14                      ; If so, invalid code message
  :004F6EBE    CMP     EDI,00005014                  ; Is "12345" greater than 20500?
  :004F6EC4    JGE     004F6F14                      ; If so, invalid code message

So our Unlock Code must start with "xxxxx-". "xxxxx" must be greater than 19999 and less than 20500. So let's choose 20499, which is greater than 19999 and less than 20500. So the first part of our real Unlock code is "20499-". Now reenter the Unlock Code: this time enter "20499-12345". Now we can go on with the tracing:

  :004F6EC6    PUSH    06
   ..          ...
  :004F6ECB    MOV     CL,[EAX+EDX]                  ; MOV edxTH number of fake UC in CL
  :004F6ECE    CMP     CL,30                         ; compare CL with "1"
  :004F6ED1    JL      004F6F14                      ; if less, invalid code message
  :004F6ED3    CMP     CL,39                         ; compare CL with "9"
  :004F6ED6    JG      004F6F14                      ; if greater, invalid code message
  :004F6ED8    MOVSX   ECX,CL
  :004F6EDB    LEA     ESI,[ESI*4+ESI]
  :004F6EDE    INC     EDX                           ; EDX+1 (next number of fake UC)
  :004F6EDF    CMP     EDX,0A                        ; 10th number of UC reached?
  :004F6EE2    LEA     ESI,[ESI*2+ECX-30]
  :004F6EE6    JL      004F6FCB                      ; if not, JMP to 4F6FCB
  :004F6EE8    MOV     AL,[EAX+0A]                   ; MOV 11th number of fake UC in AL
  :004F6EEB    CMP     AL,2D                         ; is 11th number a "-"?
  :004F6EED    JZ      004F6EF3                      ; if so, JMP to 4F6EF3
  :004F6EEF    TEST    AL,AL
  :004F6EF1    JNZ     004F6F14                      ; if not, invalid code message
  :004F6EF3    CMP     ESI,000001C2                  ; compare "1234" with "450"
  :004F6EF9    JL      004F6F14                      ; if less, invalid code message
  :004F6EFB    CMP     ESI,000001F4                  ; compare "1234" with "500"
  :004F6F01    JGE     004F6F14                      ; if greater, invalid code message

The next part our Unlock Code must be greater than "449" and less than "500". But we need one more number before our "-". We can't just add a "0" to our Unlock Code, since then it won't pass the "> 449 < 500" test. So we need to add that "0" before. And then there must be a "-". Let's choose "0450", which is greater than "0449" and less than "0450". Our current real Unlock Code will now be "20499-0450-". So reenter your Unlock Code: this time enter "20499-0450-12345". Then go on with the tracing:

  :004F6F03    PUSH    EBX
  :004F6F04    PUSH    DWORD PTR [ESP+18]
  :004F6F08    PUSH    ESI                           ; PUSH Part 1 of UC (20499)
  :004F6F09    PUSH    EDI                           ; PUSH Part 2 of UC (0450)
  :004F6F0A    CALL    004F6D91                      ; calculate rest of real UC
  :004F6F0F    ADD     ESP,10
  :004F6F12    JMP     004F6F16
  :004F6F14    XOR     EAX,EAX
  :004F6F16    POP     EDI
  :004F6F17    POP     ESI
  :004F6F18    POP     EBX
  :004F6F19    RET

Now let's go on with the tracing. After the RET instruction at 4F6F19 the rest of the Unlock Code must be checked. So after you've executed that RET instruction, you'll be looking at the following code snippet:

  :004F6F35    ADD     ESP,0C
  :004F6F38    TEST    EAX,EAX                       ; special part of UC not correct?
  :004F6F3A    JZ      004F6F55                      ; if so, JMP to 4F6F55
  :004F6F3C    LEA     EAX,[EBP-0204]
  :004F6F42    PUSH    EAX                           ; PUSH real Unlock Code
  :004F6F43    PUSH    DWORD PTR [EBP+0C]
  :004F6F46    CALL    [KERNEL32!lstrcmpi]           ; compare
  :004F6F4C    TEST    EAX,EAX                       ; equal?
  :004F6F4E    JNZ     004F6F55                      ; if not, JMP to 4F655
  :004F6F50    PUSH    01
  :004F6F52    POP     EAX
  :004F6F53    LEAVE
  :004F6F54    RET
  :004F6F55    XOR     EAX,EAX                       ; set 'flag' for wrong code msg
  :004F6F57    LEAVE
  :004F6F58    RET

If you do a "D EAX" at 4F6F42, you'll see the complete, real Unlock Code, which will be "20499-0450-0633-2237-80". Please don't use this code - buy the program and use your legal Unlock Code!
 
Another target has been Reverse Engineered. Any questions?

 

 
 
If you're USING Malz++Kassner CAD BEYOND it's FREE TRIAL PERIOD, then please BUY IT.


Copyright © 1999 by TORN@DO and The Immortal Descendants. All Rights Reserved.