 
     =============================================================
      HOW DIGITAL CORRUPTION TRIED TO NUKE CRUX&BAD KARMA RELEASE
                  BY MAKING SOME FALSE ACCUSATIONS.
     =============================================================

Hi,

This is Crisp of CBK (Leader, Cracker, Sysop) writing on the matter of our
so-called 'major fuck-up'.

We at CBK had a rather good laugh after seeing this release. It wasn't only a
fake (read: a re-release) but it also contained some HUGE lies concerning our
first release. Let us explain and defend ourselves against this attack.

1) The situation CRX vs DC BEFORE CBK was formed.
--------------------------------------------------
As you might know, CRX never were good friends of DC. They were constantly
arguing and competing to be the first to release something. We at CBK have
nothing against a healthy competition to be the fastest, but we think it
is not OK to stab the 'winner' of a competition in the back after the victory.

2) What DC says we did.
------------------------
DC claims we removed an important command to go to a special routine.
For the asm-experts: DC claims we removed a BRA.S instruction after a
Lock() routine.

Some more explanations on this:
This is the original routine as found in the uncracked version of
IBrowse 1.1. I have this uncracked version since I (Crisp) was the one
who cracked it!

The routine DC is blaming us for removing, is the routine where IBrowse
displays a requester stating 'IBROWSE IS A DEMO VERSION.. DO NOT DISTRIBUTE'
etc etc.
First note: this is NOT an actual protection! It is just a stupid requester
you have to face everytime you startup the program (so I removed it).
This code is NOT relevant to the good functioning of the program!

The trick was like this: IBrowse checks in the ENV: dir if you have an
env-variable called 'I_KNOW_IBROWSE_IS_BETA'. If you have this variable
definied, it doesn't display the requester. So in order to remove the
requester, we only had to fool the program to let it think there was
such a variable.

Original routines + explanation:
....
MOVE.L  a3,a0
BSR     <SOMEROUTINE>
 This is just some initialisation crap. Not important.
LEA     ENV_I_KNOW_IBROWSE_IS_BETA(pc),a0
 The LEA command passes on a pointer (a reference) to a text in a processor
 register, here A0. Every function call in the ROM requires some parameters,
 this is one of them.
MOVE.L  a0,d1
 We are going to use the LOCK function from the DOS.LIBRARY. This function
 just checks if a file exists (it doesn't look how big it is, how many blocks,
 what name, what dir, blabla, just a plain check if the file exists). The LOCK
 function requires the name of the file to check in a special processor-
 register, more specific D1. The line MOVE.L A0,D1 moves the pointer to the
 text to the D1 processor register.
MOVE.L  POINTER_TO_DOS_LIBRARY,a6
 Since the system has to know what library is being called, it also requires a
 pointer to the library you are calling. For the LOCK function, this is the
 DOS.LIBRARY. This pointer is being put in the A6 processor register.
MOVEQ   #-2,d2
 This is the type of lock we're using. The type of lock is being put in the D2
 processor register (MOVEQ = Move a value Quickly into a processor register).
 The lock type -2 means (as defined in the official C= includes):
  SHARED_LOCK          EQU   -2   ; File is readable by others
 This is just a simple lock, nothing special.
JSR     LOCK(A6)
 This is the actual call to the routine in the ROM. Every routine (well,
 almost every routine) returns a value in the D0 processor register for the
 user.
 The DOS Lock function also returns a value in the D0 processor register:
   If D0 is 0  then the function failed (so, the file does not exist)
   If D0 is NOT 0, then the user gets a pointer to the locked file. This is a
   bit difficult to explain, but just keep in mind that D0 = 0 means NO FILE.
   The thing we have to do now is to make sure that the function that checks
   if D0 = 0 gets overridden so it always thinks the file exists... This is
   done in the following lines:
MOVE.L  d0,PTR_TO_LOCK(a7)
 This copies the D0 return value to the memory.
BEQ.S   NO_ENV_VARIABLE
 And this is the routine that checks if D0 = 0.
 The BEQ instruction means BRANCH if EQUAL TO. This routine jumps to the
 routine called NO_ENV_VARIABLE if the D0 register was zero.
 We have to replace this function to make sure it never goes to the routine
 NO_ENV_VARIABLE, because that routine displays the ugly requester. If we
 replace this call by a NOP (NO OPERATION, simply does NOTHING :), the
 code will NEVER jump to this call.
