Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

04.06.2008, 23:14
|
|
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме: 90653
Репутация:
3
|
|
Создание новой секции
Такой вопрос:
пишется прога на дельфи, надо создать секцию в РЕ файле, чтобы файл не грохнулся, в гугле для дельфи не нашел, кто может, выложите/скиньте исходник 
|
|
|

04.06.2008, 23:22
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Сообщение от disasembler
Такой вопрос:
пишется прога на дельфи, надо создать секцию в РЕ файле, чтобы файл не грохнулся, в гугле для дельфи не нашел, кто может, выложите/скиньте исходник 
4ё? по секрету тебе сакжу, делфи аж 5 4то ли секций в файле создаёт! 
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

04.06.2008, 23:25
|
|
Познающий
Регистрация: 28.09.2007
Сообщений: 56
Провел на форуме: 4328058
Репутация:
86
|
|
кури доки по ре формату. потом хоть на брэйнфаке напишешь
|
|
|

05.06.2008, 00:21
|
|
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме: 90653
Репутация:
3
|
|
все вроде нормально делается, секция создается, но винда при попытке запуска говорит, что данный файл не является РЕ - файлом
если хотите, могу выложить исходник, как это делается
|
|
|

05.06.2008, 01:19
|
|
Познающий
Регистрация: 24.02.2006
Сообщений: 34
Провел на форуме: 136883
Репутация:
50
|
|
Показывай. и говори не "как это делается", а "как этого делать нельзя"  ))
ибо по твоим словам не работает вещь...
|
|
|

05.06.2008, 08:43
|
|
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме: 90653
Репутация:
3
|
|
2x0man:
выложу сорец, помоги с исправлением 
http://v0id.izi.su/crypter.rar - сам сорец
|
|
|

05.06.2008, 09:38
|
|
Постоянный
Регистрация: 20.08.2006
Сообщений: 327
Провел на форуме: 2472378
Репутация:
1077
|
|
Во-первых: disassembler
Заражение Часть I / Создаем секцию
http://www.gfs-team.ru/?act=articles&pact=49
|
|
|

05.06.2008, 09:51
|
|
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме: 90653
Репутация:
3
|
|
я знаю, но мне так хочется 
|
|
|

