Menu

CD raw device reading

gho
2 days ago
15 hours ago
  • gho

    gho - 2 days ago

    Well, this started long ago, but so far almost every game that tried a direct access to the CD drive had its own crack, so it was not necessary to worry about it ...
    Now I got another old child game, actually a series of them, but I started with "Justine et la pierre de feu". I wanted to try running it with fake-CD to make a portable installation.
    The problem is again that the game tries to open "\\.\X:" where X is the drive letter and this means that it is trying to access the CD device in raw mode, bypassing the file system layer.
    The idea in short is to detect the path syntax and redirect the CreateFile call to a $RAWDISK file that holds at least part of the raw CD data. The file should be created once and for all by using a dedicated tool that reads the data from a properly mounted CD image.
    I hope the idea could be easily implemented and could work. This Justine game seems to read and test only the first 32768 bytes.

     

    Last edit: gho 2 days ago
  • gho

    gho - 2 days ago

    My mistake, the game reads 2048 bytes at seek position 32768, but not happy with that it keeps reading other chunks of 2048 bytes in other places. What's troublesome is that you can't read the whole CD device sequentially because it is divided in segments of 32768 bytes and to read it all you should keep seeking and reading up to the end.
    The thing is maybe not impossible, but it looks longer and more troublesome that mounting the CD image.

     
  • gho

    gho - 2 days ago

    Maybe the problem could be bypassed by simply pretending that all read operations didn't fail (I doubt the game could check for exact correspondence of every chunk ...) but it is not satisfied, it wants more!

    [00000:610] kernel32.DeviceIoControl: hdevice=0x22c code=0x24804() insize=1 outsize=0
    [00000:610] kernel32.DeviceIoControl: code {DeviceType=0x2(FILE_DEVICE_CD_ROM) Function=0x201 Method=0(METHOD_BUFFERED) Access=0x1(READ_ACCESS)}
    [00000:610] kernel32.DeviceIoControl: ERROR err=87
    
     
  • gho

    gho - 1 day ago

    It seems I picked a hard task. The game seems protected by some custom version of LaserLock 5.00 and it can't be easily cheated. Even LL32ICA.exe generic patcher doesn't work with it.
    The curious thing (for me) is that if I try to read data from the CD using the same calls that the game does, the read bytes seem different ...

     
    • huh

      huh - 18 hours ago

      I don't think you had the best luck choosing a game, you should have picked something simpler without such sophisticated protection. I might be wrong, but it seems to me that LL32ICA.exe acts more like a launcher than a patcher with version LaserLock 5.
      By the way, the English version of "Milo and the Magical Stones" probably doesn't have this protection.

       

      Last edit: huh 18 hours ago
  • gho

    gho - 15 hours ago

    Yes, the English version 0f the game "Milo and the magical stone" (curiously the game name is completely different in French) is not protected by LaserLock.
    Both "Milo and the magical stone" with fake-CD and "Justine et la pierre de feu" with a mounted CD have the same problem: they crash after a few seconds, But this is not related with the copy protection.

    Update: it is necessary to drop a copy of quicktime.qts in the game folder ...

     

    Last edit: gho 15 hours ago

Log in to post a comment.

MongoDB Logo MongoDB