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