⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 process.pas

📁 wbs43open-src.zip 数字隐藏工具
💻 PAS
📖 第 1 页 / 共 4 页
字号:
             ReWrite(DataFile);
             AssignFile(BMPFile,InManName);
             Reset(BMPFile);
             Size:=0;
             BytePos:=54;
             For i:=0 To 2 Do Begin
               Data:=0;
               For BitPos:=7 Downto 0 Do Begin
                 Seek(BMPFile,BytePos);
                 Read(BMPFile,CVal);
                 If (CVal And $01)=$01 Then Data:=Data+(1 Shl BitPos);
                 Inc(BytePos);
               End;
               Case i Of
                 0: fact:=$00001;
                 1: fact:=$00100;
                 2: fact:=$10000;
               End;
               Size:=Size+Data*fact;
             End;
             For i:=1 To Size Do Begin
               Data:=0;
               For BitPos:=7 Downto 0 Do Begin
                 Seek(BMPFile,BytePos);
                 Read(BMPFile,CVal);
                 If (CVal And $01)=$01 Then Data:=Data+(1 Shl BitPos);
                 Inc(BytePos);
               End;
               Write(DataFile,Data);
               Percent:=Trunc((((BytePos-54)/8)/Size)*100);
               LPercent.Caption:=IntToStr(Percent)+'%';
               ProBar.Width:=Percent*2;
               Application.ProcessMessages;
               If ExitNow Then Break;
             End;
             CloseFile(DataFile);
             CloseFile(BMPFile);
           End;
    End;
end;

procedure TForm16.DecodeTXT;
var
  TXTFile:     File Of Byte;
  Character:   Byte;
  DataFile:    File Of Byte;
  Data:        Byte;
  i:           Longint;
  BitPos:      Byte;
  BytePos:     Longint;
  Size:        Longint;
  fact:        Longint;
begin
  LAction.Caption:=ml.GetCodeString('Process',14);{'Decoding ...'; }       // code014
  Application.ProcessMessages;
  AssignFile(TXTFile,InManName);
  Reset(TXTFile);
  AssignFile(DataFile,temppath+'~wbstego.out');
  ReWrite(DataFile);
  Size:=0;
  For i:=0 To 2 Do Begin
    Data:=0;
    For BitPos:=7 Downto 0 Do Begin
      Repeat
        Read(TXTFile,Character);
      Until (Character=$00) Or (Character=$20);
      If Character=$20 Then Data:=Data+(1 Shl BitPos);
    End;
    Case i Of
      0: fact:=$00001;
      1: fact:=$00100;
      2: fact:=$10000;
    End;
    Size:=Size+Data*fact;
  End;
  For i:=1 To Size Do Begin
    Data:=0;
    For BitPos:=7 DownTo 0 Do Begin
      Repeat
        Read(TXTFile,Character);
      Until (Character=$00) Or (Character=$20);
      If Character=$20 Then Data:=Data+(1 Shl BitPos);
    End;
    Write(DataFile,Data);
    Percent:=Trunc((i/Size)*100);
    LPercent.Caption:=IntToStr(Percent)+'%';
    ProBar.Width:=Percent*2;
    Application.ProcessMessages;
    If ExitNow Then Break;
  End;
  CloseFile(TXTFile);
  CloseFile(DataFile);
end;

procedure TForm16.DecodeHTM;
var
  HTMFile:     File Of Byte;
  Character:   Byte;
  Char2:       Byte;
  DataFile:    File Of Byte;
  Data:        Byte;
  i:           Longint;
  CPos:        Longint;
  BitPos:      Byte;
  BytePos:     Longint;
  Size:        Longint;
  fact:        Longint;
