Detect-It-Easy/db/rar
2014-06-02 09:02:47 +02:00

65 lines
1.8 KiB
Text

// Detect a RAR archive.
// Author: Jason Hood <jadoxa@yahoo.com.au>
includeScript("archive");
sName="RAR";
function detect_RAR(bFile,bShowOptions)
{
var nOffset,nSize;
if(bFile)
{
nOffset=0;
nSize=File.getSize();
}
else
{
nOffset=File.getOverlayOffset();
nSize=File.getOverlaySize();
}
if(nSize>=64)
{
if(File.compare("'Rar!'1A07",nOffset))
{
switch(File.readByte(nOffset+6))
{
case 0: sVersion="4"; break;
case 1: sVersion="5"; break;
}
bDetected=1;
}
else if(File.compare("'RE~^'",nOffset))
{
sVersion="1.4";
bDetected=1;
}
if(sVersion=="4")
{
var nOptions=File.readByte(nOffset+10);
if(nOptions&8)
{
sOptions="solid";
}
if(nOptions&0x80)
{
sOptions=sOptions.append("encrypted");
}
else if(bShowOptions)
{
nOffset+=7+File.readWord(nOffset+12);
while(File.readByte(nOffset+2)!=0x74)
{
nOffset+=File.readWord(nOffset+5)+File.readDword(nOffset+7);
}
while(File.readByte(nOffset+2)==0x74)
{
var nLen=File.readDword(nOffset+7);
Archive.add(File.readDword(nOffset+11),nLen,
(File.readByte(nOffset+3)&0xE0)==0xE0);
nOffset+=File.readWord(nOffset+5)+nLen;
}
sOptions=sOptions.append(Archive.contents());
}
}
}
}