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

📄 showpeunit.pas

📁 dede 的源代码 3.10b
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      Result.Add(s+'.'+s1);
    End;
end;


procedure TPEIForm.SetOEnable(Enable: Boolean);
begin
 If Enable Then
  Begin
   O1.OnClick:=O1Click;
   O2.OnClick:=O2Click;
   O4.OnClick:=O4Click;
   O8.OnClick:=O8Click;
   O10.OnClick:=O10Click;
   O20.OnClick:=O20Click;
   O40.OnClick:=O40Click;
   O80.OnClick:=O80Click;
   O100.OnClick:=O100Click;
   O200.OnClick:=O200Click;
   O400.OnClick:=O400Click;
   O1000.OnClick:=O1000Click;
   O2000.OnClick:=O2000Click;
   O4000.OnClick:=O4000Click;
   O8000.OnClick:=O8000Click;
  End
  Else Begin
   O1.OnClick:=nil;
   O2.OnClick:=nil;
   O4.OnClick:=nil;
   O8.OnClick:=nil;
   O10.OnClick:=nil;
   O20.OnClick:=nil;
   O40.OnClick:=nil;
   O80.OnClick:=nil;
   O100.OnClick:=nil;
   O200.OnClick:=nil;
   O400.OnClick:=nil;
   O1000.OnClick:=nil;
   O2000.OnClick:=nil;
   O4000.OnClick:=nil;
   O8000.OnClick:=nil;
  End;
end;

procedure TPEIForm.O1Click(Sender: TObject);
begin
  O1.OnClick:=nil;
  O1.Checked:=not O1.Checked;
  O1.OnClick:=O1Click;
  ShowMessage(dscr_o1);
end;

procedure TPEIForm.O2Click(Sender: TObject);
begin
  O2.OnClick:=nil;
  O2.Checked:=not O2.Checked;
  O2.OnClick:=O2Click;
  ShowMessage(dscr_o2);
end;

procedure TPEIForm.O4Click(Sender: TObject);
begin
  O4.OnClick:=nil;
  O4.Checked:=not O4.Checked;
  O4.OnClick:=O4Click;
  ShowMessage(dscr_o4);
end;

procedure TPEIForm.O8Click(Sender: TObject);
begin
  O8.OnClick:=nil;
  O8.Checked:=not O8.Checked;
  O8.OnClick:=O8Click;
  ShowMessage(dscr_o8);
end;

procedure TPEIForm.O10Click(Sender: TObject);
begin
  O10.OnClick:=nil;
  O10.Checked:=not O10.Checked;
  O10.OnClick:=O10Click;
  ShowMessage(dscr_o10);
end;

procedure TPEIForm.O20Click(Sender: TObject);
begin
  O20.OnClick:=nil;
  O20.Checked:=not O20.Checked;
  O20.OnClick:=O20Click;
  ShowMessage(dscr_o20);
end;

procedure TPEIForm.O80Click(Sender: TObject);
begin
  O80.OnClick:=nil;
  O80.Checked:=not O80.Checked;
  O80.OnClick:=O80Click;
  ShowMessage(dscr_o80);
end;

procedure TPEIForm.O40Click(Sender: TObject);
begin
  O40.OnClick:=nil;
  O40.Checked:=not O40.Checked;
  O40.OnClick:=O40Click;
  ShowMessage(dscr_o40);
end;

procedure TPEIForm.O1000Click(Sender: TObject);
begin
  O1000.OnClick:=nil;
  O1000.Checked:=not O1000.Checked;
  O1000.OnClick:=O1000Click;
  ShowMessage(dscr_o1000);
end;

procedure TPEIForm.O2000Click(Sender: TObject);
begin
  O2000.OnClick:=nil;
  O2000.Checked:=not O2000.Checked;
  O2000.OnClick:=O2000Click;
  ShowMessage(dscr_o2000);
end;

procedure TPEIForm.O4000Click(Sender: TObject);
begin
  O4000.OnClick:=nil;
  O4000.Checked:=not O4000.Checked;
  O4000.OnClick:=O4000Click;
  ShowMessage(dscr_o4000);
end;

procedure TPEIForm.O8000Click(Sender: TObject);
begin
  O8000.OnClick:=nil;
  O8000.Checked:=not O8000.Checked;
  O8000.OnClick:=O8000Click;
  ShowMessage(dscr_o8000);
