Bit i love from the above is
But somehow, some smartass figured out the scrambling algorithm Course the give no detail how they did it lol..
lmao
smartasses released a bunch of boot disk only games first..
btw
DemuMenu (DC Demoloader)
Released: 07-Feb-2001
it can boot non scrambled and scrambled bins.. source is there to show you how and also unlock and lock the gdrom ..
WinCE Selfbooting Tool
Released: 23-Sep-2000
By: Chossy
Info: This allows you to selfboot your wince apps, saving both time and the need for the illegal utopia bootcd!
Download: selfbootv1-0.zip
scramble.c
Released: ??-??-2000
Info: bin file scrambler/descrambler. Author unknown -- just found it floating around.
Download (scramble.c)
unknown smart ass above who says it was just floating about lmao
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#define MAXCHUNK (2048*1024)
static unsigned int seed;
void my_srand(unsigned int n)
{
seed = n & 0xffff;
}
unsigned int my_rand()
{
seed = (seed * 2109 + 9273) & 0x7fff;
return (seed + 0xc000) & 0xffff;
}
void load(FILE *fh, unsigned char *ptr, unsigned long sz)
{
if(fread(ptr, 1, sz, fh) != sz)
{
fprintf(stderr, "Read error!\n");
exit(1);
}
}
void load_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
{
static int idx[MAXCHUNK/32];
int i;
/* Convert chunk size to number of slices */
sz /= 32;
/* Initialize index table with unity,
so that each slice gets loaded exactly once */
for(i = 0; i < sz; i++)
idx[i] = i;
for(i = sz-1; i >= 0; --i)
{
/* Select a replacement index */
int x = (my_rand() * i) >> 16;
/* Swap */
int tmp = idx[i];
idx[i] = idx[x];
idx[x] = tmp;
/* Load resulting slice */
load(fh, ptr+32*idx[i], 32);
}
}
void load_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
{
unsigned long chunksz;
my_srand(filesz);
/* Descramble 2 meg blocks for as long as possible, then
gradually reduce the window down to 32 bytes (1 slice) */
for(chunksz = MAXCHUNK; chunksz >= 32; chunksz >>= 1)
while(filesz >= chunksz)
{
load_chunk(fh, ptr, chunksz);
filesz -= chunksz;
ptr += chunksz;
}
/* Load final incomplete slice */
if(filesz)
load(fh, ptr, filesz);
}
void read_file(char *filename, unsigned char **ptr, unsigned long *sz)
{
FILE *fh = fopen(filename, "rb");
if(fh == NULL)
{
fprintf(stderr, "Can't open \"%s\".\n", filename);
exit(1);
}
if(fseek(fh, 0, SEEK_END)<0)
{
fprintf(stderr, "Seek error.\n");
exit(1);
}
*sz = ftell(fh);
*ptr = malloc(*sz);
if( *ptr == NULL )
{
fprintf(stderr, "Out of memory.\n");
exit(1);
}
if(fseek(fh, 0, SEEK_SET)<0)
{
fprintf(stderr, "Seek error.\n");
exit(1);
}
load_file(fh, *ptr, *sz);
fclose(fh);
}
void save(FILE *fh, unsigned char *ptr, unsigned long sz)
{
if(fwrite(ptr, 1, sz, fh) != sz)
{
fprintf(stderr, "Write error!\n");
exit(1);
}
}
void save_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
{
static int idx[MAXCHUNK/32];
int i;
/* Convert chunk size to number of slices */
sz /= 32;
/* Initialize index table with unity,
so that each slice gets saved exactly once */
for(i = 0; i < sz; i++)
idx[i] = i;
for(i = sz-1; i >= 0; --i)
{
/* Select a replacement index */
int x = (my_rand() * i) >> 16;
/* Swap */
int tmp = idx[i];
idx[i] = idx[x];
idx[x] = tmp;
/* Save resulting slice */
save(fh, ptr+32*idx[i], 32);
}
}
void save_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
{
unsigned long chunksz;
my_srand(filesz);
/* Descramble 2 meg blocks for as long as possible, then
gradually reduce the window down to 32 bytes (1 slice) */
for(chunksz = MAXCHUNK; chunksz >= 32; chunksz >>= 1)
while(filesz >= chunksz)
{
save_chunk(fh, ptr, chunksz);
filesz -= chunksz;
ptr += chunksz;
}
/* Save final incomplete slice */
if(filesz)
save(fh, ptr, filesz);
}
void write_file(char *filename, unsigned char *ptr, unsigned long sz)
{
FILE *fh = fopen(filename, "wb");
if(fh == NULL)
{
fprintf(stderr, "Can't open \"%s\".\n", filename);
exit(1);
}
save_file(fh, ptr, sz);
fclose(fh);
}
void descramble(char *src, char *dst)
{
unsigned char *ptr = NULL;
unsigned long sz = 0;
FILE *fh;
read_file(src, &ptr, &sz);
fh = fopen(dst, "wb");
if(fh == NULL)
{
fprintf(stderr, "Can't open \"%s\".\n", dst);
exit(1);
}
if( fwrite(ptr, 1, sz, fh) != sz )
{
fprintf(stderr, "Write error.\n");
exit(1);
}
fclose(fh);
free(ptr);
}
void scramble(char *src, char *dst)
{
unsigned char *ptr = NULL;
unsigned long sz = 0;
FILE *fh;
fh = fopen(src, "rb");
if(fh == NULL)
{
fprintf(stderr, "Can't open \"%s\".\n", src);
exit(1);
}
if(fseek(fh, 0, SEEK_END)<0)
{
fprintf(stderr, "Seek error.\n");
exit(1);
}
sz = ftell(fh);
ptr = malloc(sz);
if( ptr == NULL )
{
fprintf(stderr, "Out of memory.\n");
exit(1);
}
if(fseek(fh, 0, SEEK_SET)<0)
{
fprintf(stderr, "Seek error.\n");
exit(1);
}
if( fread(ptr, 1, sz, fh) != sz )
{
fprintf(stderr, "Read error.\n");
exit(1);
}
fclose(fh);
write_file(dst, ptr, sz);
free(ptr);
}
int main(int argc, char *argv[])
{
int opt = 0;
if(argc > 1 && !strcmp(argv[1], "-d"))
opt ++;
if(argc != 3+opt)
{
fprintf(stderr, "Usage: %s [-d] from to\n", argv[0]);
exit(1);
}
if(opt)
descramble(argv[2], argv[3]);
else
scramble(argv[1], argv[2]);
return 0;
}
code above to make selfboot bin..
IP.BIN maker
Released: ??-??-2000
Size: 10k
Info: Seems useful