begin
  LAction.Caption:=ml.GetCodeString('Process',15);{'Decoding ...';  }   // code015
  Application.ProcessMessages;
  AssignFile(HTMFile,InManName);
  Reset(HTMFile);
  AssignFile(DataFile,temppath+'~wbstego.out');
  ReWrite(DataFile);
  Size:=0;
  For i:=0 To 2 Do Begin
    Data:=0;
    Repeat
      Read(HTMFile,Character);
      If Character=$0D Then Read(HTMFile,Char2) Else Char2:=$00;
    Until (Character=$0D) And (Char2=$0A);
    CPos:=FilePos(HTMFile);
    For BitPos:=7 Downto 0 Do Begin
      Seek(HTMFile,CPos-BitPos-3);
      Read(HTMFile,Character);
      If Character=$09 Then Data:=Data+(1 Shl BitPos);
    End;
    Seek(HTMFile,CPos);
    Case i Of
      0: fact:=$00001;
      1: fact:=$00100;
      2: fact:=$10000;
    End;
    Size:=Size+Data*fact;
  End;
  For i:=1 To Size Do Begin
    Data:=0;
    Repeat
      Read(HTMFile,Character);
      If Character=$0D Then Read(HTMFile,Char2) Else Char2:=$00;
    Until (Character=$0D) And (Char2=$0A);
    CPos:=FilePos(HTMFile);
    For BitPos:=7 DownTo 0 Do Begin
      Seek(HTMFile,CPos-BitPos-3);
      Read(HTMFile,Character);
      If Character=$09 Then Data:=Data+(1 Shl BitPos);
    End;
    Seek(HTMFile,CPos);
    Write(DataFile,Data);
    Percent:=Trunc((i/Size)*100);
    LPercent.Caption:=IntToStr(Percent)+'%';
    ProBar.Width:=Percent*2;
    Application.ProcessMessages;
    If ExitNow Then Break;
  End;
  CloseFile(HTMFile);
  CloseFile(DataFile);
end;

procedure TForm16.DecodePDF;
label
  obj, endobj, obj2, endobj2;
var
  PDFFile:     File Of Byte;
  Character:   Byte;
  Char2:       Byte;
  DataFile:    File Of Byte;
  Data:        Byte;
  i,j:         Longint;
  CPos:        Longint;
  BitPos:      Byte;
  BytePos:     Longint;
  Size:        Longint;
  fact:        Longint;
  Found:       Boolean;
  InObjTag:    Boolean;
  TagStr:      String;
begin
  Found:=False;
  InObjTag:=False;
  LAction.Caption:=ml.GetCodeString('Process',16);{'Decoding ...'; }      // code016
  Application.ProcessMessages;
  AssignFile(PDFFile,InManName);
  Reset(PDFFile);
  AssignFile(DataFile,temppath+'~wbstego.out');
  ReWrite(DataFile);
  Size:=0;
  For i:=0 To 2 Do Begin
    Data:=0;
    Found:=False;
    Repeat
      Read(PDFFile,Character);
      If (InObjTag) Then Begin
        If ((Character=Ord('e')) Or (Character=Ord('E'))) Then Begin
          endobj:
          TagStr:=Chr(Character);
          For j:=1 To 5 Do Begin
            Read(PDFFile,Character);
            TagStr:=TagStr+Chr(Character);
            If ((Character=Ord('e')) Or (Character=Ord('E'))) Then goto endobj;
          End;
          TagStr:=LowerCase(TagStr);
          If TagStr='endobj' Then InObjTag:=False;
        End;
      End
      Else Begin
        If ((Character=Ord('o')) Or (Character=Ord('O'))) Then Begin
          obj:
          TagStr:=Chr(Character);
          For j:=1 To 2 Do Begin
            Read(PDFFile,Character);
            TagStr:=TagStr+Chr(Character);
            If ((Character=Ord('o')) Or (Character=Ord('O'))) Then goto obj;
          End;
          TagStr:=LowerCase(TagStr);
          If TagStr='obj' Then InObjTag:=True;
        End
        Else Begin
          If Character=$0D Then Found:=True;
        End;
      End;
    Until Found;
    CPos:=FilePos(PDFFile);
    For BitPos:=7 Downto 0 Do Begin
      Seek(PDFFile,CPos-BitPos-2);
      Read(PDFFile,Character);
      If Character=$09 Then Data:=Data+(1 Shl BitPos);
    End;
    Seek(PDFFile,CPos);
    Case i Of
      0: fact:=$00001;
      1: fact:=$00100;
      2: fact:=$10000;
    End;
    Size:=Size+Data*fact;
  End;
  For i:=1 To Size Do Begin
    Found:=False;
    Data:=0;
    Repeat
      Read(PDFFile,Character);
      If (InObjTag) Then Begin
        If ((Character=Ord('e')) Or (Character=Ord('E'))) Then Begin
          endobj2:
          TagStr:=Chr(Character);
          For j:=1 To 5 Do Begin
            Read(PDFFile,Character);
            TagStr:=TagStr+Chr(Character);
            If ((Character=Ord('e')) Or (Character=Ord('E'))) Then goto endobj2;
          End;
          TagStr:=LowerCase(TagStr);
          If TagStr='endobj' Then InObjTag:=False;
        End;
      End
      Else Begin
        If ((Character=Ord('o')) Or (Character=Ord('O'))) Then Begin
          obj2:
          TagStr:=Chr(Character);
          For j:=1 To 2 Do Begin
            Read(PDFFile,Character);
            TagStr:=TagStr+Chr(Character);
            If ((Character=Ord('o')) Or (Character=Ord('O'))) Then goto obj2;
          End;
          TagStr:=LowerCase(TagStr);
          If TagStr='obj' Then InObjTag:=True;
        End
        Else Begin
          If Character=$0D Then Found:=True;
        End;
      End;
    Until Found;
    CPos:=FilePos(PDFFile);
    For BitPos:=7 DownTo 0 Do Begin
      Seek(PDFFile,CPos-BitPos-2);
      Read(PDFFile,Character);
      If Character=$09 Then Data:=Data+(1 Shl BitPos);
    End;
    Seek(PDFFile,CPos);
    Write(DataFile,Data);
    Percent:=Trunc((i/Size)*100);
    LPercent.Caption:=IntToStr(Percent)+'%';
    ProBar.Width:=Percent*2;
    Application.ProcessMessages;
    If ExitNow Then Break;
  End;
  CloseFile(PDFFile);
  CloseFile(DataFile);
