вопроc по IDA

Тема в разделе "WASM.RESEARCH", создана пользователем PsM, 1 мар 2006.

  1. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8
    подскажите, как можно заставить воспринимать содержимое регистра как указатель на структуру,

    Аналогично директиве ASM-а - assume esi:PTR DRIVER_OBJECT ?

    Что бы она вместо смещений писала наименования полей структуры ?
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Кажись, в ИДЕ такой фичи нет. Да и наверное быть не может - это же динамика, а ИДА только статику отображает.
     
  3. FKMA

    FKMA New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    13
    PsM

    Ты можешь только переименовать регистр (для отдельной функции). Будет типа ecx_MY_STRUCT.

    А с полями структуры проблем нет.

    Описание структуры создаешь сам (если стандартного нет), а потом смещения [ecx+8] меняешь на [ecx+MY_STRUCT.field_8]

    (Edit -> Operand Type -> offset -> Offset (struct), hotkey T).
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    PsM

    Намекни, что в регистр загружается адрес структуры.

    Т.е. в случае

    mov reg, offset mem

    или

    lea reg, mem

    опиши mem как структурную переменную (Alt-Q).

    Если регистр загружается значением, возвращаемым ф-цией,

    задай соотв. прототип этой ф-ции (Y).



    По-моему IDA должна просечь.
     
  5. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8


    Спасибо все получилось.






    Код (Text):
    1. ext:00010334 ; int __stdcall DriverEntry(PDRIVER_OBJECT DriverObject)
    2. .text:00010334                 public _DriverEntry@8
    3. .text:00010334 _DriverEntry@8  proc near
    4. .text:00010334
    5. .text:00010334 var_50          = dword ptr -50h
    6. .text:00010334 SourceString    = word ptr -28h
    7. .text:00010334 DeviceName      = UNICODE_STRING ptr -8
    8. .text:00010334 DriverObject    = dword ptr  8
    9.  


    Для .text:00010334 DriverObject = dword ptr 8

    (Edit -> Operand Type -> offset -> Offset (struct), hotkey T) не прокатывает :dntknw:. Может подскажите почему ?



    И еще попутно вопросик, что есть дополнительно к поставке к IDA 4.8 облегчающее ковыряние драйверов?

    Драйвер для PCI устройсва.

    Что можете посоваетовать ?
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    потому что это не то место. Ищи _использование_ driverObject и там уже "T"
     
  7. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8
    Еще вопросик

    подскажиет плиз как
    Код (Text):
    1. .text:00010429                 mov     [esi+(DRIVER_OBJECT.MajorFunction+8)], offset _dwTreeDrvClose@8 ; dwTreeDrvClose(x,x)
    2.  


    привести к такому виду
    Код (Text):
    1.  
    2. .text:00010429                 mov     [esi+(DRIVER_OBJECT.MajorFunction+IRP_MJ_CLOSE*4)], offset _dwTreeDrvClose@8 ; dwTreeDrvClose(x,x)
    3.  


    ?
     
  8. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Edit->OperandType->Manual
     
  9. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    PsM

    нужно завести константы и потом применить их к числу 8 в твоей строке



    ps: поздно увидел "*4" - как сделать такое - хз
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Реверсируешь программу? На С написана?
     
  11. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8
    реверсирую драйвер, к PCI плате,

    написанно с очень большой долей вероятности на MS VC6



    хочу сделать драйвер под линух,

    если конечно позволит время и хватит сил разобраться
     
  12. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    PsM





    Пользуйся "ручным" (Edit -> Operand type -> "Manual..." (Alt-F1)) изменением операндов. Опиши константу 'IRP_MJ_CLOSE', как '2' (например, сделай соответствующий enum), а дальше введи в строке диалога вместо '8' выражение 'IRP_MJ_CLOSE*4'. IDA проверит правильность всего выражения и внесет исправленный операнд в базу.

    Единственное "но". Если я правильно помню, то IDA "русских" версий 4.7 и 4.8 имеет в этом блоке ошибку, и даже в случае правильного выражения все равно выдает сообщение об ошибке (международная 4.7 работает нормально). Если это так, но ты уверен в правильности, просто проигнорируй ошибку - поставь в диалоге флаг "Allow not matched operand".
     
  13. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Sergey_R





    Лучше подключить библиотеку типов ntddk. Там, в частности, определены и константы IRP_*.
     
  14. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8


    У меня 4.8 Я добавлял стандартный Enum MACRO_IRP.



    Можно поподробней про библиотеку типов ntddk ?
     
  15. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    PsM



    А, ну значит IDA её сама подключила.





    А что собственно интересует?

    Эта библиотека построена на основе ntddk.h, т.е. содержит определения типов (и макросов) из этого хэдера.
     
  16. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8
    я в IDA не профессионал, разбирался с ней полность сам и могу не знать некоторых элементарных вещей...

    Я хотелось бы узнать что такое подключить библиотеку типов ntddk ?

    и еще попутно вопрос. При попытке скормить ntddk.h из микрософтовского DDK она не находит заголовочные файлы, в частности excpt.h, где мне можно указать для IDA пути к include директориям ?
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine


    Это значит, что определения из библиотеки становятся доступными для использования. Для этого в окне Type Libraries (Shift-F11) жмешь Ins и выбираешь желаемую библ из списка.





    Options->Compiler->Include dirs
     
  18. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8
    Спасибо всем за помощь.

    Возник вопросик очередной вопросик.

    File/Load file/Parse C header file... Ctrl+F9

    Обрабатываю файл - successfully compiled

    Где можно увидеть результаты обработки?

    Структуры определенные в обработанном заголовочном файле в IDA я не нашел...

    Константы определенные в нем тоже ...

    Может я не правильно понимаю назначение этого пункта ?
     
  19. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    PsM

    Результаты обработки сохраняются в локальной библиотеке типов базы. Т.е. процедура стандартная - Ins->Add standard structure...
     
  20. PsM

    PsM New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2006
    Сообщения:
    8
    спасибо, со структурами все понятно.

    IDA define обрабатывает ?

    определения вида:

    #define ResNoCompression 0x00

    ?