ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Создание новой секции
  #1  
Старый 04.06.2008, 23:14
disasembler
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме:
90653

Репутация: 3
По умолчанию Создание новой секции

Такой вопрос:
пишется прога на дельфи, надо создать секцию в РЕ файле, чтобы файл не грохнулся, в гугле для дельфи не нашел, кто может, выложите/скиньте исходник
 
Ответить с цитированием

  #2  
Старый 04.06.2008, 23:22
desTiny
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
 
Ответить с цитированием

  #3  
Старый 04.06.2008, 23:25
GALIAFF
Познающий
Регистрация: 28.09.2007
Сообщений: 56
Провел на форуме:
4328058

Репутация: 86
Отправить сообщение для GALIAFF с помощью ICQ
По умолчанию

кури доки по ре формату. потом хоть на брэйнфаке напишешь
 
Ответить с цитированием

  #4  
Старый 05.06.2008, 00:21
disasembler
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме:
90653

Репутация: 3
По умолчанию

все вроде нормально делается, секция создается, но винда при попытке запуска говорит, что данный файл не является РЕ - файлом

если хотите, могу выложить исходник, как это делается
 
Ответить с цитированием

  #5  
Старый 05.06.2008, 01:19
x0man
Познающий
Регистрация: 24.02.2006
Сообщений: 34
Провел на форуме:
136883

Репутация: 50
По умолчанию

Показывай. и говори не "как это делается", а "как этого делать нельзя" ))
ибо по твоим словам не работает вещь...
 
Ответить с цитированием

2x0man:
  #6  
Старый 05.06.2008, 08:43
disasembler
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме:
90653

Репутация: 3
По умолчанию 2x0man:

выложу сорец, помоги с исправлением
http://v0id.izi.su/crypter.rar - сам сорец
 
Ответить с цитированием

  #7  
Старый 05.06.2008, 09:38
taha
Постоянный
Регистрация: 20.08.2006
Сообщений: 327
Провел на форуме:
2472378

Репутация: 1077
По умолчанию

Во-первых: disassembler

Заражение Часть I / Создаем секцию
http://www.gfs-team.ru/?act=articles&pact=49
 
Ответить с цитированием

  #8  
Старый 05.06.2008, 09:51
disasembler
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме:
90653

Репутация: 3
По умолчанию

Цитата:
Во-первых: disassembler
я знаю, но мне так хочется
 
Ответить с цитированием

  #9  
Старый 05.06.2008, 09:53
disasembler
Познающий
Регистрация: 24.03.2008
Сообщений: 35
Провел на форуме:
90653

Репутация: 3
По умолчанию

и с асма хреново переводить(
скиньте плиз на дельфи
 
Ответить с цитированием

  #10  
Старый 05.06.2008, 10:46
BlackSun
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;
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мультимедийные Обучающие Курсы TeachPro Java VenTeL ПО для Web разработчика 8 24.04.2008 15:38



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