end;

procedure TForm16.Button1Click(Sender: TObject);
begin
  If Not(InProg) Then Close
  Else
    If MessageDlg(ml.GetCodeString('Process',17){'Do you really want to abort the process now?'},mtConfirmation,[mbYes,mbNo],0)=mrYes     // code017
    Then Begin
      ExitNow:=True;
      Close;
    End;
end;

procedure TForm16.FormShow(Sender: TObject);
begin
  ExitNow:=False;
  InProg:=True;
  Percent:=0;
  LAction.Caption:=ml.GetCodeString('Process',18);{'Preparing ...';  }  // code018
  Button1.Caption:=ml.GetCodeString('Process',19);{'&Abort'; }          // code019
  LPercent.Caption:=IntToStr(Round(Percent))+'%';
  ProBar.Width:=0;
  Timer1.Enabled:=True;
end;

procedure TForm16.Timer1Timer(Sender: TObject);
var
  XFile:   File Of Byte;
  i,j:     Byte;
  CPos:    Longint;
begin
  Timer1.Enabled:=False;
  If anAction=AEncode Then Begin
    Prepare;
    If Mix Then MixThrough;
    If Crypt Then Encrypt;
    If ExitNow Then Close Else Begin
      If FileType='BMP' Then Begin
        EncodeBMP;
      End;
      If FileType='TXT' Then Begin
        If Meth=0 Then EncodeTXT
        Else EncodeHTM;
      End;
      If FileType='HTM' Then EncodeHTM;
      If FileType='PDF' Then EncodePDF;
    End;
  End
  Else Begin
    If FileType='BMP' Then DecodeBMP;
    If FileType='TXT' Then Begin
      {trying to find out encoding method}
      Meth:=0;
      AssignFile(XFile,InManName);
      Reset(XFile);
      While (Not(EOF(XFile))) And (Meth=0) Do Begin
        Read(XFile,i);
        If (i=$0D) And Not(EOF(XFile)) Then Begin
          Read(XFile,j);
          If j=$0A Then Begin
            Meth:=1;
            CPos:=FilePos(XFile);
            For i:=7 DownTo 0 Do Begin
              Seek(XFile,CPos-i-3);
              Read(XFile,j);
              If (j<>$09) And (j<>$20) Then Meth:=0;
            End;
            Seek(XFile,CPos);
          End;
        End;
      End;
      CloseFile(XFile);
      If Meth=0 Then DecodeTXT Else DecodeHTM;
    End;
    If FileType='HTM' Then DecodeHTM;
    If FileType='PDF' Then DecodePDF;
    If ExitNow Then Close Else Begin
      If Pwd<>'' Then Decrypt;
      If Pwd<>'' Then UnMixThrough;
      HandleResult;
    End;
  End;
  LPercent.Caption:='100%';
  LAction.Caption:=ml.GetCodeString('Process',20);{'Finished!!!'; } // code020
  Button1.Caption:=ml.GetCodeString('Process',21);{'&OK'; }  // code021
  InProg:=False;
end;

procedure TForm16.FormCreate(Sender: TObject);
begin
  // ml support
  Button1.Caption:=ml.GetComponentString('Process.Button1.Caption');
  Form16.Caption:=ml.GetComponentString('Process.Form16.Caption');
  LAction.Caption:=ml.GetComponentString('Process.LAction.Caption');
  // image
  ml.GetComponentImage('Process.ProBar.Picture',ProBar.Picture.Graphic);
  ///////////////////////////////////////////////////////////////////
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -