fasm+bound import

Тема в разделе "WASM.BEGINNERS", создана пользователем n1kt0, 13 июл 2009.

  1. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    Как добраться до Bound Import Table address ?
    есть впринципе кусок кода на тасме:
    Код (Text):
    1. mov edi,pPE
    2. assume edi:ptr IMAGE_NT_HEADERS
    3. mov eax,[edi].OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY * IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress
    обьясните как на фасм это переделать ? И подскажите саму суть данной инструкции:)
     
  2. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    mov eax,[edi + IMAGE_NT_HEADERS.OptionalHeader.DataDirectory[sizeof IMAGE_DATA_DIRECTORY * IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress]
     
  3. Marazm

    Marazm Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    95
    Видимо что-то вроде
    Код (Text):
    1. mov edi,[pPE]
    2. mov eax,[edi+IMAGE_NT_HEADERS.OptionalHeader.DataDirectoryBoundImport.VirtualAddress]
    а суть данной инструкции как раз в получении адреса.
     
  4. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    нет, неверно!
     
  5. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    ну поэкспериментируйте sizeof в фасме не оператор, а реализуется макросами. далее непонятно как с индексами там. вы inc которым пользуетесь пропостите, ато это гадание на кофейной гуще. но общий принцип я вам сказал. всякие поля таблиц фасмом преобразуются в смещения от начала таблицы. вы можете рассчитать это смещение предварительно, например через макропернеменную
     
  6. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    Инклюд сам делал из winnt.h, который брал c Microsoft Visual Studio, так что там впринципе с индексами все впорядке
     
  7. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    да понятно, что вы его не выдумали сами. но как вам ответить если вы основываетесь на том, что есть только у вас? на основании того, чем пользуюсь я? думаете подойдет?
     
  8. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    В общем нужно добраться до pe+0xd0
    Посмотрите что это, может сможете посоветовать.
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    предположительно
    mov eax,[edi + IMAGE_NT_HEADERS.OptionalHeader.DataDirectory + IMAGE_DATA_DIRECTORY.sizeof * IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT + IMAGE_DATA_DIRECTORY.VirtualAddress]

    этот кусок
    IMAGE_DATA_DIRECTORY.sizeof
    поправьте как у вас sizeof структур организован.
     
  10. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    mov edi,[pPE]
    mov eax,dword [edi + IMAGE_NT_HEADERS.OptionalHeader.DataDirectory + sizeof.IMAGE_DATA_DIRECTORY * IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT + IMAGE_DATA_DIRECTORY.VirtualAddress]

    в собранном виде:
    MOV EDI,DWORD PTR DS:[403332]
    MOV EAX,DWORD PTR DS:[EDI+FE]


    а должно быть:
    MOV EDI,DWORD PTR DS:[403332]
    MOV EAX,DWORD PTR DS:[EDI+D0]
     
  11. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    да думаю тут по кофейной гуще гадать действительно не стоит. Где бы почитать про структуру IMAGE_DATA_DIRECTORY и несколько примеров на фасме:)
     
  12. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    чтоб не морочить голову, в аттаче фасм инк, которым пользуюсь я (делал его не я, потому и спасибо не мне) и в котором тот метод, что указан выше проходит. только названия структур/полей скорректируйте. этот инк из ов хидера перештопан
     
  13. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    да нет уж, давайте поморочим голову:)
     
  14. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    mov eax,dword [edi+IMAGE_NT_HEADERS.OptionalHeader.DataDirectory+(sizeof.IMAGE_DATA_DIRECTORY*IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT+2)]
    вот это работает, только хз откуда взялись эти +2 :)
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    ухх. ну возьмите по отдельности
    IMAGE_NT_HEADERS.OptionalHeader

    IMAGE_NT_HEADERS.OptionalHeader.DataDirectory

    sizeof.IMAGE_DATA_DIRECTORY

    IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT

    и посмотрите что из них у вас неправильно считается
     
  16. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    LEA eax,dword [edi+IMAGE_NT_HEADERS.OptionalHeader] указывает на:
    Код (Text):
    1. Characteristics = EXECUTABLE_IMAGE|32BIT_MACHINE|RELOCS_STRIPPED|LINE_NUMS_STRIPPED|LOCAL_SYMS_STRIPPED
    LEA eax,dword [edi+IMAGE_NT_HEADERS.OptionalHeader.DataDirectory] указывает на:
    Код (Text):
    1. 00A40166   00           DB 00
    2. 00A40167   00           DB 00
    3. 00A40168   00000000     DD 00000000          ;  Export Table address = 0
    LEA eax,dword [edi+IMAGE_NT_HEADERS.OptionalHeader.DataDirectory+(sizeof.IMAGE_DATA_DIRECTORY)]
    Код (Text):
    1. 00A4016E   00           DB 00
    2. 00A4016F   00           DB 00
    3. 00A40170   802B0100     DD 00012B80          ;  Import Table address = 12B80
    4. 00A40174   8C000000     DD 0000008C          ;  Import Table size = 8C (140.)
    и контрольный:
    mov eax,dword [edi+IMAGE_NT_HEADERS.OptionalHeader.DataDirectory+(sizeof.IMAGE_DATA_DIRECTORY*IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT)] указывает на:
    Код (Text):
    1. 00A401BE   00           DB 00
    2. 00A401BF   00           DB 00
    3. 00A401C0   60020000     DD 00000260          ;  Bound Import Table address = 260
    4. 00A401C4   80000000     DD 00000080          ;  Bound Import Table size = 80 (128.)
    т.е реально идет недобор в 2 байта:)

    структуры мои:
    Код (Text):
    1. [b]struct IMAGE_NT_HEADERS [/b]
    2.     Signature               dw ?
    3.     FileHeader          IMAGE_FILE_HEADER      
    4.     OptionalHeader      IMAGE_OPTIONAL_HEADER  
    5. ends
    6.  
    7. [b]struct IMAGE_OPTIONAL_HEADER[/b]
    8. Magic                   dw ?        ;->0x18
    9. MajorLinkerVersion          db ?        ;->0x1A
    10. MinorLinkerVersion          db ?        ;->0x1B
    11. SizeOfCode              dd ?        ;->0x1C
    12. SizeOfInitializedData           dd ?        ;->0x20
    13. SizeOfUninitializedData         dd ?        ;->0x24
    14. AddressOfEntryPoint             dd ?        ;->0x28
    15. BaseOfCode              dd ?        ;->0x2c
    16. BaseOfData              dd ?        ;->0x30
    17. ImageBase               dd ?        ;->0x34
    18. SectionAlignment            dd ?        ;->0x38
    19. FileAlignment               dd ?        ;->0x3c
    20. MajorOperatingSystemVersion         dw ?        ;->0x40
    21. MinorOperatingSystemVersion         dw ?        ;->0x42
    22. MajorImageVersion           dw ?        ;->0x44
    23. MinorImageVersion           dw ?        ;->0x46
    24. MajorSubsystemVersion           dw ?        ;->0x48
    25. MinorSubsystemVersion           dw ?        ;->0x4A
    26. Win32VersionValue           dd ?        ;->0x4C
    27. SizeOfImage                 dd ?        ;->0x50
    28. SizeOfHeaders               dd ?        ;->0x54
    29. CheckSum                dd ?        ;->0x58
    30. Subsystem               dw ?        ;->0x5C
    31. DllCharacteristics          dw ?        ;->0x5E
    32. SizeOfStackReserve          dd ?        ;->0x60
    33. SizeOfStackCommit           dd ?        ;->0x64
    34. SizeOfHeapReserve           dd ?        ;->0x68
    35. SizeOfHeapCommit            dd ?        ;->0x6C
    36. LoaderFlags                 dd ?        ;->0x70
    37. NumberOfRvaAndSizes             dd ?        ;->0x74
    38. DataDirectory   rb (sizeof.IMAGE_DATA_DIRECTORY*16)     ;->0x7C
    39. ends
    40.  
    41. [b]struct IMAGE_DATA_DIRECTORY[/b]
    42. VirtualAddress              dd ?
    43. Size                    dd ?
    44. ends
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    так, делаете так

    int3
    mov eax,IMAGE_NT_HEADERS.OptionalHeader
    mov eax,IMAGE_NT_HEADERS.OptionalHeader.DataDirectory
    mov eax,sizeof.IMAGE_DATA_DIRECTORY
    mov eax,IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT

    компилите, пускаете и сморите в дебугере после каждой команды что у вас в еах (можно и по другому)
    делаете тоже через С(++) и сверяете. где числа разойдутся, там и проверяйте что вы криво наконвертили.
    или пользуйтесь инком доброй секретарши
     
  18. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    да уж. Я кстати то и сделал в предыдущем посте своем. mov ничего не дал бы, а вот lea дало эффективные адреса смещения. Я кстати и структуры выложил. Вы не внимательный;)
     
  19. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    думаете я все смещения на память знаю?

    скам
    mov eax,IMAGE_NT_HEADERS.OptionalHeader
    запишет в еах число, смещение от начала структуры и до указанного поля в байтах. и так по всем в порядке возрастания. а потом тупо считаете по Сшному хидеру (а лучше заставьте компилер посчитать за вас). где числа разойдутся, там и ошибка. 2 байта ошибки говорит, что вы гдето dw и dd перепутали. а все эти mov eax, ... просто чтоб уменьшить область поиска
     
  20. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    LEA eax,dword [edi+IMAGE_NT_HEADERS.OptionalHeader] указывает на:
    указывает на Characteristics, а не на Magic, вот в чем вопрос. Дальше и ходить ненужно