Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi]Объясните, пожалуйса, код 
:(
    Опции темы
000denmoroz000
Дата 20.1.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.7.2006

Репутация: нет
Всего: нет



Есть код:
Код


program pe_sections;

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils;

var
  file_h, file_sz, map_h: DWORD;
  map_addr: Pointer;
  dos_head: ^IMAGE_DOS_HEADER;
  pnt_head: ^IMAGE_NT_HEADERS;
  psec_head: ^IMAGE_SECTION_HEADER;
  i, j: DWORD;
  ent_sect, sect: string;
  e,BytesRead:DWORD;

begin
  if ParamCount=0 then halt
    else
    begin
    file_h:=CreateFile(PChar(ParamStr(1)),
        GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
      if file_h<>INVALID_HANDLE_VALUE then
        begin
          file_sz:=GetFileSize(file_h, nil);
          map_h:=CreateFileMapping(file_h, nil, PAGE_READWRITE or SEC_IMAGE, 0, file_sz, nil);
          if map_h<>0 then
            begin
              map_addr:=MapViewOfFile(map_h, FILE_MAP_ALL_ACCESS, 0, 0, 0);
              if map_addr<>nil then
                begin
                  dos_head:=map_addr;
                  pnt_head:=Pointer(DWORD(map_addr)+DWORD(dos_head._lfanew));
                  psec_head:=Pointer(DWORD(pnt_head)+$18);
                  psec_head:=Pointer(DWORD(psec_head)+pnt_head.FileHeader.SizeOfOptionalHeader);
                  SetFilePointer(file_h,pnt_head.OptionalHeader.AddressOfEntryPoint+$5E, nil, 0);
                  ReadFile(file_h, e, 4, BytesRead, nil);
                  e:=e-pnt_head.OptionalHeader.ImageBase;
                  SetFilePointer(file_h,dos_head._lfanew+$28, nil, 0);
                  WriteFile(file_h, e, 4, BytesRead, nil);
                  UnMapViewOfFile(map_addr);
                  CloseHandle(map_h);
                  CloseHandle(file_h);
                end;
            end;
        end;
      end;
end.

Не могли бы объяснить что он делает?

Как я понимаю он изменяет адрес EntryPoint на тот, который записан по смещению +$5E от начала кода. Да?
PM MAIL   Вверх
gambit
Дата 20.1.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Где ты его взял?
Простой запуск в delphi показывает что часть кода вообще ничего не делает!
Код

Компоновка
  [Совет] Project2.dpr(37): Value assigned to 'psec_head' never used
  [Совет] Project2.dpr(36): Value assigned to 'psec_head' never used
  [Совет] Project2.dpr(15): Variable 'i' is declared but never used in 'pe_sections'
  [Совет] Project2.dpr(15): Variable 'j' is declared but never used in 'pe_sections'
  [Совет] Project2.dpr(16): Variable 'ent_sect' is declared but never used in 'pe_sections'
  [Совет] Project2.dpr(16): Variable 'sect' is declared but never used in 'pe_sections'


Если ты не знаеш что он делает, то зачем он тебе?
PM MAIL ICQ Skype   Вверх
W4FhLF
Дата 20.1.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Ну вообще, что бы этот код не делал он не рабочий. По-крайней мере он не всегда будет верно работать. Потому что поле AddressOfEntryPoint это RVA, а тут с ним работают как с Offset. Очень грубая ошибка. Ну а по логике этот код читает 4 байта по адресу AddressOfEntryPoint+$5E отнимает от этого значения ImageBase и записывает на место старого AddressOfEntryPoint в заголовок.

Это сообщение отредактировал(а) W4FhLF - 20.1.2007, 17:41


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
000denmoroz000
Дата 20.1.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.7.2006

Репутация: нет
Всего: нет



gambit
это я знаю... А насчёт переменных - может он обрезан... Код принёс друг как часть лечилки вируса Win95.CIH

Добавлено @ 17:50 
W4FhLF
Цитата

Ну вообще, что бы этот код не делал он не рабочий. По-крайней мере он не всегда будет верно работать.


Он будет верно работать только н заражённых файлах...

PM MAIL   Вверх
W4FhLF
Дата 20.1.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 1
Всего: 121



Ну не знаю каким образом идёт заражение файлов этим вирусом, но в файлах, где SectionAlignment <> FileAlignment он работать не будет, потому, что в файле на диске по смещению AddressOfEntryPoint+$5E будут находится совсем иные данные, нежели после загрузки исполняемого образа в память. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
sergejzr
Дата 20.1.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.