end;

procedure TPEIForm.O100Click(Sender: TObject);
begin
  O100.OnClick:=nil;
  O100.Checked:=not O100.Checked;
  O100.OnClick:=O100Click;
  ShowMessage(dscr_o100);
end;

procedure TPEIForm.O200Click(Sender: TObject);
begin
  O200.OnClick:=nil;
  O200.Checked:=not O200.Checked;
  O200.OnClick:=O200Click;
  ShowMessage(dscr_o200);
end;

procedure TPEIForm.O400Click(Sender: TObject);
begin
  O400.OnClick:=nil;
  O400.Checked:=not O400.Checked;
  O400.OnClick:=O400Click;
  ShowMessage(dscr_o400);
end;

procedure TPEIForm.SaveOldRowChanges;

  procedure CheckHexValue(s : String);
  begin
    try
      StrToInt('$'+s);
    except
      on e : Exception do
        Raise Exception.Create(s+' is not valid hex value');
    end;
  end;

begin
   if OldRow=-1 then exit;
   CheckHexValue(RVAEdit.Text);
   ObjectSGrid.Cells[1,OldRow]:=RVAEdit.Text;
   CheckHexValue(PhysOffsetEdit.Text);
   ObjectSGrid.Cells[2,OldRow]:=PhysOffsetEdit.Text;
   CheckHexValue(PhysSizeEdit.Text);
   ObjectSGrid.Cells[3,OldRow]:=PhysSizeEdit.Text;
   CheckHexValue(VirtSizeEdit.Text);
   ObjectSGrid.Cells[4,OldRow]:=VirtSizeEdit.Text;
   CheckHexValue(FlagsEdit.Text);
   ObjectSGrid.Cells[5,OldRow]:=FlagsEdit.Text;
end;

procedure TPEIForm.Button2Click(Sender: TObject);
begin
   if Not bELF
     then PEHeader.Dump(Self.PEFile)
     else Raise Exception.Create('This is not PE file !');
   ShowPEData;
   FormShow(self);
end;

procedure TPEIForm.FlagsEditKeyPress(Sender: TObject; var Key: Char);
begin
  Button9Click(self);
end;

procedure TPEIForm.LoadDirectoryInfo;
begin
  With PEHeader Do
   begin
     Edit1.Text:=DWORD2HEX(EXPORT_TABLE_RVA);
     Edit2.Text:=DWORD2HEX(TOTAL_EXPORT_DATA_SIZE);
     Edit3.Text:=DWORD2HEX(IMPORT_TABLE_RVA);
     Edit4.Text:=DWORD2HEX(TOTAL_IMPORT_DATA_SIZE);
     Edit5.Text:=DWORD2HEX(RESOURCE_TABLE_RVA);
     Edit6.Text:=DWORD2HEX(TOTAL_RESOURCE_DATA_SIZE);
     Edit7.Text:=DWORD2HEX(EXCEPTION_TABLE_RVA);
     Edit8.Text:=DWORD2HEX(TOTAL_EXCEPTION_DATA_SIZE);
     Edit9.Text:=DWORD2HEX(SECURITY_TABLE_RVA);
     Edit10.Text:=DWORD2HEX(TOTAL_SECURITY_DATA_SIZE);
     Edit11.Text:=DWORD2HEX(FIXUP_TABLE_RVA);
     Edit12.Text:=DWORD2HEX(TOTAL_FIXUP_DATA_SIZE);
     Edit13.Text:=DWORD2HEX(DEBUG_TABLE_RVA);
     Edit14.Text:=DWORD2HEX(TOTAL_DEBUG_DIRECTORIES);
     Edit15.Text:=DWORD2HEX(IMAGE_DESCRIPTION_RVA);
     Edit16.Text:=DWORD2HEX(TOTAL_DESCRIPTION_SIZE);
     Edit17.Text:=DWORD2HEX(MACHINE_SPECIFIC_RVA);
     Edit18.Text:=DWORD2HEX(MACHINE_SPECIFIC_SIZE);
     Edit19.Text:=DWORD2HEX(THREAD_LOCAL_STORAGE_RVA);
     Edit20.Text:=DWORD2HEX(TOTAL_TLS_SIZE);
     Edit21.Text:=DWORD2HEX(Load_Config_Table_RVA);
     Edit22.Text:=DWORD2HEX(Load_Config_Table_Size);
     Edit23.Text:=DWORD2HEX(Bound_Import_RVA);
     Edit24.Text:=DWORD2HEX(Bound_Import_Size);
     Edit25.Text:=DWORD2HEX(IAT_RVA);
     Edit26.Text:=DWORD2HEX(IAT_Size);
     Edit27.Text:=DWORD2HEX(Delay_Import_Descriptor_RVA);
     Edit28.Text:=DWORD2HEX(Delay_Import_Descriptor_Size);
     Edit29.Text:=DWORD2HEX(COM_Runtime_Header_RVA);
     Edit30.Text:=DWORD2HEX(COM_Runtime_Header_Size);
  end;   