MOVE.L  PTR_TO_LOCK(a7),d1
 This command moves the pointer from the lock into the D1 register (see 3
 lines above to see it getting stored). The function we're going to call is
 the UNLOCK function (which removes a lock on a file since a locked file
 can't be deleted etc etc). The UNLOCK function requires the pointer to the
 filename in the D1 processor register.
MOVE.L  POINTER_TO_DOS_LIBRARY,a6
 Once again, the system has to know what library we're using, so we move the
 pointer to the DOS library into the A6 register.
JSR     UNLOCK(a6)
 This function frees the lock.
BRA.S   CONTINUE_CODE
 The BRA command is also a BRANCH (=jump to routine) command. The BRA command
 (short for BRANCH) jumps to a specific routine. Here it jumps to the other
 code of the program, skipping the requester message code.

NO_ENV_VARIABLE:
CLR.L   -(a7)
PEA     OKAY(PC)
PEA     THISCOPYOFIBROWSETXT
PEA     INFOMSG
MOVE.L  A2,-(SP)
 This is the start of the requester routine. This is some code we're not going
 to pay attention to.

Briefly, what we have to do is to make sure the computer never makes it to the
BEQ.S command. This is quite easy, we just have to put a NOP in place so it
will never quit to the error routine. If it won't quit to the error routine,
it will continue doing the code untill the BRA.S, which will jump to the rest
of the program.

BUT: There is one problem. If the file doesn't exist, the pointer returned
     from the LOCK function will be zero... It will not branch to an error
     routine, meaning the code will go on to the UNLOCK routine. Since the OS
     doesn't allow you to UNLOCK non-existing files, the OS will crash when
     trying to UNLOCK the 0 - result (meaning NO FILE) from the LOCK-function.
     Shortly: We have to REMOVE the UNLOCK routine as well.

     BUT: If we remove the UNLOCK routine, we also have to remove the LOCK
          routine... If all the commands are being replaced by the NOP
          command, the code results in this:

MOVE.L  A3,a0
BSR     <SOMEROUTINE>
LEA     ENV_I_KNOW_IBROWSE_IS_BETA(PC),A0
MOVE.L  A0,D1
MOVE.L  POINTER_TO_DOS_LIBRAY,A6
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BRA     CONTINUE_CODE
CLR.L   -(SP)
PEA     OKAY(PC)
PEA     THISCOPYOFIBROWSETXT
PEA     INFOMSG
MOVE.L  A2,-(SP)

The reason why there are more NOP's than original commands is because the size
of every command is different. A NOP instruction is 2 bytes, while a MOVE.L
instruction is 4 bytes (= 2 NOP's) etc etc.

What we have done here is simply fool the computer. It never locks on the file
and it never branches to an error code. Meaning, NO ANNOYING REQUESTER.

Now, this is what DC claims BCK did:

...
MOVE.L  A3,a0
BSR     <SOMEROUTINE>
LEA     ENV_I_KNOW_IBROWSE_IS_BETA(PC),A0
MOVE.L  A0,D1
MOVE.L  POINTER_TO_DOS_LIBRAY,A6
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP                                     <------- CRUCIAL BRA.S INSTRUCTION
CLR.L   -(SP)
PEA     OKAY(PC)
PEA     THISCOPYOFIBROWSETXT
PEA     INFOMSG
MOVE.L  A2,-(SP)
....

You see? The BRA.S instruction is GONE! Meaning NO JUMP TO OTHER CODE ROUTINE.
If we REALLY had removed the BRA.S command, you guys would see the DEMO
requester in our release! AND TO PROVE THAT DC, WE INCLUDED A VERSION
THAT DOES THIS IN THIS ARCHIVE. RUN THIS VERSION AND YOU WILL SEE THE
REQUESTER POPPING UP! Note: This is simply because the code continues to run
(without the BRA jump) until it reaches the requester code.

Now, because we want to make sure you guys know this is NO bullshit, we also
included RESOURCE, the program DC used to disassemble the IBROWSE executables,
so you guys can see it for yourselves!

Okay, here's what to do:

1) First run the included IBROWSE version... Just copy it to your IBROWSE dir,
   but don't forget to backup your original ibrowse first. Don't be afraid,
   you won't delete any data or do something wrong by running this version.
2) Just run it and watch the requester popping up. You no know this is because
   of the BRA instruction being skipped.
   We're gonna look at this code now:

   a. Just start up RESOURCE.
   b. Select a screenmode you want to work in. The fastest resolution is
      PAL - High res (no flicker)
   c. Now we're going to load the program to debug. This is the IBrowse
      you just ran. Load it by selecting the OPEN BINARY FILE option from
      the P (Project) menu.
   d. You will be asked to select the file, do so :)
   e. Resource will begin resourcing the file, and after some calculations,
      the disassembled file will be shown.
      In the middle of the screen, you can see the disassembled commands.
      This is pure assembler. In front of these commands (on the LEFT side
      of the screen) you can find the adress of the command in the file.
   f. Now we're going to skip to the routine we just discussed. You can find
      the routine at adress 001396 in the file. Just press SHIFT and the
      CURSOR DOWN key to do a fast scroll.
   g. Once you got to adress 001396 you recognise this routine:
        ...
        001396          movea.l A3,A0                           ; 204B
        001398          bsr.l   START+$0EC6                     ; 6100EB2C
        00139C          lea     START+$049A(PC),A0              ; 41FAF0FC
        0013A0          move.l  A0,D1                           ; 2208
        0013A2          movea.l -$1D10(A4),A6                   ; 74FE
        0013A6          nop                                     ; 4E71
        0013A8          nop                                     ; 4E71
        0013AA          nop                                     ; 4E71
        0013AC          nop                                     ; 4E71
        0013AE          nop                                     ; 4E71
        0013B0          nop                                     ; 4E71
        0013B2          nop                                     ; 4E71
        0013B4          nop                                     ; 4E71
        0013B6          nop                                     ; 4E71
        0013B8          nop                                     ; 4E71
        0013BA          nop                                     ; 4E71
        0013BC          nop                                     ; 4E71
        0013BE          nop                                     ; 4E71
        0013C0          clr.l   -(SP)                           ; 42A7
        0013C2          pea     START+$04BC(PC)                 ; 487AF0F8
        0013C6          pea     -$7FA9(A4)                      ; 486C8057
        ...

        You will recognise the code we discussed above. Some of the adresses
        have changed because it all depends on how you configured your
        RESOURCE :) - But you will recognise the main code! Compare it to
        the DC-screengrab from 'our' crack and you will see exactly the same
        (same adresses! that's the most important part!).


3) Conclusion
---------------

