![]() |
|
|||||||
| Register | >> Amiga FAQ/Wiki << | Rules & Help | Members List / Moderators List | Search | Today's Posts | Mark Forums Read |
![]() |
|
|
Thread Tools |
|
|
#1 |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Protection format names
I have a project (Amiga-Disk-Utilities on github) analysing disk dumps and converting to image formats such as IPF. Part of this of course involves implementing various track formats, and also naming them
Generally for data-track formats these end up being game or publisher specific. A few protection-track formats are used more widely, and it would be nice to know if they have proper names, or were given names by the cracker community.RNC Copylock is of course well known and easy, and I can at least pick out an RNC protection from its always cunning use of TVD and checksums. I'm not sure if the RNC protection that hides at the end of an AmigaDOS track has a particular name? I'm guessing not. Another common one is a very long (~110000 bits) track with sync 4454, and a check routine which does an unsynced disk DMA read and then bit-by-bit scan for successive instances of the sync word. I only discovered this is PROTEC because some game included a fragment of PROTEC source in its track data. ![]() Now, the one that started me off on this post is another common one, but apparently mostly specific to Gremlin releases. It lives on tracks 158 and 159, has sync 41244124, and is usually around 105000 bitcells. Again contains no data or key. Check routine does a synced disk DMA read and then a straightforward word-by-word scan for successive instances of the sync word. Apart from Gremlin releases, I have also found a variant on Strider II (Tiertex/US Gold) where the in-game check tests for a normal-length track! Does this track format or protection have a recognised name? It crops up so often that I think it must? That is all, for now. ![]() |
|
|
|
|
|
#2 | |
|
Going nowhere
Join Date: Oct 2001
Location: United Kingdom
Age: 39
Posts: 5,029
|
Quote:
RNC is the obvious one, there is also RNC PDOS which is Rob Northens Longtrack MFM system as used on later Virgin games like both Mortal Kombats and a lot of Team 17 games. The commonly used MFM at Gremlin is SSMFM which is Shaun Southern MFM, and was on lots of Gremlin games like Lotus 1, 2 and 3, plus virtually most MFM games you can think of. There is Speedlock which is on Dragon Breath and a few other games. Protec I think went through a couple of iterations before being abandoned, and that might well be the other variant you describe above. Ben Herndon HLS protection on one version of Sim City and lots of US games in the late 1980's. Lots of programmers put the protection name in the bootblock, but where crackers didn't know, it was generically named for normally sensible reasons. Also sometimes the protection name was used as a checksum string to check integrity of the MFM that had been read. Psygnosis' crappy MFM system was by Ian Hetherington if memory serves me right, used for its capacity not necessarily for its reliability! ![]() Factor 5 had their own MFM system, which was used on a couple of non Factor 5 games, but sort of done by mates of theirs. CyberDOS by Richard Aplin for Double Dragon 2. RLDOS by Randy Linden for the MFM protected Dragons Lair games and a couple of others by the same software company. Plus many more.
__________________
Former member of: LSD, Scoopex, Razor 1911, Dual Crew Shining, Rednex, Fairlight.www.southwestscrap.co.uk |
|
|
|
|
|
|
#3 |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Very useful, thanks!
Okay, so my 'Gremlin' format is in fact SS-MFM. The tracks 158-159 longtrack protection with sync 4124 was often coupled with that. Ian Hetherington's MFM format -- is that the not-really-MFM encoding we've been talking about in the SPS forum, used on Obitus et al? Psygnosis have a bunch of MFM formats and mix-and-match heavily on some titles, making a right mess. ![]() I have a dump of Dragons Breath so Speedlock will be on my plate soon ![]() |
|
|
|
|
|
#4 |
|
Registered User
Join Date: May 2004
Location: Somewhere secret
Age: 39
Posts: 175
|
There is also "Game Exec OS" which can be found on quite a few Starbyte-published titles (look for "CHW!" everywhere!) and the various Jochen Hippel formats used on Thalion titles - these are 2 used on multiple titles that spring to mind!
On the Atari ST, the Gremlin track 79 protection was called "Protoscan" - I have vague memories that this name came from similar circumstances as your "PROTEC" find (fragments of the programmers mem on the disk, or similar mistake). |
|
|
|
|
|
#5 | |
|
move.l #$c0ff33,throat
Join Date: Dec 2005
Location: Berlin/Joymoney
Posts: 4,547
|
Quote:
He also coded and protected the Linel games Dugger and Crack (heh ).
__________________
Makes me sick when I hear all the shit that you say So much crap coming out, it must take you all day There's a space kept in hell with your name on the seat With a spike in the chair just to make it complete |
|
|
|
|
|
|
#6 |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Great stuff. This is what I'm looking for!
![]() |
|
|
|
|
|
#7 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
And a skanky decrypter that relies on the 68000 prefetch behaviour... Was preparing to spend some tedious time dealing with that when someone pointed out that UAE has a cycle-accurate CPU emulation option, *disabled* by default. I'm saved! |
|
|
|
|
|
|
#8 |
|
move.l #$c0ff33,throat
Join Date: Dec 2005
Location: Berlin/Joymoney
Posts: 4,547
|
In the game Treasure Trap you'll also find TVD's not by Rob Northen (4 if memory serves me right). They are much more basic than late Rob Northen versions and rather easy to defeat.
Decrypters that relied on the 68000 prefetch behavior weren't uncommon either, Herndon HLS by Ben Herndon is one protection which used stuff like this.
__________________
Makes me sick when I hear all the shit that you say So much crap coming out, it must take you all day There's a space kept in hell with your name on the seat With a spike in the chair just to make it complete |
|
|
|
|
|
#9 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
I'm happy now I have UAE emulating them correctly. I only use my own emulator for disassembling TVD-protected routines, which can't really be doing prefetch tricks. ![]() I will take a look at Treasure Trap, thanks! |
|
|
|
|
|
|
#10 |
|
move.l #$c0ff33,throat
Join Date: Dec 2005
Location: Berlin/Joymoney
Posts: 4,547
|
Of course not.
Quite often the protections were the reason that the game would only work on 68000 machines. Once the protection layer was removed lots of games worked without any problems on 68020+ machines. Even some demos were protected ("Voyage" by Razor 1911 springs to mind) in such a way that they would only run on 68000. If you want to have some fun try to understand Voyage's bootloader, I totally love the code there. ![]()
__________________
Makes me sick when I hear all the shit that you say So much crap coming out, it must take you all day There's a space kept in hell with your name on the seat With a spike in the chair just to make it complete |
|
|
|
|
|
#11 | |
|
Going nowhere
Join Date: Oct 2001
Location: United Kingdom
Age: 39
Posts: 5,029
|
Quote:
As for Voyage, I didn't totally love the code at all there ![]()
__________________
Former member of: LSD, Scoopex, Razor 1911, Dual Crew Shining, Rednex, Fairlight.www.southwestscrap.co.uk |
|
|
|
|
|
|
#12 | |
|
move.l #$c0ff33,throat
Join Date: Dec 2005
Location: Berlin/Joymoney
Posts: 4,547
|
Quote:
I do. It's very cute code. If you have an 68000 A500 at your disposal it's quite easy to defeat the encrypted boot loader. If you don't, well, then the real fun starts but it's not impossible either. ![]()
__________________
Makes me sick when I hear all the shit that you say So much crap coming out, it must take you all day There's a space kept in hell with your name on the seat With a spike in the chair just to make it complete |
|
|
|
|
|
|
#13 |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Lol, well the actual Speedlock routine does decryption with prefetch tricks before getting to the TVD bit. So I had to implement prefetch anyway.
And a totally bone-headed implementation of prefetch doesn't suffice since the decrypter relies on the interleaving of prefetch with execution of specific instructions. Two cases: ADD into the immediately following instruction, which is prefetched *before* ADD writes back; and MOVE into the second word of the next instruction, which is prefetched *after* MOVE writes its result. But now I have the guts of the Speedlock opened out. ![]() |
|
|
|
|
|
#14 |
|
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 38
Posts: 11,952
|
Prefetch and microcoded CPU = fun.
Only MOVEs have some annoying special cases. Most other instructions prefetch after writes. But because prefetch is two stage, previous instruction will prefetch next word from address +4 (word after next instruction's opcode) which makes single word instructions (no extension words) to look like they prefetch before write when actually it was previous instruction that did the prefetch! Most common MOVE exceptions are: MOVE x,-(An) = prefetch before write MOVE.L address,address = prefetch twice after writes. (Probably getting a bit off topic) btw, demo Purple by Warfalcons has also interesting boot block protection because it isn't too obvious what it actually does and how it works. (It probably is too easy to bypass without caring at all how it worked but thats not the point) |
|
|
|
|
|
#15 | ||
|
move.l #$c0ff33,throat
Join Date: Dec 2005
Location: Berlin/Joymoney
Posts: 4,547
|
Quote:
Quote:
Voyage's boot code is the most interesting I've seen so far. Using CIA interrupts and changing registers there to calculate the key for the TVD and stuff. Quite nice. ![]()
__________________
Makes me sick when I hear all the shit that you say So much crap coming out, it must take you all day There's a space kept in hell with your name on the seat With a spike in the chair just to make it complete |
||
|
|
|
|
|
#16 | |
|
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 38
Posts: 11,952
|
I didn't mean the encryption, I did mean explaining how that strange jump to invalid address is supposed to work.
Quote:
![]() |
|
|
|
|
|
|
#17 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
![]() EDIT: Here's an example from Dragon's Breath Speedlock routine: Code:
# a1 = 261e6; d2 = ed8916fe 000261e4 d591 add.l d2,(a1) 000261e6 2602 move.l d2,d3 000261e8 b981 eor.l d4,d1 Last edited by kaffer; 17 July 2012 at 15:04. |
|
|
|
|
|
|
#18 | |
|
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 38
Posts: 11,952
|
Quote:
Single word instruction will always prefetch 1 word (move.l (ax),(ay) for example). Length of instruction (in words) always equals number of prefetches. Instructions that do 2 cycle prefetch don't actually do any extra prefetch cycles, one prefetch cycle is simply done after write which normally would have been executed before write. (Made microcode more optimal that way) "Position" of prefetch cycle(s) is the important part (before or after write), not number of prefetches. |
|
|
|
|
|
|
#19 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
In the above Speedlock example, if I changed the modifying instruction to the multi-word "addi.l #ed8916fe,(a1)" I would expect behaviour to not change (next two instruction execute non-modified opcodes). That is what the document suggests, but I think your argument would say that at least the second following instruction would execute the modified junk opcode? EDIT: And I think you misunderstood my previous post, because I was unclear. What I meant was that "most r-m-w instructions will have the first 2 words of the next instruction(s) in the prefetch queue before writeback, regardless of the instruction length". Not necessarily that it is the r-m-w instruction that does both prefetches. |
|
|
|
|
|
|
#20 | |
|
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 38
Posts: 11,952
|
Quote:
Other instructions (mostly) don't have these kinds of exceptions. btw, reason for above can be seen in one Motorola patent's (slightly unreadable) microcode listing, big part of microcode is only used by different MOVE variants but most other instructions use common code for source and destination address calculation. I guess we can agree after all ![]() |
|
|
|
|
|
|
#21 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
![]() And, for all the encryption fortification, the Speedlock disk routine is kind of lame. ![]() |
|
|
|
|
|
|
#22 |
|
Going nowhere
Join Date: Oct 2001
Location: United Kingdom
Age: 39
Posts: 5,029
|
Isn't it just? The actual end result of the Speedlock is less technical than Copylock, although the track format for Speedlock is actually stronger at being copy resistant than Copylock.
__________________
Former member of: LSD, Scoopex, Razor 1911, Dual Crew Shining, Rednex, Fairlight.www.southwestscrap.co.uk |
|
|
|
|
|
#23 |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
That's interesting. I mean, it seems logical that it might be more resistant, as the long/short bitcells are longer/shorter than in Copylock (+/-10% rather than ~5%) and the long/short sections are much smaller, and back-to-back. But I wonder are there really any copiers that could copy a Copylock but not a Speedlock? For example, X-Copy/Cyclone with dongle, I assume it just routes the data signal of the internal drive through to the write-data signal of the external drive, and will dumbly duplicate bitcells of any width, within reason (plus I assume pulse-modulation motor tricks to sync index signals, and some smarts to put the write splice in a safe place). That kind of scheme would probably duplicate any kind of non-uniform track pretty accurately, within reason (anything the Amiga disk controller would tolerate to read)?
|
|
|
|
|
|
#24 | |
|
Going nowhere
Join Date: Oct 2001
Location: United Kingdom
Age: 39
Posts: 5,029
|
Quote:
I'm not aware that Cyclone could successfully copy Speedlock though, but the end result is, Speedlock wasn't as well protected with code as Copylock was, and the actual results returned from the TVD part of Speedlock was pretty limited in comparison to Copylock, so Speedlock as a protection to crack was invariably easier than Copylock (not that Copylock was tricky, but was capable of having extra stuff hidden that Speedlock simply didn't ever try).
__________________
Former member of: LSD, Scoopex, Razor 1911, Dual Crew Shining, Rednex, Fairlight.www.southwestscrap.co.uk |
|
|
|
|
|
|
#25 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
![]() And now I'm looking at Dungeon Master. Did all the protected versions of this title use weak/flaky bits? Cos I haven't found the clever bit of the protection routine yet, which actually checks something that would be uncopyable. But then the game seems to be written in C or somesuch, as the code is totally barking, so following the flow is no fun. |
|
|
|
|
|
|
#26 | |
|
Going nowhere
Join Date: Oct 2001
Location: United Kingdom
Age: 39
Posts: 5,029
|
Quote:
The Psygnosis re-release didn't use that protection as far as i'm aware, but all the original early releases from FTL did.
__________________
Former member of: LSD, Scoopex, Razor 1911, Dual Crew Shining, Rednex, Fairlight.www.southwestscrap.co.uk |
|
|
|
|
|
|
#27 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
|
|
|
|
|
|
|
#28 |
|
SPS Nose
Join Date: Nov 2008
Location: Hawk's Creek
Age: 37
Posts: 1,142
|
You might want to check the graphs further down this page:
http://softpres.org/kryoflux:ui:stream-plot |
|
|
|
|
|
#29 | |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Quote:
Hence I'll start by producing a track that passes the minimal checks I can see, and find out what breaks next. I already had preliminary IBM format support so I'm just fleshing that out. It's a nice change and quite different from Amiga track formats. Interesting how the track format design is affected by the features of the FDC. |
|
|
|
|
|
|
#30 | ||
|
move.l #$c0ff33,throat
Join Date: Dec 2005
Location: Berlin/Joymoney
Posts: 4,547
|
Quote:
Yeah, but I like the idea behind the code. Must've taken ages to test/develop as it relied on exact instruction/interrupt timing. And it was a good way to defeat any debuggers/cartridges. The actual TVD was rather simple indeed (once you had the correct key that is).Quote:
__________________
Makes me sick when I hear all the shit that you say So much crap coming out, it must take you all day There's a space kept in hell with your name on the seat With a spike in the chair just to make it complete |
||
|
|
|
|
|
#32 |
|
Registered User
Join Date: May 2011
Location: Cambridge
Posts: 86
|
Well, I had fun learning about Dungeon Master's particular flavour of weak bits, and updated my flux decoder to support more authentic emulation of an FDC's PLL, which the protection relies on. But I need to wait for an extension to the IPF format to be able to represent the weak bits.
I suppose there had to be a good reason there's no official IPF with this long-understood protection.Still it was worth it to find out a bit about the different kinds of weak data that can exist. It's pretty interesting. |
|
|
|
|
|
#33 |
|
SPS Nose
Join Date: Nov 2008
Location: Hawk's Creek
Age: 37
Posts: 1,142
|
Yes, like those 4 Psygnosis titles... needs different transport layer which can store the "sliding" timings.
![]() |
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Where did your users names come from? | Freakyweakywoo | Nostalgia & memories | 300 | 22 December 2012 05:54 |
| 10 brand names gone but not forgotten | AmigaWorld | Nostalgia & memories | 6 | 05 September 2011 23:14 |
| Partition Names? | Tempest 2084 | support.Hardware | 7 | 15 May 2009 08:16 |
| What the hell were those names? | nemazoty | request.Demos | 3 | 02 December 2004 13:10 |
| Computers and their names | Akira | Nostalgia & memories | 55 | 03 October 2001 00:40 |