Hi, thx a lot. If I am not wrong it's pretty much the same process that we have discuss in PM... If not I would gladly try it...After long days, I am still stuck. It seems that my disk drive isn't flash-able...
Thank you to all the persons who tried to help me, I am grateful (even though I failed.
From what I checked personally, there are 2 possible copy protection mechanisms in use. One is the old DVD CSS. Newer copy protection uses deliberate bad sectors at the beginning of the disc (I think that this is a new unnamed copy protection). Most tools were designed to bypass CSS, it uses a weak form of LFSR (linear-feedback shift register) driven stream cipher, but they have trouble with new copy protection. New copy protection is actually easier to bypass, even simple Linux tools like "dd" and "cat" will suffice. With the new copy protection DVD disc consists of 3 areas:
By trial and error (using binary search) you should find first sector of area 3. Then combine (with "cat" for example): area 1 + NUL byte padding of length of unreadable area 2 + area 3. This way you should obtain an ISO file equivalent to your disc as if it didn't have deliberate errors during pressing process.
- Short initial readable area
- Short bad sector area, where most ripping tools fail, due to apparent read error
- Long area with proper files / directories data
I don't guarantee that this method will work as maybe now they invented a 3rd method as the previous 2 have long been cracked and exploited.
I can share an instruction with screenshots of how to rip, images + text might explain steps better than text above only
Hi, thx a lot. If I am not wrong it's pretty much the same process that we have discuss in PM... If not I would gladly try it...
#include <windows.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#define SECTOR_SIZE 2048
unsigned char buffer[SECTOR_SIZE];
__declspec(noreturn) void __stdcall start(void) {
int argc, bytesRead, totalKB = 0;
wchar_t **argv = CommandLineToArgvW(GetCommandLineW(), &argc);
char drivePath[8] = "\\\\.\\\0:";
void *hDVD;
_setmode(_fileno(stdout), _O_BINARY);
if (argc != 2) {
fprintf(stderr, "Usage: %ls <DVD Drive Letter>\n", argv[0]);
exit(1);
}
drivePath[4] = argv[1][0];
if ((hDVD = CreateFileA(drivePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Failed to open DVD-ROM drive. Error: %lu\n", GetLastError());
exit(2);
}
DeviceIoControl(hDVD, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, &bytesRead, NULL);
while (ReadFile(hDVD, buffer, SECTOR_SIZE, &bytesRead, NULL) && bytesRead > 0) {
totalKB += 2;
fwrite(buffer, 1, bytesRead, stdout);
if (totalKB % 1024 == 0) {
if (totalKB < 1024)
fprintf(stderr, "\rProcessed: %d kB", totalKB);
else if (totalKB < 1048576)
fprintf(stderr, "\rProcessed: %.2lf MB", totalKB / 1024.0);
else if (totalKB == 1048576)
fprintf(stderr, "\r \rProcessed: 1.00 GB");
else
fprintf(stderr, "\rProcessed: %.2lf GB", totalKB / 1048576.0);
}
}
CloseHandle(hDVD);
exit(0);
}
cl /O2 /Og /Oi /Ot /Ox /Oy /GF /GS- /Gz /IC:\WinDDK\760016~1.1\inc\api /IC:\WinDDK\760016~1.1\inc\crt /c /TC /MD /Fodvd.obj dvd.c
link /BASE:0x400000 /DYNAMICBASE:NO /ENTRY:start /FIXED /INCREMENTAL:NO /LARGEADDRESSAWARE /LIBPATH:C:\WinDDK\760016~1.1\lib\Crt\i386 /LIBPATH:C:\WinDDK\760016~1.1\lib\wxp\i386 /MACHINE:X86 /MANIFEST:NO /NXCOMPAT /OUT:dvd.exe /RELEASE /SUBSYSTEM:CONSOLE dvd.obj kernel32.lib shell32.lib msvcrt.lib
dvd.exe D >TEST.ISO
Thanks a lot. Can't even play it in VLC...Can you play a DVD in VLC or any other player? After playing a few seconds (this will ensure that disc is authenticated and will unblock access to potentially encrypted sectors, this is fine they can be decrypted later) you can try to: close your player and copy raw sectors with C program like this (for Windows):
You can compile using Windows SDK or DDK (I use Windows 7 DDK):C:#include <windows.h> #include <stdio.h> #include <io.h> #include <fcntl.h> #define SECTOR_SIZE 2048 unsigned char buffer[SECTOR_SIZE]; __declspec(noreturn) void __stdcall start(void) { int argc, bytesRead, totalKB = 0; wchar_t **argv = CommandLineToArgvW(GetCommandLineW(), &argc); char drivePath[8] = "\\\\.\\\0:"; void *hDVD; _setmode(_fileno(stdout), _O_BINARY); if (argc != 2) { fprintf(stderr, "Usage: %ls <DVD Drive Letter>\n", argv[0]); exit(1); } drivePath[4] = argv[1][0]; if ((hDVD = CreateFileA(drivePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { fprintf(stderr, "Failed to open DVD-ROM drive. Error: %lu\n", GetLastError()); exit(2); } DeviceIoControl(hDVD, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, &bytesRead, NULL); while (ReadFile(hDVD, buffer, SECTOR_SIZE, &bytesRead, NULL) && bytesRead > 0) { totalKB += 2; fwrite(buffer, 1, bytesRead, stdout); if (totalKB % 1024 == 0) { if (totalKB < 1024) fprintf(stderr, "\rProcessed: %d kB", totalKB); else if (totalKB < 1048576) fprintf(stderr, "\rProcessed: %.2lf MB", totalKB / 1024.0); else if (totalKB == 1048576) fprintf(stderr, "\r \rProcessed: 1.00 GB"); else fprintf(stderr, "\rProcessed: %.2lf GB", totalKB / 1048576.0); } } CloseHandle(hDVD); exit(0); }
If it doesn't work, you can try to make modifications to find out what is really blocking you from reading whole disc. It prints to STDOUT, so needs redirect like:Code:cl /O2 /Og /Oi /Ot /Ox /Oy /GF /GS- /Gz /IC:\WinDDK\760016~1.1\inc\api /IC:\WinDDK\760016~1.1\inc\crt /c /TC /MD /Fodvd.obj dvd.c link /BASE:0x400000 /DYNAMICBASE:NO /ENTRY:start /FIXED /INCREMENTAL:NO /LARGEADDRESSAWARE /LIBPATH:C:\WinDDK\760016~1.1\lib\Crt\i386 /LIBPATH:C:\WinDDK\760016~1.1\lib\wxp\i386 /MACHINE:X86 /MANIFEST:NO /NXCOMPAT /OUT:dvd.exe /RELEASE /SUBSYSTEM:CONSOLE dvd.obj kernel32.lib shell32.lib msvcrt.lib
Code:dvd.exe D >TEST.ISO
Thanks a lot. Can't even play it in VLC...
Yes, the only player seems to be the one from the DVD player. Ok, thanks a lot, will try that...Does it play in any player on your computer? Or can you play it only in normal, standalone DVD / Blu-Ray player?
I would proceed with the following: play DVD on a computer in a player that can play this DVD, then try to read discs sectors at different offsets (not necessarily starting at 0th sector at offset 0x0), ISO9660 compatibility sector is located at offset 0x8000 (this is 16th sector), it should be readable as otherwise OS wouldn't be able to determine filesystem used on the disc.
If no player on your computer can play the disc, it might mean that the drive itself doesn't support your disc. I experienced this before on an old computer when I tried to make an ISO from multilayered DVD. I just had to use another newer computer.