home *** CD-ROM | disk | FTP | other *** search
/ Supremacy 1 / Supremacy-1.iso / UTILS / !SERIAL / CRACKPRO.ZIP / CRAKROB4.S < prev    next >
Text File  |  1985-11-20  |  7KB  |  214 lines

  1. * Right...
  2. * I believe you wanted to know:
  3. * 1> HOW to crack it
  4. * 2> HOW I figured out how to crack it
  5. *
  6. * Answers...
  7. * 1> Run this program!!! Nah, alright then...
  8. * Now, Rob (the nice bloke) doesn't like MonST2 at all (you may have
  9. * noticed), so first thing he does is he checks all the system vectors,
  10. * e.g. TRAPs, anything important at all really... including GEM vectors
  11. * in the system variables area. So you have to crack the damn thing from
  12. * a fully automatic program that runs the protected program from within
  13. * itself WITHOUT taking over any vectors.
  14. * Now, Rob is not going to put himself out of a job by making the perfect
  15. * protection, so he leaves loopholes in for us to play with (ask Birdy,
  16. * he's mates with him!). Old loopholes included being able to Alt-Help into
  17. * the code, being able to reset and save memory, etc. The current ones are
  18. * that he doesn't check the keyboard interrupt or the HBL... Zippy (Medway)
  19. * uses a keyboard interrupt (not quite sure exactly HOW), but I use a far
  20. * superior method of sticking something in $120 which continually checks
  21. * a certain part of the protected program to see if it has decrypted or
  22. * not. If it hasn't, it continues normally. If it has changed (ie., it's
  23. * been decrypted, then I stop everything, restore the exceptions (because
  24. * Rob generally fucks them up), and from various things, figure out how big
  25. * the unencrypted file is, and then save it.
  26. *
  27. * 2> Now, how did I figure out how Rob's routines were working?
  28. * Bloody hell, talk about an awkward question! Well, as you can see from
  29. * the loopholes bit above, I've been zapping his protections for months, so
  30. * I've been following all his little upgrades from day 1. (Back in Copylock
  31. * version 1.0 days...) You should have noticed that he puts something in
  32. * the ILLEGAL and TRACE exceptions, and that's a major part of making any
  33. * monitor useless. He jumps in and out of these vectors all the time,
  34. * modifying his own code and re-encrypting it as he goes, so FORGET ABOUT
  35. * TRYING TO ACTUALLY SEE WHAT HIS CODE DOES. I knew how to find a way to
  36. * crack it by using the old method of... (big cracker secret coming up)...
  37. * TRIAL and ERROR!!!!!!!!!!!!!!!! !!!!!!!!! (and !!!!!!!!!!)
  38. * I tried every vector I could think of until I found one that his code
  39. * didn't take a dislike to, and then stuck with it. Then I fucked about for
  40. * two hours or so when I got the latest version of his protection, stopping
  41. * his code after different intervals, trying to find the perfect place at
  42. * which to stop it (which is AFTER decryption, but BEFORE relocation).
  43. * Then I experimented with the registers that I had at those points, seeing
  44. * where they pointed, fucking about with those... I eventually found the
  45. * right place to monitor to catch the program after decryption... but
  46. * unfortunately there doesn't seem to be a 100% safe way to catch it before
  47. * it relocates the decrypted executable file. My routine only does it 2 out
  48. * of 3 times, so if the file it produces is knackered, run it again!
  49. * I probably haven't explained that at all well, have I?? Well tough...
  50. * cracking is really 50 % trial and error, 49.9 % intelligent logical
  51. * deduction (Sherlock Holmes!), and .1 % Sherbet Lemons.
  52. * What else can I say???????
  53.  
  54. * When this routine manages to save out the file, complete with exec header
  55. * and relocation table, it sometimes fucks up in another way, by saving out
  56. * a prg that is already relocated. But seeing as you have the relocation
  57. * table intact, you can just derelocate it, can't ya?
  58.  
  59. *** ROB NORTHEN EXTERNAL PROTECTION CRACKER ***
  60. * For the new version as used in Castle Master
  61. * This is not perfect... it will run the program and save the decrypted
  62. * PRG onto drive B. Sometimes...
  63. * (And as soon as he updates his protection, this is useless!)
  64.  
  65. start    pea    (end-start)+256.w
  66.     pea    start-256(pc)
  67.     pea    $4a0000        reserve memory
  68.     trap    #1
  69.     lea    12(sp),sp
  70.  
  71.     lea    stack(pc),sp
  72.  
  73.     clr.l    -(sp)
  74.     move.w    #$20,-(sp)        supervisor
  75.     trap    #1
  76.  
  77.     pea    input(pc)
  78.     move.w    #9,-(sp)        input prompt
  79.     trap    #1
  80.     pea    filename(pc)
  81.     move.w    #9,-(sp)
  82.     trap    #1
  83.     pea    cursor(pc)
  84.     move.w    #9,-(sp)
  85.     trap    #1
  86.     lea    18(sp),sp
  87.  
  88.     pea    inputline(pc)
  89.     move.w    #$a,-(sp)        input filename
  90.     trap    #1
  91.     addq.l    #6,sp
  92.  
  93.     pea    envcom(pc)
  94.     move.l    (sp),-(sp)
  95.     pea    filename(pc)
  96.     pea    $4b0003        load and set up
  97.     trap    #1
  98.     lea    16(sp),sp
  99.     tst.l    d0
  100.     bmi.s    error
  101.  
  102.     move.l    d0,a0        basepage addr
  103.  
  104.     lea    12(a0),a0        to text len pointer
  105.     move.l    a0,compare+6        write addr of that
  106.     move.l    (a0),compare+2    write byte there
  107.  
  108.     lea    $8.w,a0        save all exception
  109.     lea    tex(pc),a1        vectors, interrupts,
  110.     move.w    #($200-$8)/2-1,d1    etc. etc.
  111. save    move.w    (a0)+,(a1)+
  112.     dbf    d1,save
  113.  
  114.     move.l    $114.w,oldtimerC+2    save old timer C
  115.     move.l    #mytimerC,$114.w    patch my timer C
  116.  
  117.     clr.l    -(sp)
  118.     move.l    d0,-(sp)
  119.     clr.l    -(sp)
  120.     pea    $4b0004        run rob's shit...
  121.     trap    #1
  122. ** never gets to here **
  123.  
  124. error    pea    text(pc)
  125.     move.w    #9,-(sp)        error message
  126.     trap    #1
  127.     move.w    #8,-(sp)        wait for key
  128.     trap    #1
  129.     addq.l    #8,sp
  130.     clr.w    -(sp)        bye!
  131.     trap    #1
  132.  
  133.  
  134.  
  135. mytimerC    eor.w    #$77,$ffff8240    muck up colors
  136.  
  137.     movem.l    d0-d7/a0-a6,-(sp)
  138. * these 00000000s are overwritten -- see above
  139. compare    cmp.l    #$00000000,$00000000    decrypted yet?
  140.     beq    notyet        no
  141.  
  142.     move.w    #$2700,sr        yes! kill interrupts
  143.     move.w    #$70,$ffff8240.w    green screen
  144.     lea    tex(pc),a0        restore exceptions etc.
  145.     lea    $8.w,a1
  146.     move.w    #($200-$8)/4-1,d0
  147. copy    move.l    (a0)+,(a1)+
  148.     dbf    d0,copy
  149.  
  150.     move.b    #7,$484.w        keyclick on (ok, maybe)
  151.  
  152.     clr.l    $426.w        kill rob's anti-reset
  153.     clr.l    $42a.w
  154.  
  155.     movem.l    (sp)+,d0-d7/a0-a6
  156.  
  157.     move.l    2(sp),a6        a6=text
  158.     lea    -256(a6),a6        a6=basepage
  159. * create an exec header
  160.     move.w    #$601a,228(a6)    exec header
  161.     move.l    12(a6),230(a6)    write text len
  162.     move.l    20(a6),234(a6)    write data len
  163.     move.l    28(a6),238(a6)    write bss len
  164.     lea    228(a6),a5
  165.     move.l    2(a5),d0
  166.     add.l    6(a5),d0
  167.     add.l    #32,d0
  168.     move.l    d0,len+2
  169.     clr.w    -(sp)
  170. * save using same filename to drive B
  171.     move.b    #'B',filename
  172.     pea    filename(pc)
  173.     move.w    #$3c,-(sp)
  174.     trap    #1
  175.     addq.l    #8,sp
  176.     pea    (a5)
  177. len    pea    0
  178.     move.w    d0,-(sP)
  179.     move.w    d0,d7
  180.     move.w    #$40,-(sp)
  181.     trap    #1
  182.     lea    12(sp),sp
  183.     move.w    d7,-(sp)
  184.     move.w    #$3e,-(sp)
  185.     trap    #1
  186.     addq.l    #4,sp
  187. * die now, because the system is probably shot to hell anyway
  188.     jmp    $fc0000
  189.  
  190. notyet    movem.l    (sp)+,d0-d7/a0-a6
  191. oldtimerC    jmp    0        do old timer C
  192.  
  193.  
  194.     data
  195.     ds.l    400
  196. stack    ds.l    1
  197. envcom    dc.w    0        null environment/command
  198.  
  199. text    dc.b    27,"E",7,"File not found. Hit it...",0
  200.  
  201. input    dc.b    27,"E",27,"e","CrakRob by The Alien.",13,10,10
  202.     dc.b    "Cracks Rob Northen's latest",13,10
  203.     dc.b    "external protection...",13,10,10
  204.     dc.b    "Program to crack? >",0
  205. cursor    dc.b    27,"e",27,"Y",37,51,0
  206.  
  207. inputline    dc.b    128        max 128 chars
  208.     dc.b    13        8 given chars
  209. filename    dc.b    "A:\HACK_V2.PRG"        default filename
  210.     bss
  211.     ds.b    120        128 chars buffer
  212.  
  213. tex    ds.l    $200-$8/4        space to save exceptions
  214. end