DOWNLOAD
SDK TOOL ABOVE
BOOB - Utopia BootCD image
Released: 21-Jul-2000
Current Version: 1.1
Size: 723k zipped
REMOVED due to possible legality issues
Because it used sdk samples and not reversed at all..
Thursday, July 20, 2000
Posted by CyRUS64 @ 9:54
I got sent this email today from
[email protected]
Dear friends,
As a dreamcast gamer, how many times have you thought
that you have scratched that original game that you
have, when you accidentally hit on the console or
something like that..
What we offer is backup CD for your originals, so that
you can play with the backups, and thus safeguard
your gaming investments....
Our prices are just 7.50 per CD backup games.
once you have bought 10 games from us, you then only
pay 5.00 per CD backup game!!!
There is however a fixed shipping charge of 5.00 for
the first 10 games, and 2.50 per additional 5 games.
Thursday, July 20, 2000
WinCE DevKit Posted by CyRUS64 @ 0:31
Although we don't believe in "warez", it is worth mentioning that the WinCE Devkit 2.1 has been leaked. We will NOT provide you with links to download this, but it could become an extremely important part of the dc development scene.
Various people (we might be aswell, but i dont mean us!) will soon undoubtedly be working on emulators ports. Mame for DC is obviously one of the most hotly anticipated - imagine being able to insert a cdr with mame and lots of roms on it, and being able to play the old arcade classics sitting in front of your tv...
So there is the first public i know of person saying wince dev kit was leaked..
Keep in mind the Dreamcast was not dead yet not until March 31, 2001