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
|
|
| |