end;

procedure TPEIForm.Button4Click(Sender: TObject);
begin
  LoadDirectoryInfo;
end;

procedure TPEIForm.Button3Click(Sender: TObject);
var i : Integer;
    edt : TEdit;
    lPEHOffset : DWORD;

  function CheckHexValue(s : String) : Boolean;
  begin
    Result:=False;
    try
      StrToInt('$'+s);
      Result:=True;
    except
      on e : Exception do ShowMessage(s+' is not valid hex value');
    end;
  end;
  
var
    sNewFile : String;
begin
   SaveDlg.InitialDir:=ExtractFileDir(PEFile.sFileName);
   SaveDlg.FileName:=PEFile.sFileName;

   if not SaveDlg.Execute then exit;
   //If MessageDlg(wrn_change_file,
   //   mtConfirmation,[mbYes,mbNo],0)=mrNo Then Exit;

  for i:=0 to PEIForm.ComponentCount-1 do
    begin
      if PEIForm.Components[i].Tag<>-784 then continue;
      edt:=TEdit(PEIForm.Components[i]);
      if not CheckHexValue(edt.Text) then begin edt.SetFocus; exit end;
    end;

  With PEHeader Do
   begin
     EXPORT_TABLE_RVA:=HEX2DWORD(Edit1.Text);
     TOTAL_EXPORT_DATA_SIZE:=HEX2DWORD(Edit2.Text);
     IMPORT_TABLE_RVA:=HEX2DWORD(Edit3.Text);
     TOTAL_IMPORT_DATA_SIZE:=HEX2DWORD(Edit4.Text);
     RESOURCE_TABLE_RVA:=HEX2DWORD(Edit5.Text);
     TOTAL_RESOURCE_DATA_SIZE:=HEX2DWORD(Edit6.Text);
     EXCEPTION_TABLE_RVA:=HEX2DWORD(Edit7.Text);
     TOTAL_EXCEPTION_DATA_SIZE:=HEX2DWORD(Edit8.Text);
     SECURITY_TABLE_RVA:=HEX2DWORD(Edit9.Text);
     TOTAL_SECURITY_DATA_SIZE:=HEX2DWORD(Edit10.Text);
     FIXUP_TABLE_RVA:=HEX2DWORD(Edit11.Text);
     TOTAL_FIXUP_DATA_SIZE:=HEX2DWORD(Edit12.Text);
     DEBUG_TABLE_RVA:=HEX2DWORD(Edit13.Text);
     TOTAL_DEBUG_DIRECTORIES:=HEX2DWORD(Edit14.Text);
     IMAGE_DESCRIPTION_RVA:=HEX2DWORD(Edit15.Text);
     TOTAL_DESCRIPTION_SIZE:=HEX2DWORD(Edit16.Text);
     MACHINE_SPECIFIC_RVA:=HEX2DWORD(Edit17.Text);
     MACHINE_SPECIFIC_SIZE:=HEX2DWORD(Edit18.Text);
     THREAD_LOCAL_STORAGE_RVA:=HEX2DWORD(Edit19.Text);
     TOTAL_TLS_SIZE:=HEX2DWORD(Edit20.Text);
     Load_Config_Table_RVA:=HEX2DWORD(Edit21.Text);
     Load_Config_Table_Size:=HEX2DWORD(Edit22.Text);
     Bound_Import_RVA:=HEX2DWORD(Edit23.Text);
     Bound_Import_Size:=HEX2DWORD(Edit24.Text);
     IAT_RVA:=HEX2DWORD(Edit25.Text);
     IAT_Size:=HEX2DWORD(Edit26.Text);
     Delay_Import_Descriptor_RVA:=HEX2DWORD(Edit27.Text);
     Delay_Import_Descriptor_Size:=HEX2DWORD(Edit28.Text);
     COM_Runtime_Header_RVA:=HEX2DWORD(Edit29.Text);
     COM_Runtime_Header_Size:=HEX2DWORD(Edit30.Text);

     PEFile.PEStream.Seek(DATA_FOR_PE_HEADER_OFFSET,soFromBeginning);
     PEFile.PEStream.ReadBuffer(lPEHOffset,2);
     PEFile.PEStream.Seek($78+lPEHOffset,soFromBeginning);

     PEFile.PEStream.WriteBuffer(EXPORT_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_EXPORT_DATA_SIZE,4);
     PEFile.PEStream.WriteBuffer(IMPORT_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_IMPORT_DATA_SIZE,4);
     PEFile.PEStream.WriteBuffer(RESOURCE_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_RESOURCE_DATA_SIZE,4);
     PEFile.PEStream.WriteBuffer(EXCEPTION_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_EXCEPTION_DATA_SIZE,4);
     PEFile.PEStream.WriteBuffer(SECURITY_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_SECURITY_DATA_SIZE,4);
     PEFile.PEStream.WriteBuffer(FIXUP_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_FIXUP_DATA_SIZE,4);
     PEFile.PEStream.WriteBuffer(DEBUG_TABLE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_DEBUG_DIRECTORIES,4);
     PEFile.PEStream.WriteBuffer(IMAGE_DESCRIPTION_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_DESCRIPTION_SIZE,4);
     PEFile.PEStream.WriteBuffer(MACHINE_SPECIFIC_RVA,4);
     PEFile.PEStream.WriteBuffer(MACHINE_SPECIFIC_SIZE,4);
     PEFile.PEStream.WriteBuffer(Thread_LOCAL_STORAGE_RVA,4);
     PEFile.PEStream.WriteBuffer(TOTAL_TLS_SIZE,4);
     PEFile.PEStream.WriteBuffer(Load_Config_Table_RVA,4);
     PEFile.PEStream.WriteBuffer(Load_Config_Table_Size,4);
     PEFile.PEStream.WriteBuffer(Bound_Import_RVA,4);
     PEFile.PEStream.WriteBuffer(Bound_Import_Size,4);
     PEFile.PEStream.WriteBuffer(IAT_RVA,4);
     PEFile.PEStream.WriteBuffer(IAT_Size,4);
     PEFile.PEStream.WriteBuffer(Delay_Import_Descriptor_RVA,4);
     PEFile.PEStream.WriteBuffer(Delay_Import_Descriptor_Size,4);
     PEFile.PEStream.WriteBuffer(COM_Runtime_Header_RVA,4);
     PEFile.PEStream.WriteBuffer(COM_Runtime_Header_Size,4);
  end;

   Try
     PEFile.PEStream.SaveToFile(SaveDlg.FileName{FsFileName});
     ShowMessage(msg_save_succ);
   Except
     on e: Exception do
         ShowMessage(msg_save_not_succ+#13#10+e.Message);
   End;
     
end;

procedure TPEIForm.ObjectSGridMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var ARow : Integer;
begin
  if (x<429) or (x>515) then
    begin
       Application.HideHint;
       exit;
    end;

  ARow:=((y-15) div 15)+1;
  if ARow>PEHeader.ObjectNum then ARow:=PEHeader.ObjectNum;

  _sHint:=ObjectSGrid.Cells[0,ARow]+'    RVA '+ObjectSGrid.Cells[1,ARow]+#13#13
     +PEHeader.Objects[1].DecodeFlags(Hex2DWORD(ObjectSGrid.Cells[5,ARow]));

 if ObjectSGrid.Hint<>_sHint then
   begin
     Application.HideHint;
     ShowHint := False;
     ObjectSGrid.Hint:=_sHint;
   end
   else if (not ShowHint) then ShowHint := True;
end;

end.

⌨️ 快捷键说明

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