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
Группа: Модераторы
Сообщений: 467
Статус: 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
Группа: Модераторы
Сообщений: 467
Статус: 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
Группа: Модераторы
Сообщений: 467
Статус: 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
Группа: Модераторы
Сообщений: 467
Статус: Offline
|
Телепаты в отпуске. Может прав у секции нет на выполнении, может адреса где-то неправильные, может просто код кривой - тут нужно корпеть с отладчком в зубах, чтобы узнать в чём проблема.
Pascal, C\C++, Assembler, Python
|
|
|
|
|