home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Supremacy 1
/
Supremacy-1.iso
/
UTILS
/
!SERIAL
/
CRACKPRO.ZIP
/
CRAKROB4.S
< prev
next >
Wrap
Text File
|
1985-11-20
|
7KB
|
214 lines
* Right...
* I believe you wanted to know:
* 1> HOW to crack it
* 2> HOW I figured out how to crack it
*
* Answers...
* 1> Run this program!!! Nah, alright then...
* Now, Rob (the nice bloke) doesn't like MonST2 at all (you may have
* noticed), so first thing he does is he checks all the system vectors,
* e.g. TRAPs, anything important at all really... including GEM vectors
* in the system variables area. So you have to crack the damn thing from
* a fully automatic program that runs the protected program from within
* itself WITHOUT taking over any vectors.
* Now, Rob is not going to put himself out of a job by making the perfect
* protection, so he leaves loopholes in for us to play with (ask Birdy,
* he's mates with him!). Old loopholes included being able to Alt-Help into
* the code, being able to reset and save memory, etc. The current ones are
* that he doesn't check the keyboard interrupt or the HBL... Zippy (Medway)
* uses a keyboard interrupt (not quite sure exactly HOW), but I use a far
* superior method of sticking something in $120 which continually checks
* a certain part of the protected program to see if it has decrypted or
* not. If it hasn't, it continues normally. If it has changed (ie., it's
* been decrypted, then I stop everything, restore the exceptions (because
* Rob generally fucks them up), and from various things, figure out how big
* the unencrypted file is, and then save it.
*
* 2> Now, how did I figure out how Rob's routines were working?
* Bloody hell, talk about an awkward question! Well, as you can see from
* the loopholes bit above, I've been zapping his protections for months, so
* I've been following all his little upgrades from day 1. (Back in Copylock
* version 1.0 days...) You should have noticed that he puts something in
* the ILLEGAL and TRACE exceptions, and that's a major part of making any
* monitor useless. He jumps in and out of these vectors all the time,
* modifying his own code and re-encrypting it as he goes, so FORGET ABOUT
* TRYING TO ACTUALLY SEE WHAT HIS CODE DOES. I knew how to find a way to
* crack it by using the old method of... (big cracker secret coming up)...
* TRIAL and ERROR!!!!!!!!!!!!!!!! !!!!!!!!! (and !!!!!!!!!!)
* I tried every vector I could think of until I found one that his code
* didn't take a dislike to, and then stuck with it. Then I fucked about for
* two hours or so when I got the latest version of his protection, stopping
* his code after different intervals, trying to find the perfect place at
* which to stop it (which is AFTER decryption, but BEFORE relocation).
* Then I experimented with the registers that I had at those points, seeing
* where they pointed, fucking about with those... I eventually found the
* right place to monitor to catch the program after decryption... but
* unfortunately there doesn't seem to be a 100% safe way to catch it before
* it relocates the decrypted executable file. My routine only does it 2 out
* of 3 times, so if the file it produces is knackered, run it again!
* I probably haven't explained that at all well, have I?? Well tough...
* cracking is really 50 % trial and error, 49.9 % intelligent logical
* deduction (Sherlock Holmes!), and .1 % Sherbet Lemons.
* What else can I say???????
* When this routine manages to save out the file, complete with exec header
* and relocation table, it sometimes fucks up in another way, by saving out
* a prg that is already relocated. But seeing as you have the relocation
* table intact, you can just derelocate it, can't ya?
*** ROB NORTHEN EXTERNAL PROTECTION CRACKER ***
* For the new version as used in Castle Master
* This is not perfect... it will run the program and save the decrypted
* PRG onto drive B. Sometimes...
* (And as soon as he updates his protection, this is useless!)
start pea (end-start)+256.w
pea start-256(pc)
pea $4a0000 reserve memory
trap #1
lea 12(sp),sp
lea stack(pc),sp
clr.l -(sp)
move.w #$20,-(sp) supervisor
trap #1
pea input(pc)
move.w #9,-(sp) input prompt
trap #1
pea filename(pc)
move.w #9,-(sp)
trap #1
pea cursor(pc)
move.w #9,-(sp)
trap #1
lea 18(sp),sp
pea inputline(pc)
move.w #$a,-(sp) input filename
trap #1
addq.l #6,sp
pea envcom(pc)
move.l (sp),-(sp)
pea filename(pc)
pea $4b0003 load and set up
trap #1
lea 16(sp),sp
tst.l d0
bmi.s error
move.l d0,a0 basepage addr
lea 12(a0),a0 to text len pointer
move.l a0,compare+6 write addr of that
move.l (a0),compare+2 write byte there
lea $8.w,a0 save all exception
lea tex(pc),a1 vectors, interrupts,
move.w #($200-$8)/2-1,d1 etc. etc.
save move.w (a0)+,(a1)+
dbf d1,save
move.l $114.w,oldtimerC+2 save old timer C
move.l #mytimerC,$114.w patch my timer C
clr.l -(sp)
move.l d0,-(sp)
clr.l -(sp)
pea $4b0004 run rob's shit...
trap #1
** never gets to here **
error pea text(pc)
move.w #9,-(sp) error message
trap #1
move.w #8,-(sp) wait for key
trap #1
addq.l #8,sp
clr.w -(sp) bye!
trap #1
mytimerC eor.w #$77,$ffff8240 muck up colors
movem.l d0-d7/a0-a6,-(sp)
* these 00000000s are overwritten -- see above
compare cmp.l #$00000000,$00000000 decrypted yet?
beq notyet no
move.w #$2700,sr yes! kill interrupts
move.w #$70,$ffff8240.w green screen
lea tex(pc),a0 restore exceptions etc.
lea $8.w,a1
move.w #($200-$8)/4-1,d0
copy move.l (a0)+,(a1)+
dbf d0,copy
move.b #7,$484.w keyclick on (ok, maybe)
clr.l $426.w kill rob's anti-reset
clr.l $42a.w
movem.l (sp)+,d0-d7/a0-a6
move.l 2(sp),a6 a6=text
lea -256(a6),a6 a6=basepage
* create an exec header
move.w #$601a,228(a6) exec header
move.l 12(a6),230(a6) write text len
move.l 20(a6),234(a6) write data len
move.l 28(a6),238(a6) write bss len
lea 228(a6),a5
move.l 2(a5),d0
add.l 6(a5),d0
add.l #32,d0
move.l d0,len+2
clr.w -(sp)
* save using same filename to drive B
move.b #'B',filename
pea filename(pc)
move.w #$3c,-(sp)
trap #1
addq.l #8,sp
pea (a5)
len pea 0
move.w d0,-(sP)
move.w d0,d7
move.w #$40,-(sp)
trap #1
lea 12(sp),sp
move.w d7,-(sp)
move.w #$3e,-(sp)
trap #1
addq.l #4,sp
* die now, because the system is probably shot to hell anyway
jmp $fc0000
notyet movem.l (sp)+,d0-d7/a0-a6
oldtimerC jmp 0 do old timer C
data
ds.l 400
stack ds.l 1
envcom dc.w 0 null environment/command
text dc.b 27,"E",7,"File not found. Hit it...",0
input dc.b 27,"E",27,"e","CrakRob by The Alien.",13,10,10
dc.b "Cracks Rob Northen's latest",13,10
dc.b "external protection...",13,10,10
dc.b "Program to crack? >",0
cursor dc.b 27,"e",27,"Y",37,51,0
inputline dc.b 128 max 128 chars
dc.b 13 8 given chars
filename dc.b "A:\HACK_V2.PRG" default filename
bss
ds.b 120 128 chars buffer
tex ds.l $200-$8/4 space to save exceptions
end