Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Добавление секции в PE
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 23 июля 2006 13:37
· Личное сообщение · #1

Не получается добавись секцию в PE

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
OD: TOpenDialog;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure AddSection(sname: string);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
dos: TImageDosHeader;
nt: TImageNTHeaders;
sh:array[0..15] of TImageSectionHeader;
f, f_new :file; //исходный и новый файл

implementation

{$R *.dfm}


procedure TForm1.AddSection(sname: string);
Var n:byte;
begin
for n:=0 to 7 do
sh[nt.FileHeader.NumberOfSections+1].Name[n]:=ord(sname[n]);
sh[nt.FileHeader.NumberOfSections+1].VirtualAddress:=
sh[nt.FileHeader.NumberOfSections].VirtualAddress+
sh[nt.FileHeader.NumberOfSections].SizeOfRawData;
sh[nt.FileHeader.NumberOfSections+1].SizeOfRawData:=0;
sh[nt.FileHeader.NumberOfSections+1].PointerToRawData:=
sh[nt.FileHeader.NumberOfSections].PointerToRawData+
sh[nt.FileHeader.NumberOfSections].SizeOfRawData;
sh[nt.FileHeader.NumberOfSections+1].Characteristics:=$40000000;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if OD.Execute then
Edit1.Text:=OD.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var i:byte;
buf:array[0..250000] of char;
begin
AssignFile(f,edit1.Text);
AssignFile(f_new,ExtractFileDir(Edit1.Text)+'\new.exe');
ReWrite(f_new,1);
Reset(f,1);
BlockRead(f,dos,SizeOf(TImageDosHeader));
Seek(f,dos._lfanew);
BlockRead(f,nt,SizeOf(nt));
for i:=0 to (nt.FileHeader.NumberOfSections-1) do
BlockRead(f,sh[i],SizeOf(TImageSectionHeader));
Seek(f,0);
BlockRead(f,buf,dos._lfanew);
BlockWrite(f_new,buf,dos._lfanew);
BlockWrite(f_new,nt,SizeOf(nt));
AddSection('LOH');
for i:=0 to nt.FileHeader.NumberOfSections do
BlockWrite(f_new,sh[i],SizeOf(TImageSectionHeader));
Seek(f,sh[0].PointerToRawData);
BlockRead(f,buf,FileSize(f)-sh[0].PointerToRawData);
BlockWrite(f_new,buf,FileSize(f)-sh[0].PointerToRawData);
CloseFile(f_new);
CloseFile(f);
end;

end.


В чём ошибка?

b28b_23.07.2006_CRACKLAB.rU.tgz - Section.rar




Ранг: 199.9 (ветеран), 4thx
Активность: 0.120.02
Статус: Участник

Создано: 25 июля 2006 18:03
· Личное сообщение · #2

sniperZ
Глянька тут:
http://www.exelab.ru/f/action=vthread&forum=5&topic=3979




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 25 июля 2006 23:38
· Личное сообщение · #3

PE_Kill
Не, меня не нравится, что общепринятые названия операторов и слов меняют на другие абсолютно без какого-либо положительного эффекта. Мало того усложняя запись, удлинняя операторы и иже с ними. C++ требует внимательности, память конечно бывает проблемой, но дело привычки. Строки там как раз мне больше нравятся. Люблю ориентироваться по массиву.

nice
Усё, тема действительно неисчерпаема, закончил.

-----
Недостаточно только получить знания:надо найти им приложение



<< . 1 . 2 .
 eXeL@B —› Программирование —› Добавление секции в PE
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати