Сейчас на форуме: asfa, _MBK_ (+8 невидимых)

 eXeL@B —› Вопросы новичков —› вопрос по длл в висте
Посл.ответ Сообщение

Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 декабря 2009 20:20
· Личное сообщение · #1

Всем доброго времени суток.
Проблема следующая, если я открываю длл в хп в любом ПЕ редакторе и открываю в олли, то данные о ImageBase и о AddressOfEntryPoint совпадают, а если я делаю тоже самое в висте, то олли показывает совершенно другое что PE редактор, соответсвенно после патчинга длл не работает (:
все длл "родные" т.е. из папки system32
Может быть кто нибудь сталкивался с такой проблемой?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 01 декабря 2009 22:17
· Личное сообщение · #2

ImageBase и AddressOfEntryPoint из заголовка не могут не совпадать.
Другой вопрос, что при загрузке файла для длл, а для ехе с релоками в висте тоже, база может отличаться от дефолтной. Но при этом все РВА, естественно, не меняются, можешь их юзать для ориентирования.



Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 декабря 2009 23:24
· Личное сообщение · #3

Archer
спасибо за ответ, попробую



Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 декабря 2009 00:04
· Личное сообщение · #4

не особо все понял.

я делаю так
Code:
  1.  LPVOID lpImage = MapFileToMemory( lpszFileName, &dwSize );
  2.    
  3.     PIMAGE_NT_HEADERS pHeaders = (PIMAGE_NT_HEADERS)((ULONG)lpImage + ((PIMAGE_DOS_HEADER)lpImage)->e_lfanew);
  4.     PIMAGE_OPTIONAL_HEADER poh = &(pHeaders->OptionalHeader);
  5.     PIMAGE_SECTION_HEADER  psh = (PIMAGE_SECTION_HEADER)( (DWORD)poh + sizeof(IMAGE_OPTIONAL_HEADER) );
  6.  
  7.     PUCHAR lpAddressOfEntryPoint = (PUCHAR)pHeaders->OptionalHeader.AddressOfEntryPoint;
  8.  
  9.     for( DWORD i = 0; i < pHeaders->FileHeader.NumberOfSections; i++, psh++ )
  10.     {
  11.                  // determine if entry point is in this section
  12.                  if ( psh->VirtualAddress < (DWORD)lpAddressOfEntryPoint && psh->VirtualAddress + psh->SizeOfRawData > (DWORD)lpAddressOfEntryPoint )
  13.                  {
  14.                         // get address relative to beginning of section
  15.                         lpAddressOfEntryPoint = (PUCHAR)((DWORD)lpAddressOfEntryPoint - (DWORD)psh->VirtualAddress);
  16.                         // set physical address
  17.             lpAddressOfEntryPoint = (PUCHAR)((DWORD)psh->PointerToRawData + (DWORD)lpAddressOfEntryPoint + (DWORD)lpImage);
  18.                  }
  19.          }
  20.  
  21. //дальше уже патчу сам код


но после открытия самого процесса в который должна попасть длл в Olly, если взглянуть на Executable modules, то моя длл находится в списке первой и уже по другому адресу что была, соответсвенно ничего не работает, а по ентри поинту в дллке находится мой код, но кривой, каша, повторюсь в хп все нормально, посоветуйте куда копать.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 декабря 2009 18:18 · Поправил: Модератор
· Личное сообщение · #5

Во-первых, не надо подряд ляпать кучу постов.
Во-вторых, всё в твоих руках, возьми и по своему собственному коду пройдись под отладчиком и посмотри, что он не туда пишет и почему.
В-третьих, непонятно, как маппинг происходит. Возможно, файл в памяти уже замаплен с виртуальными адресами, тогда и надо играться с указателями на них, а не на Raw.
В-четвёртых, твой код может быть релоками попорчен.
В-пятых, ничего не выложил толком.



Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 декабря 2009 18:34
· Личное сообщение · #6

извеняюсь за кучу постов, спасибо за ответ



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 04 декабря 2009 16:37
· Личное сообщение · #7

megaaa пишет:
соответсвенно после патчинга длл не работает

В DLL можно патчить либо команды вообще без адресных составляющих, либо команды типа jump по относительному адресу. Все остальное требует коррекции таблицы релоков. На этом "горят" все новички.


 eXeL@B —› Вопросы новичков —› вопрос по длл в висте
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати