Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- { This small pascal program will extract files
- from a .tar file from a dev_flash base folder (Right!!!)
- Remember, this program is only for educational
- and research purpose (Right again!!!)
- Feel free to improve!
- Questions? No? Thank you!
- Made by rodq }
- {M 2048, 0, 0}
- program unTAR;
- uses crt,dos;
- var
- fisier: file of byte;
- batfile: Text;
- fsize,i: longint;
- sursa,nfisier,id1,id2,id3,id4,id5,id6,id7: string;
- c1: char;
- x1: byte;
- dev,tipfisier,Code,nrdir,nrsdir,nrfis: integer;
- Procedure fixdir;
- var
- a: integer;
- begin
- for a:=1 to length(nfisier) do
- if nfisier[a]='/'
- then nfisier[a]:='\';
- end;
- Procedure creazadirector;
- var
- batwrite: string;
- begin
- assign(batfile,'runme.bat');
- {$I-}
- append(batfile);
- {$I+}
- fixdir;
- batwrite:=concat('MKDIR ',nfisier);
- writeln(batfile,batwrite);
- close(batfile);
- writeln('Creating folder: ',nfisier);
- nrdir:=nrdir+1;
- end;
- Function conversieocto(soctal:string):longint;
- {converteste un numar intreg in octo}
- var
- octo,power: longint;
- loctal,a,b,Code,temp,pow: integer;
- begin
- loctal:=length(soctal);
- octo:=0;
- for a:=1 to loctal do
- begin
- val(soctal[a],temp,Code);
- if temp=0
- then
- power:=0
- else
- power:=1;
- pow:=0;
- if temp<>0
- then
- begin
- for b:=a to (loctal-1) do
- begin
- pow:=pow+1;
- power:=power*8;
- end;
- end;
- if temp=0
- then
- octo:=octo+temp
- else
- octo:=octo+temp*power;
- end; {for}
- conversieocto:=octo;
- end;
- Procedure creazafisier;
- var
- fisier2: file of byte;
- target,v1,batwrite: string;
- dummy: byte;
- jo,fo,fr,bkp,ii:longint;
- begin
- jo:=conversieocto(id4);
- textcolor(white);
- writeln;
- write('File found: ');
- textcolor(green);
- writeln(nfisier);
- textcolor(white);
- write('Starting: ');
- textcolor(blue);
- write(i+354);
- textcolor(white);
- write(' size: ');
- textcolor(red);
- write(jo);
- textcolor(white);
- writeln(' bytes');
- textcolor(cyan);
- writeln('---------------------------------------------------------------');
- textcolor(white);
- nrfis:=nrfis+1;
- str(nrfis,v1);
- target:=concat('file',v1,'.bin');
- bkp:=i;
- fo:=0;
- fo:=i+354;
- writeln;
- write('Creating file...');
- seek(fisier,fo);
- assign(fisier2,target);
- assign(batfile,'runme.bat');
- {$I-}
- rewrite(fisier2);
- {$I+}
- {$I-}
- append(batfile);
- {$I+}
- batwrite:='';
- batwrite:=concat('MOVE ',target,' ',nfisier);
- writeln(batfile,batwrite);
- close(batfile);
- for fr:=1 to jo do
- begin
- read(fisier,dummy);
- write(fisier2,dummy);
- end;
- close(fisier2);
- close(fisier);
- assign(fisier,sursa);
- {$I-}
- reset(fisier);
- {$I+}
- {de creat fisier}
- i:=jo+fo; {sare de fisierul gasit = speeeed}
- writeln(' Done.');
- seek(fisier,i);
- end;
- procedure readbyte; {citeste byte din fisier si transforma in c1 char}
- begin
- read(fisier,x1);
- c1:=chr(x1);
- end;
- procedure searchdevflash;
- begin
- if c1='d'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='e'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='v'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='_'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='f'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='l'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='a'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='s'
- then
- begin
- readbyte;
- i:=i+1;
- if c1='h'
- then
- begin
- { writeln('dev_flash was found @ ',i-8-1,' ! '); }
- dev:=dev+1;
- nfisier:='dev_flash';
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- nfisier:=nfisier+c1;
- readbyte;
- i:=i+1;
- end;
- { writeln(' Path is: ',nfisier); }
- while ord(c1)=0 do
- begin
- readbyte;
- i:=i+1;
- end;
- id1:='';
- while ord(c1)<>0 do
- begin
- id1:=id1+c1;
- readbyte;
- i:=i+1;
- end;
- id2:='';
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- id2:=id2+c1;
- readbyte;
- i:=i+1;
- end;
- id3:='';
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- id3:=id3+c1;
- readbyte;
- i:=i+1;
- end;
- id4:='';
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- id4:=id4+c1;
- readbyte;
- i:=i+1;
- end;
- id5:='';
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- id5:=id5+c1;
- readbyte;
- i:=i+1;
- end;
- id6:='';
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- id6:=id6+c1;
- readbyte;
- i:=i+1;
- end;
- id7:='';
- readbyte;
- i:=i+1;
- readbyte;
- i:=i+1;
- while ord(c1)<>0 do
- begin
- id7:=id7+c1;
- readbyte;
- i:=i+1;
- end;
- {writeln;
- writeln(id1,'-',id2,'-',id3,'-',id4,'-',id5,'-',id6,'-',id7,' ',i); }
- tipfisier:=0;
- Code:=0;
- val(id1,tipfisier,Code);
- if (conversieocto(id1)> 699) and (conversieocto(id4)>0)
- then
- begin
- textcolor(red);
- writeln('Probably a firmware bug... Folder is not a File!!!');
- textcolor(white);
- end;
- if (conversieocto(id1)<700) and (conversieocto(id4)=0)
- then
- begin
- textcolor(red);
- writeln('Probably a firmware bug... File is not a Folder!!!');
- textcolor(white);
- end;
- if (conversieocto(id4)=0) and (nfisier[length(nfisier)]='/')
- then creazadirector
- else creazafisier;
- end; {h}
- end; {s}
- end; {a}
- end; {l}
- end; {f}
- end; {_}
- end; {v}
- end; {e}
- end; {d}
- end; {procedure devflash}
- begin
- clrscr;
- textcolor(white);
- dev:=0;
- nrdir:=0; {numar directoare}
- nrfis:=0; {numar fisiere}
- nrsdir:=0; {numar subdirectoare}
- writeln;
- assign(batfile,'runme.bat');
- {$I-}
- rewrite(batfile);
- {$I+}
- writeln(batfile,'@echo off');
- writeln(batfile,'@echo This will push all files to the right place');
- close(batfile);
- write('Input source target (8 chars max): '); { MS-DOS }
- readln(sursa);
- assign(fisier,sursa);
- {$I-}
- reset(fisier);
- {$I+}
- writeln;
- If (IOResult <> 0) then
- begin
- writeln('File not found! Press ENTER to Exit!');
- readln;
- end
- else
- begin
- fsize:=filesize(fisier);
- clrscr;
- writeln;
- writeln('File ',sursa,' is ',fsize,' bytes.');
- writeln;
- writeln('Now doing things. Please wait!');
- for i:=1 to fsize do
- begin
- readbyte;
- searchdevflash;
- end; {for search}
- end; {if io error}
- close(fisier);
- textcolor(red);
- writeln;
- writeln;
- writeln('WARNING! Firmware may contain bugs! This is only for testing!');
- writeln;
- textcolor(white);
- writeln('Total: ',nrfis,' files and ',nrdir,' folders found.');
- writeln;
- textcolor(yellow);
- writeln;
- writeln(' Program ended. File ',sursa,' is done. RUNME.BAT to fix files!');
- textcolor(white);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement