Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Добавление секции в PE |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 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 |
|
Создано: 25 июля 2006 18:03 · Личное сообщение · #2 |
|
Создано: 25 июля 2006 23:38 · Личное сообщение · #3 PE_Kill Не, меня не нравится, что общепринятые названия операторов и слов меняют на другие абсолютно без какого-либо положительного эффекта. Мало того усложняя запись, удлинняя операторы и иже с ними. C++ требует внимательности, память конечно бывает проблемой, но дело привычки. Строки там как раз мне больше нравятся. Люблю ориентироваться по массиву. nice Усё, тема действительно неисчерпаема, закончил. ----- Недостаточно только получить знания:надо найти им приложение |
<< . 1 . 2 . |
eXeL@B —› Программирование —› Добавление секции в PE |