05.06.2008, 09:53
|
|
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме: 90653
Репутация:
3
|
|
и с асма хреново переводить(
скиньте плиз на дельфи
|
|
|

05.06.2008, 10:46
|
|
Members of Antichat - Level 5
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме: 10046345
Репутация:
4589
|
|
...
Код:
function GetPackerSecName: string;
const
SectName: array [0..33] of ShortString =('ASPack','.aspr',
'.code','kryptor','.lame','Guard','.shrink','.UPX1',
'PELockNT','PESHLD','Stone','.peshit','PEtite','SC v1.2',
'.shield','SPLASH','SVKP','tElock','CDLock','.UPX2',
'HYBRIS','.lcc','Xtreme','.pepack','ZCode','.PECrypt',
'ORiEN','.y0da','PUNiSHER','.stealth','.UPX0','.PKLITE',
'.arma','.nfo');
begin
Result := SectName[random(33)];
end;
function Reverse_DWORD(Add: DWORD): String;
var
I: integer;
S1, S2, TT: String[8];
begin
S1 := IntToHEX(Add, 8);
S2 := '';
for I := 1 to 4 do
begin
TT := copy(S1, 1, 2);
delete(S1, 1, 2);
S2 := TT + S2;
end;
Result := S2;
end;
function TfrmMain.AddNewSection(Sign: String): Boolean;
type
TSection = packed record
Name: array[0..7] of Char;
VirtualSize: DWORD;
VirtualAddress: DWORD;
PhysicalSize: DWORD;
PhysicalOffset: DWORD;
PointerToRelocations: DWORD;
PointerToLinenumbers: DWORD;
NumberOfRelocations: WORD;
NumberOfLinenumbers: WORD;
Characteristics: DWORD;
end;
var
NewSectionSize: integer;
FHandle: THandle;
OFS: OFSTRUCT;
BytesRead: DWORD;
EXESig: WORD;
PESig: DWORD;
PEHeaderOffset: DWORD;
ImageBase: DWORD;
EntryPointRVA: DWORD;
SizeOfImage: DWORD;
NumOfSections: WORD;
Sect_Align: DWORD;
Characteristics: DWORD;
Section: TSection;
I: DWORD;
OEP: DWORD;
ImSZ: DWORD;
VirAddr: DWORD;
PhyAddr: DWORD;
Num: Integer;
Byt: Byte;
TrashByte: String;
begin
Result := False;
if not FileExists(FileName.Text) then
begin
MsgError('File not found');
Exit;
end;
FHandle := OpenFile(PChar(FileName.Text), OFS, OF_READWRITE);
if (FHandle = INVALID_HANDLE_VALUE) then
begin
MsgError('Error at opening file');
Exit;
end;
ReadFile(FHandle, EXESig, SizeOf(EXESig), BytesRead, nil);
if EXESig <> $5A4D then
begin
MsgError('Invalid MZ file');
Exit;
end;
SetFilePointer(FHandle, $3C, nil, 0);
ReadFile(FHandle, PEHeaderOffset, SizeOf(PEHeaderOffset), BytesRead, nil);
if PEHeaderOffset = 0 then
begin
MsgError('PE header offset not found');
Exit;
end;
SetFilePointer(FHandle, PEHeaderOffset, nil, 0);
ReadFile(FHandle, PESig, SizeOf(PESig), BytesRead, nil);
if PESig <> $00004550 then
begin
MsgError('Invalid PE file');
Exit;
end;
SetFilePointer(FHandle, PEHeaderOffset + $16, nil, 0);
ReadFile(FHandle, Characteristics, SizeOf(Characteristics), BytesRead, nil);
if Characteristics and IMAGE_FILE_DLL <> 0 then
begin
MsgError('Can not protect a DLL. Sorry...');
Exit;
end;
SetFilePointer(FHandle, PEHeaderOffset + $50, nil, 0);
ReadFile(FHandle, SizeOfImage, SizeOf(SizeOfImage), BytesRead, nil);
SetFilePointer(FHandle, PEHeaderOffset + $34, nil, 0);
ReadFile(FHandle, ImageBase, SizeOf(ImageBase), BytesRead, nil);
SetFilePointer(FHandle, PEHeaderOffset + $28, nil, 0);
ReadFile(FHandle, EntryPointRVA, SizeOf(EntryPointRVA), BytesRead, nil);
SetFilePointer(FHandle, PEHeaderOffset + $06, nil, 0);
ReadFile(FHandle, NumOfSections, SizeOf(NumOfSections), BytesRead, nil);
SetFilePointer(FHandle, PEHeaderOffset + $38, nil, 0);
ReadFile(FHandle, Sect_Align, SizeOf(Sect_Align), BytesRead, nil);
SetFilePointer(FHandle, PEHeaderOffset + $F8, nil, 0);
for I := 1 to NumOfSections do
begin
ReadFile(FHandle, Section, SizeOf(Section), BytesRead, nil);
SetFilePointer(FHandle, -SizeOf(Section), nil, FILE_CURRENT);
section.Characteristics := $C0000040;
WriteFile(FHandle, Section, SizeOf(Section), BytesRead, nil);
end;
SetFilePointer(FHandle, PEHeaderOffset + $F8, nil, 0);
for I := 1 to NumOfSections do
begin
ReadFile(FHandle, Section, SizeOf(Section), BytesRead, nil);
if (EntryPointRVA >= Section.VirtualAddress)
and (EntryPointRVA < Section.VirtualAddress + Section.VirtualSize) then
Break;
end;
OEP := ImageBase + EntryPointRVA;
Sign := Sign + '68' + Reverse_DWORD(OEP) + 'C3';
NewSectionSize := length(Sign) div 2;
SetFilePointer(FHandle, PEHeaderOffset + $F8, nil, 0);
for I := 1 to NumOfSections do
ReadFile(FHandle, Section, SizeOf(Section), BytesRead, nil);
VirAddr := ((Section.VirtualAddress + Section.VirtualSize + Sect_Align-1)
div Sect_Align) * Sect_Align;
PhyAddr := Section.PhysicalOffset + Section.PhysicalSize;
SetFilePointer(FHandle, PEHeaderOffset + $F8 + NumOfSections * $28 - $28, nil, 0);
ReadFile(FHandle, Section, SizeOf(Section), BytesRead, nil);
with Section do
begin
VirtualAddress := VirAddr;
VirtualSize := NewSectionSize;
PhysicalOffset := PhyAddr;
PhysicalSize := NewSectionSize;
Characteristics := $C0000020;
StrPCopy(Name, GetPackerSecName);
end;
SetFilePointer(FHandle, PEHeaderOffset + $50, nil, 0);
ImSZ := VirAddr + Section.VirtualSize - section.PhysicalSize;
WriteFile(FHandle, ImSz, SizeOf(ImSz), BytesRead, nil);
SetFilePointer(FHandle, PEHeaderOffset + $F8 + NumOfSections * $28, nil, 0);
WriteFile(FHandle, Section, SizeOf(Section), BytesRead, nil);
Inc(NumOfSections);
SetFilePointer(FHandle, PEHeaderOffset + $06, nil, 0);
WriteFile(FHandle, NumOfSections, SizeOf(NumOfSections), BytesRead, nil);
//Add new section
SetFilePointer(FHandle, PEHeaderOffset + $50, nil, 0);
ReadFile(FHandle, I, SizeOf(I), BytesRead, nil);
Inc(I, NewSectionSize);
SetFilePointer(FHandle, PEHeaderOffset + $50, nil, 0);
WriteFile(FHandle, I, SizeOf(I), BytesRead, nil);
//Fix Image Size
SetFilePointer(FHandle, PEHeaderOffset + $1C, nil, 0);
ReadFile(FHandle, I, SizeOf(I), BytesRead, nil);
//Fix Size of Code
SetFilePointer(FHandle, Section.PhysicalOffset + Section.PhysicalSize -
NewSectionSize, nil, 0);
for Num := 0 to (Length(Sign) div 2) - 1 do
begin
TrashByte := copy(Sign, (num * 2 + 1), 2);
if TrashByte = '??' then TrashByte := '90';
Byt := StrToInt('$' + TrashByte);
WriteFile(FHandle, Byt, SizeOf(byt), BytesRead, nil);
end;
EntryPointRVA := Section.PhysicalOffset + Section.VirtualAddress
- Section.PhysicalOffset;
SetFilePointer(FHandle, PEHeaderOffset + $28, nil, 0);
WriteFile(FHandle, EntryPointRVA, SizeOf(EntryPointRVA), BytesRead, nil);
CloseHandle(FHandle);
frmLog._Log.Lines.Add('Trash bytes writed');
Result := True;
end;
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|