Понедельник, 07.10.2024, 08:08 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
Seek на HEX адресс
SlashДата: Вторник, 28.07.2015, 02:46 | Сообщение # 1
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
Добрый день, ребята. В exe файле по адресу 0041101E вызывается функция, в этот адресс мне записать вместо оригинальной команды свою - jmp мой адресс(EB FD), так вот, как с помощью Seek(F, ...) переместится по адресу 0041101E?

Так тоже пробовал - перемещает на 4mb
Код

SetFilePointer(f, $0041101E,0, 0);
 
Волк-1024Дата: Вторник, 28.07.2015, 17:09 | Сообщение # 2
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Перемещать указатель с помощью SetFilePointer, а писать в файл через WriteFile.

Гугли про перехват функций методом спайсинга. А вообще чтобы заменять оригинальные инструкции своей надо знать их длину, а для этого надо либо вручную смотреть, либо использовать дизассемблер длин, коих нормальных на делфи я не знаю, иначе есть высокий шнапс, что программа крашнится. И ещё нужно вычислить относительный адрес для прыжка.


Pascal, C\C++, Assembler, Python
 
SlashДата: Вторник, 28.07.2015, 18:19 | Сообщение # 3
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
А как смещение на точку входа определить? Сам то ее адресс нашел, W32Dasm мне пишет File Offset:0000617 - так вот как это смещение через Delphi определить и что это вообще?
 
Волк-1024Дата: Среда, 29.07.2015, 00:32 | Сообщение # 4
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Цитата Slash ()
А как смещение на точку входа определить?

ImageBase + AddressOfEntryPoint

Цитата Slash ()
так вот как это смещение через Delphi определить

Прочитать из PE заголовка:

Код

function GetEntryPoint(BaseAddress: DWORD): DWORD;
begin
   Result:=PImageNtHeaders(PImageDosHeader(BaseAddress)._lfanew +
         BaseAddress).OptionalHeader.AddressOfEntryPoint + BaseAddress;
end;    

Цитата Slash ()
что это вообще?

Начальный адрес исполнения программы.

И как я понимаю пишется инфектор файлов?


Pascal, C\C++, Assembler, Python
 
SlashДата: Четверг, 30.07.2015, 19:16 | Сообщение # 5
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
Цитата Волк-1024 ()
И как я понимаю пишется инфектор файлов?

Так точно, спасибо за код. Будем пробовать.
 
SlashДата: Четверг, 30.07.2015, 20:29 | Сообщение # 6
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
Цитата Волк-1024 ()
Начальный адрес исполнения программы.

Нет, мне не адресс этот нужен. Адресс этот я уже получил, мне нужно смещение.
Адресс - 00411217, File Offset - 00000617(вот это нужно)
 
SlashДата: Четверг, 30.07.2015, 21:38 | Сообщение # 7
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
ImgNt.OptionalHeader.AddressOfEntryPoint - SecHeader.VirtualAddress + SecHeader.PointerToRawData ; - вот так получил, но не во всех программах так выходит, к сожалению, только в тех где есть секция .text

Сообщение отредактировал Slash - Четверг, 30.07.2015, 21:45
 
Волк-1024Дата: Пятница, 31.07.2015, 02:50 | Сообщение # 8
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Цитата Slash ()
Нет, мне не адресс этот нужен

Спросил как получить точку входа - я показал..

Цитата Slash ()
ImgNt.OptionalHeader.AddressOfEntryPoint - SecHeader.VirtualAddress + SecHeader.PointerToRawData ;

С моей точки зрения вообще бессмыслица - из относительного адреса начала программы вычитается виртуальный указатель на секцию...

Цитата Slash ()
только в тех где есть секция .text

Это кодовая секция, она есть почти у всех.


Pascal, C\C++, Assembler, Python
 
SlashДата: Пятница, 31.07.2015, 18:00 | Сообщение # 9
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
Еще вопросик тогда, мои методы таковы:
Создал новую секцию, записал туда тело файлового инфектора;
Точку входа оригинальной программы поменял на Virtual Adress новой секции.

Но, почему-то инфицированная программа не работает? W32Dasm вообще не может перейти на точку входа инф. программы - в чем может быть причина?
 
Волк-1024Дата: Суббота, 01.08.2015, 00:25 | Сообщение # 10
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Телепаты в отпуске. Может прав у секции нет на выполнении, может адреса где-то неправильные, может просто код кривой - тут нужно корпеть с отладчком в зубах, чтобы узнать в чём проблема.

Pascal, C\C++, Assembler, Python
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz