home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / GXY-INF.LHA / infos / crack.doc < prev    next >
Encoding:
Text File  |  1996-03-09  |  22.3 KB  |  547 lines

  1. =========================================================================
  2. Newsgroups: comp.sys.amiga.programmer
  3. Path: cunyvm!ukma!darwin.sura.net!mips!mips!munnari.oz.au!newsroom.utas.edu.au!<>
  4. From: <> (<>)
  5. Subject: How to crack an Amiga game!!
  6. Message-ID: <1992Jun26.054738.20843@newsroom.utas.edu.au>
  7. Sender: news@newsroom.utas.edu.au
  8. Organization: <>
  9. Date: Fri, 26 Jun 1992 05:47:38 GMT
  10. Lines: 200
  11.  
  12. So, some of you guys would like to know how to go about cracking
  13. games hey??
  14.  
  15. Well, here's how you do it!
  16.  
  17. The first place to start is always the bootsector! The bootsector is
  18. so small that most games don't bother having any protection at all there.
  19.  
  20. Generally (on professional productions) the bootsector will be a
  21. 1k long raw-tracks loader....not dos standard of course.
  22.  
  23. ..so simply rip the bootsector off and disassemble it. If your lucky
  24. (for some nice easy work) it will only kill the DMA,INTS, etc.etc, colours
  25. and set up the stack real low. then it usually copies itself just up
  26. above the stack, (it doesn't need to be position-dependant any more if
  27. it's been previously relocated) and will load some tracks.
  28.  
  29. Disassenble the bootcode = 30 seconds work
  30.  
  31. If you're good enough, you won't have to even look at the routine for
  32. more than a minute to figure out where the tracks are loaded too, and how
  33. much... Now assemble the bootcode, and stick in a mouse-wait at the
  34. top. OK....run ... Now hit the button on your cartridge (of course!..
  35. why do things tha hard way?) and set a breakpoint at the place
  36. where the loader will terminate and jump into the loaded tracks..
  37.  
  38. Now save out the loaded tracks to disk and get ready for stage two..
  39.  
  40.  
  41. Stage two starts to become more fun! You've got two more options from
  42. here... either there will be another sub-loader, or this will be the
  43. main loading routine.
  44.  
  45. If it's ther former, you're in for some fun over the next day or 2!
  46. What will of course occur, is they will try to kill yer cartridge, lose
  47. you in the code, generally put all those great obsticles in the
  48. way... The same kind of general guidelines will apply from now on, so
  49. here they come..
  50.  
  51. a) always go from one step to another from an assembled file, ie have a
  52.    binary file, incbin it, and emulate all of the conditions that have
  53.     been se up to that point
  54. c) at all times make sure that the game will work correctly from
  55. your assembled file! lotsa games are paticularly good at making
  56. hidden/latent protection bugs which will multiply.
  57.  
  58. c) Always make sure that the game will run with your cartridge in, as
  59. it will save alot of work..
  60.  
  61. d) Watch out for the cool trick of leaving the stack pointing into the
  62. middle of some crucial data (it's obvious when you know what to look for
  63. cuz no interrupts will be used conspicuously)
  64. .cuz when you press your button, the data will get correpted = messy
  65. if the data was packed and in the middle of de-packing
  66.  
  67. e) The standard trick is the trace-vector-decoder
  68.  
  69. REMEMBER THIS NAME!!!!!!
  70.  
  71. What will happen here is that the trace routine to be executed will be
  72. pushed onto the stack, and the trace-vector will be pointed to it....
  73. you will se a load of shit just in front of the PC, and the last
  74. command will be a move to the SR to kick off the trace....
  75.  
  76. [erm, for new guys..what happens is that the trace vector code is
  77. executed after each instruction, and after the current instruction,
  78. the trace vector decodes what the next instruction will be...]
  79. [ thus all you see in front of the PC is garbage]
  80.  
  81. So you want to know the best way to get around this??
  82. Easy! rule .1 is Know the length! Write a routine which counts from 0 to
  83. whatever, and chuck this at the end of the trace (in place of the rte
  84. put a jump to your code - watch out for the trace taking checksums of the
  85. trace it'self and the area below the stack!!
  86. Loacte the screen address if it's being displayed, and youe can get
  87. your 'counter' to show you the number of repetitions of the trace...
  88. [by printing the current number of reps to the screen]
  89.  
  90. Small ones are a piece of piss, longer ones like the ones on Gods/Magic
  91. Pockets are harder, but really fun eh!?
  92. [well over 270 reps if I remember]
  93.  
  94. Of course any good TVDecoder will kill yer cartridge on it's way through..
  95. .. anyway... find out what it does....finding out the effects is always
  96. really importaant...I'm too lazy to write more...
  97.  
  98. TVDecoders will be used to encrypt the disk-loaders, encrypt packers,
  99. hide some sneack checksum routine...etc.etc...
  100.  
  101. f) Packers are always a gimme. After a while, you'll know your packers like
  102. back of your cock, er...hand..! Most of them are junk/repeats anyway, and
  103. always easy to find where the files go to...
  104.  
  105. g) Futher disk loaders are always fun. The guy has got all this memory
  106. to try to confuse you, but if he can understand it, so can you...
  107.  
  108. h) I'm getting bored of all of this .... you've gotta learn all the
  109. tricks yourself!... it's the only way. A helpful tip is look out for
  110. interrupts!. Watch what will happen to the stack when you press your
  111. cartridge.. and MOST IMPORTANTLY
  112. NEVER GO TO THE NEXT STAGE OF THE ROTECTION IF YOU CAN'T RUN IT FROM
  113. YOUR ASSEMBLER AND GET IT RUNNING WITH THE ORIGINAL DISK IN THE DRIVE
  114.  
  115.  
  116. hehe I nearly forgot...here's a neat trick for all you
  117. learning crackers, what do you think this code does??
  118.  
  119.        move.w #$4e71,pokeme        (this is a 'nop' for guys who don't
  120. pokeme  bra.s  red                    memorise  the opcode)
  121.        bra.s  green
  122.  
  123. red    move.w #$f,$dff180
  124.        bra.s  red
  125. green  move.w #$f0,$dff180
  126.        bra.s  green
  127.  
  128. hint - you get a green screen!!!!
  129.  
  130. .Look, this is the type of 68000 trick that the other guy will try to
  131. put over your head. This type of thing is boring to a pro, but don't
  132. become frustrated, you have the rest of your life to work it out!
  133. ..you'll figure out all the tricks sooner or later...
  134.  
  135.  
  136.  
  137.  
  138. OK,OK, so you've got to the main program - ALL games will have a main
  139. program of some sort or another!
  140. Right, the aim here is to gradually alter the loaders until none
  141. of the originals are used!
  142.  
  143. So this is the setup... You've got your main prg as a binary file, say
  144. starting at $400, stack below $400 and you've got all the contents of
  145. all hardware etc registers set up before you start.
  146.  
  147. If the file is big, pack it, as it wil save time in the long-run..get another
  148. amiga with loads of memory just for packing!
  149.  
  150. ..this is what your 'CRACK-SHELL' will look like,
  151.  
  152. -kill dma, ints etc, supervisor mode (I use the division by 0 method..)
  153. -depack main prg to $400
  154. -set stack, all registers.... CIA are important to set up too!
  155.  (this is a mistake of beginners too...)
  156.  (also use the SR! - alot of Amiga guys leave it alone..)
  157. -Wait mouse..
  158.  
  159. OK assemble,..RUN, put original into drive and press mouse...
  160. (the game will run normally as if nothing has happened)
  161.  
  162. This is the basic shell from which alot of crackers work!
  163. Now, you've gotta pick up the files if it's a multi-load
  164. (they all are nowadays...but in the old days....*sigh*)
  165.  
  166. OK, the idea is to figure out the loaders, rip them off and get the
  167. files... when you first see the disk-code(its LONG!) you think *?what?* ...
  168. ..I'm not doing that every time!
  169.  
  170.  
  171. Relax, you've gotta serve your apprenticeship and become familiar
  172. with the routines. After a wile you'll be able to pick out the
  173. head-stepers, drive-selecters, decoder, etc and it'ss be easy to
  174. work out what's going on. (just like packers,they become a help rather
  175. than a hinderence... there are only a limited number of ways to do
  176. the loading!)
  177. Now, pick off all the files...it helps to make the trainer at this
  178. time so that you can cheat and collect all of your files the easy way
  179. OR you can pick up the loading data - THER'E'S ALWAYS LOADING DATA!
  180. (ie from 'block/track... to block/track etc..) and disassemble
  181. the relevant parts of the loading routines and use his routines to
  182. load his files...
  183.  
  184. OK, you've got them, this is where all your meg's come in handy!.
  185.  
  186. Get the files packing on your other Amiga for a few hours, and try to
  187. pick the disk-protection...
  188. of course watch out for the obligatory checksum/ etc routine(s) to
  189. make sure that code within the game...specifically the loaders
  190. aren't tampered with...
  191.  
  192. OK, the files are packed (shit! that was a long-wait if it was a two-disk
  193. game!) ... OK
  194.  
  195. You must code a routine which merges all of the small packed files
  196. into a 'BIGCRUNCH' as I call it... This BIGCRUNCHER will put all of the
  197. packed files into 1 single large file and save this file out PLUS
  198. a list of all of the offsets of the individual files in the big file.
  199.  
  200. OK,OK...You're ready to go.. Include the BIGCRUNCH into your assembler
  201. CRACKSHELL ... incbin... Right include some code to copy the
  202. bigcrunch to say $c00000 if it';s not used. The aim here is to run the
  203. file and get the file-loader routines replaced with your de-packer
  204. routine!!!
  205. ie..instead of loading from disk, all the files will be depacked
  206. down from the high-ram into their proper places (YEAH! MOVE.W $DFF006,$DFF180)
  207.  Thus you get a 1-meg game, and the drive will only spin
  208. when the copy-protection is working..
  209.  
  210. .
  211. ,
  212. =========================================================================
  213. Newsgroups: comp.sys.amiga.programmer
  214. Path: cunyvm!caen!sdd.hp.com!mips!mips!munnari.oz.au!newsroom.utas.edu.au!<>
  215. From: <> (<>)
  216. Subject: How to crack and Amiga game2!!
  217. Message-ID: <1992Jun27.044730.14869@newsroom.utas.edu.au>
  218. Sender: news@newsroom.utas.edu.au
  219. Organization: <>
  220. Date: Sat, 27 Jun 1992 04:47:30 GMT
  221. Lines: 52
  222.  
  223. Shit! The end of that article was cut off!! OK,OK, I was tired anyway
  224. after not going to be for 3 days cuz of exams....
  225.  
  226. 1st that example was wrong:
  227. ---------------------------
  228. ; Assemble this!
  229.         move.w  #$4e71,pokeme
  230. pokeme  bra.s   green
  231.         bra.s   red
  232.  
  233. green   move.w  #$f0,$dff180
  234.         bra.s   green
  235. red     move.w  #$f00,$dff180
  236.         bra.s   red
  237.  
  238. ---------------------------
  239.  
  240. The green branch is taken anyway, despite the previous line nop'ing it.
  241. (assemble just that and try it)
  242.  
  243. Anyway, that wasn't the fu*&in' point! The point is that these are the
  244. types of coding tricks that the other guy will use to try to trick
  245. you!!!
  246. To a pro, these tricks are easy, but to a new guy, they are tuff!!
  247. The article I wrote yesterday was about 4 times longer than the
  248. one which you recieved!..and I actually did tell you the whole method
  249. that many crackers use jamm the games!!!!!!!!!!!!!!!!! I don't know
  250. why the end of it was cut off, but I'll type it in again now!!!!!!!!!!!
  251. I can't be bothered typing out the rest of the hints which were cut
  252. off, I'll get down to the main part..
  253.  
  254. I said that what will happen is that the other guy will try to lose you in
  255. the code, but you must follow that PC until you get to the main program
  256. (there's ALWAYS a main program!!!!!!!!!!)
  257. Save the main program out to disk (sometimes 1 file, sometimes lots)
  258. and then get into your assembler and get out your CRACKSHELL and put in
  259. the code which will emlate the conditions of the machine which will
  260. allow you to run the game from the assembler..
  261.  
  262. The crackshell will do this:
  263. - kill dma,interrupts,
  264. - copy the bits of the game to their usual positions
  265. - waitmouse
  266. - set up the status of the machine which will alow the binary to run
  267.   (eg, SR,hardware re'gs, vectors, registers, cia ... EVERYTHING!!!!!)
  268.  
  269. What you should be able to do is to assemble the crackshell and run it,
  270. (the machine will be killed - insert the game disk(s))
  271. now press the mouse button, and the game will run normally!!!!!!
  272.  
  273. I'm doing this in parts this time, goto news #3!!!!!!!
  274.  
  275. =========================================================================
  276. Newsgroups: comp.sys.amiga.programmer
  277. Path: cunyvm!caen!sdd.hp.com!mips!mips!munnari.oz.au!newsroom.utas.edu.au!<>
  278. From: <> (<>)
  279. Subject: How to crack an Amiga game #3!!
  280. Message-ID: <1992Jun27.051137.15404@newsroom.utas.edu.au>
  281. Sender: news@newsroom.utas.edu.au
  282. Organization: <>
  283. Date: Sat, 27 Jun 1992 05:11:37 GMT
  284. Lines: 66
  285.  
  286. OK, as was in the original posting, you've gotta now collect the extra
  287. files!!!!!!!!!!
  288.  
  289. look at the code to find the routines which load the files!
  290. eg MOVEQ  #1,d0         ; file number...the load routine will use it
  291.    LEA    $60000,A0     ;dest address of the file
  292.    JSR     Load
  293.  
  294. There are two ways to collect the files
  295. 1. train the game, and play right through to the end, collecting the
  296. files with your cartridge as they load in
  297.  
  298. OR
  299. 2. rip-off the loaders and decrunchers and use the other guy's own
  300. routines to get his files!! You must get his 'file info' if you
  301. want to do this!!!
  302. Write a program which accepts the inputs, and uses his routines
  303. eg...
  304. - get start block, end block
  305. - kill system and load the files using the original routines
  306.   (don't to insert the original disk first)
  307. - depack them with his routines if necessary
  308. - restore system and save the files to your own disk
  309.  
  310. Right, you've got the files, now pack them with your disk packer and
  311. take a break!!!!!
  312.  
  313. OK, run the files through your BIGCRUNCHER as I described, and you will
  314. get two things out of it:1. a file which contains all of the packed
  315. files and 2. the data which says where the start of each file is within
  316. the bigcrunched file!!
  317.  
  318. now, set up your CRACKSHELL so that the BIGCRUNCH will be copied up
  319. to some spare ram...eg $c00000 if it's not used..
  320.  
  321. Now you've gotta alter the main game program so that your routines will
  322. be executed instead of the original loaders. The routine that you
  323. will write will take the same inputs as the main game supplies, and
  324. has the same effect as the original routines.
  325. Assemble this program to disk, relocate it to say, $d00000, with
  326. your relocator utility
  327. (HEY! I'm gonna post the code for this tomorrow!!!!!)
  328.  
  329. Now, you've gotta change your CRACKSHELL so that it does this:
  330. 1. kills the system
  331. 2. copies the main-game file to it's original position
  332. 3. copies the BIGCRUNCH (ie all of the extra files - packed) to say $C00000
  333. 4. copies your loader-emulator to say $d00000
  334. 5. set up the initial conditions, as before
  335. 6. POKE THE MAIN GAME FILE SO THAT IT EXECUTES YOUR ROUTINE AT $D00000
  336.  
  337. Number 6 is the most important new one. Say the original used to
  338. do this:
  339. moveq #1,d0 ; file number
  340. lea    $60000,a0 ; dest address
  341. jsr    $1004     ;load routine
  342.  
  343. then at $1004 you must do this: JMP $d00000 !!!!!!!!!!!!
  344.  
  345. Thus, your routine will be executed instead of the original file-loader
  346. and the result will be that the files are still put into there
  347. required positions by your depacker routine, and the RTS at the end
  348. will continue the game on as if nothing had ever happened!!!!!
  349. (alot of games need eg. registers ro be returned with values)
  350.  
  351. goto article #4!!!!!!!!
  352. =========================================================================
  353. Newsgroups: comp.sys.amiga.programmer
  354. Path: cunyvm!caen!sdd.hp.com!mips!mips!munnari.oz.au!newsroom.utas.edu.au!<>
  355. From: <> (<>)
  356. Subject: How to crack and Amiga game4!!
  357. Message-ID: <1992Jun27.054304.15938@newsroom.utas.edu.au>
  358. Sender: news@newsroom.utas.edu.au
  359. Organization: <>
  360. Date: Sat, 27 Jun 1992 05:43:04 GMT
  361. Lines: 71
  362.  
  363. Now, the tuff part about replacing the loader routine with your one
  364. at $d00000 is that the original loader will usually leave some
  365. kind of message that it's been executed, and mostly there is some
  366. disk protection in the loader code!!!! This is where I'm becomming
  367. bored of typing all this info in, so I'll give you some general
  368. guidelines here!!!!!!!!
  369.  
  370. 1. watch out for interrupt routines!!!! they might be checking things!
  371. 2. find out the total effect of the loader routine, emulate it
  372. 3. the protection might even involve setting a CIA register
  373.    a certain way!!! I've seen this one before!!!
  374. 4. an equally good way of beating the routines is to
  375.    find out the routine which detects if the loader has been run
  376.  
  377. The number of tricks which can be used here is many, you must learn
  378. to overcome these yourself!!!
  379.  
  380.  
  381. OK, now you will have a completely 1-meg game!!
  382. You can assemble the CRACKSHELL and run it, and the only time that
  383. the disk will spin is when the disk protection in working!!!!!!!
  384.  
  385. NEXT STEP IS TO BUST THE DISK PROTECTION ROUTINES
  386.  
  387. When you think about it, then only real way to protect a game is to
  388. check for something which is hard to copy. like a dongle, or a disk
  389.  
  390. Thus, you have to have a routine sitting in memory to be able to
  391. do this checking, and this is the vulnerable part! All you have
  392. to do is remove this rouine at this point and you've got the game
  393. cracked (as we have the files already).. easy, no?
  394.  
  395. NO!!!!!!!!!!!!!!!!!!!!!!!!!!!
  396.  
  397. This is where most of the action is!!!! Most of the effort will go into
  398. protecting this routine from removal, and not the routine itself!!!
  399.  
  400. This is where you will win or lose! This routine may be encrypted
  401. with a trace vector decoder, or there may be checks to make sure that
  402. this routine is run, it will pass some values back to the main game
  403. routines probably, there will be other routines to check that this
  404. routine is not removed. The list of methods is many!
  405.  
  406. I'd like to make some points here...
  407. 1. I wrote alot about this in the 1st artice I posted, but this part
  408. was cut off...and I can't be bothered typing this stuff in again
  409. (unless you post yourself and demand it!)
  410.  
  411. 2. For the sake of simplicity, I didn't really mention that that the
  412. file loader (which we earlier bypassed) will be very heavily protected
  413. like the copy protection routines
  414. .Very often there is no separate copy prot routine, just a hugely
  415. fotified file-loader...
  416.  
  417. 3. In the majority of cases, the protection code will not be seen
  418. by the porgrammer himself..
  419. eg. early Rob Northern.. He will get 2 files. 1 will put the protection on
  420. the disk, the other will be incbin'ed into the game, and be jsr'ed,
  421. ..the result returned in the trace vector
  422. Thus your job will be easier in this case, as the protection is
  423. 'modular' if you can understand that expression
  424.  
  425.  
  426. As I'm not going to give you specific details of the types of things
  427. that can trick you here, I will simply give you the aim of all this!
  428.  
  429. The aim is to get to the stage where the original disk is no longer
  430. accessed!!!!!!!!!!! Thus all of the extra files will be depacked from
  431. the extra-mem and the game will work as normal!
  432.  
  433. (goto article #5!!!!!!!!!)
  434. =========================================================================
  435. Newsgroups: comp.sys.amiga.programmer
  436. Path: cunyvm!caen!sdd.hp.com!mips!mips!munnari.oz.au!newsroom.utas.edu.au!<>
  437. From: <> (<>)
  438. Subject: How to crack and Amiga game5!!
  439. Message-ID: <1992Jun27.062424.16809@newsroom.utas.edu.au>
  440. Sender: news@newsroom.utas.edu.au
  441. Organization: <>
  442. Date: Sat, 27 Jun 1992 06:24:24 GMT
  443. Lines: 102
  444.  
  445. Right, so You can run the game without the original disk! Yeah! You're
  446. nearly there!!
  447.  
  448. THE SECOND LAST STEP IS TO NOW INSERT YOUR OWN DISK LOADERS
  449.  
  450. As a cracker you'll probably have a collection of diskloaders!
  451. Some like to use raw tracks, others like to use file-loaders
  452.  
  453. I'm a file loader freak!! The file loader will be a standard routine
  454. which only needs the name of the file to be defined, the destination
  455. address and the address where you can do DMA too
  456.  
  457. The file loader must be very nice to the game! ..not using anything
  458. or changing anything...so these are the rules
  459.  
  460. 1. decode the sectors into the same area that you do DMA to
  461. 2. Don't touch anything other than the necessary registers...
  462.    eg. the game shouldn't be able to see your loader!..use DBF
  463.    timing loops for waiting, use the 68000 to decode (though you can
  464.    try using the blitter if the original used it..)...etc.etc
  465. 3. make sure all registers etc are returned as the original did
  466.  
  467. *4.If you are a really cool guy, you will want to use the trick of
  468.    loading the files into there dest. positions and depacking them
  469.    back over themselves - make sure you put depack striped in there
  470.    to show how cool you are!!
  471.  
  472. Many games use file names, and a pointer to the file name itself will be
  473. given...in which case, just use the original name. Otherwise, a number
  474. will be given...let me explain.
  475.  
  476. this will be the code in the original game
  477.       moveq #1,d0
  478.       lea   $60000,a0
  479.       (might also pass the DMS address here if it moves)
  480.       JSR   loadit
  481.  
  482. and in the original, there will be an array of 'file info'
  483.  
  484. (this is looking at memory..)
  485. eg. $0016,$009f       file 0 goes from 'block' 22 to $9f
  486.     $0100,$0106       file 1 goes from 'block' $100 to $106
  487.     $0107,$0110       etc
  488. thus, the original loader would do this:
  489.     add.w   d0,d0
  490.     add.w   d0,d0     ...now
  491.     lea     data,a1
  492.     add.w   d0,a1
  493.     now get the data
  494.  
  495. (another common fileinfo format is start-block,length of file)
  496.  
  497. We don't need to bother about this, as we have files on the disk! The
  498. solution os to use the value in D0 as the filename on the disk
  499.  
  500. eg. If d0 = 1, then the name of the file is '$0001' on the disk
  501. This is easy to do!!!!!!! Just at the beginning of your file-loader
  502. make a small routine that constructs the name, then take it's hash as
  503. normal, and load it
  504.  
  505. ** How many times have you seen cracks with file names like $0001, $0002??**
  506. ** look out for it in the future, and you'll know why!
  507.  
  508.  
  509. The next step will be to get rid of your big-crunch, and get the files
  510. loading in from disk... ie. Put your disk-loader at $d00000 instead
  511. of the depacker..
  512.  
  513. THEN comes the tricky part, you must find a place to copy your
  514. own loading code into the main game somewhere. The ideal way is to
  515. of course use the area where the original routine was sitting
  516. (watch out for routines that take checksums/check bytes in this
  517. area = good protection against this)
  518. .but this is not always possible..
  519. If you can't put your routine over the original, make sure you find some
  520. area which is DEFINATELY FREE (hehe not so easy hey!)..otherwise
  521. you'll have to release a one-meg game and you've been beaten...
  522. there are two factors here
  523.  +ve is that your disk-loader is really small anyway, only a few
  524.      small bytes (well under 2k anyway)
  525.  -ve is that many programmers purposefully try to eat up all of the
  526.      memory so that you can't fit your routines in there
  527. (I'd like to give Hybris as a bloody good example of this...)
  528.  
  529. OK..Thats it!! You have a main-file in the form of your CRACKSHELL which
  530. sets up the status of the machine and then jumps into the main file,
  531. which has been altered with your own loader, and the other protection
  532. busted out.
  533.  
  534. Put the extra-files onto the final disk! Now put your intro onto the
  535. front of the crack shell, make sure the game is coded to hell to
  536. stop lame crack-stealers from ripping you off, and yeah! nearly forgot..
  537. put your name into the high-score table!!!!!
  538.  
  539. OK,OK Now you've got a hot crack on your hands after those few days work,
  540. so spread the crap out of it, and start on the next one!!!!!!!!!!!!
  541. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  542.  
  543. Here are the lamer signatures!
  544. Don't be a dope, get high on cracking! - Jewels, '64
  545. Cracking is good for you! - The Replicants/Union Demo, ST
  546. I agree - You, Amiga
  547.