So.. What did I and YOU prove by doing this ? Well, quite simple:
YOU saw that the version WITHOUT the BRA displays the DEMO requester.
YOU saw that by a modified original file that we DIDN'T release because in
the CBK version, you don't see the requester.

DC claims we removed the CRUCIAL BRA.S instruction at the end.
Howcome that the CBK version doesn't show the requester then ? If the BRA.S
is removed it displays the requester... you saw that...
What does this mean ? ... Well, simple:
DC FAKED THE PICTURE THEY RELEASED WITH THEIR RELEASE.

Not satisfied ? Okay, then do this: just load the cracked CBK executable of
IBROWSE (the release version) and go again to the 001396 adress.
You'll find this code:

        ...
        001396          movea.l A3,A0                           ; 204B
        001398          bsr.l   START+$0EC6                     ; 6100EB2C
        00139C          lea     START+$049A(PC),A0              ; 41FAF0FC
        0013A0          move.l  A0,D1                           ; 2208
        0013A2          movea.l -$1D10(A4),A6                   ; 74FE
        0013A6          nop                                     ; 4E71
        0013A8          nop                                     ; 4E71
        0013AA          nop                                     ; 4E71
        0013AC          nop                                     ; 4E71
        0013AE          nop                                     ; 4E71
        0013B0          nop                                     ; 4E71
        0013B2          nop                                     ; 4E71
        0013B4          nop                                     ; 4E71
        0013B6          nop                                     ; 4E71
        0013B8          nop                                     ; 4E71
        0013BA          nop                                     ; 4E71
        0013BC          nop                                     ; 4E71
        0013BE          bra.s   START+$13E2                     ; 6022
        0013C0          clr.l   -(SP)                           ; 42A7
        0013C2          pea     START+$04BC(PC)                 ; 487AF0F8
        0013C6          pea     -$7FA9(A4)                      ; 486C8057
        ...

YOU SEE... The BRANCH is still there!

Final conclusions: - THERE IS NO DIFFERENCE BETWEEN THE CBK AND DC RELEASE OF
                     IBROWSE 1.1B EXCEPT THIS:
                     The DC version has some texts in the opening requester
                     saying 'CRACKED BY SHAG-RAT OF DC' etc. We decided NOT
                     to put such a text in our release because we want to
                     keep the crack as original as possible. (Besides,
                     I personally think it is annoying too).
                   - DC BLAMED CBK FOR SOMETHING THAT IS NOT TRUE
                     The cracking scene is a competition. If you can't stand
                     to loose one of the MANY competitions, then don't play
                     the game (we also lost some releases because you guys
                     were faster - did we complain ?).
                     If you think attacking us this way is the way to get us,
                     then you guys are real sad. Accept the fact that you were
                     a couple of minutes/hours too late to release IBROWSE
                     1.1B. If you released it again, NO PROBLEM -
                     But NOT in this way.

BTW: We do NOT intend to start some lame war for this. We are grown up people
     and we are not going to fucking do something lame. This release is just
     meant to put things straight about some false accusations against us.

     Let's hope it will not happen again.

     Peace,

     Crisp, talking for the whole CBK crew.

     Read and approved:
     FRaNKy of CBK
     SHANE of CBK
     MaLC0MN of CBK
     u-MAN of CBK
     jAVIS of CBK
     nEWT of CBK

------------------------------------------------------------------------[EOF]-

@BEGIN_FILE_ID.DIZ
 /   _______      _____  ____. _____ _ ___ _
//  _\  ___/__ .-\\__  \_\   |/    / //
  _/    \    _/    _/  _/|   /   _/_.
.:\_____     \_____)    \____\      |:.   //
.-----\_______/-\________/----\_____|---- /
|
| READ ABOUT THE FALSE ACCUSATIONS DC MADE
|   TO CRUX & BAD KARMA CONCERNING THE
| IBROWSE 1.1B RELEASE - THERE NEVER WAS A
|   DIFFERENCE BETWEEN BOTH VERSIONS!!!
`-------------------------------------------
@END_FILE_ID.DIZ

