не хочу очень сильно...

Тема в разделе "WASM.HEAP", создана пользователем ALEXA, 9 фев 2007.

Статус темы:
Закрыта.
  1. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    не хочу использовать директивы includelib include
    тем более не хочу добавлять библиотеки в командной строке линкера
    то есть после линкования получить исполняемый файл в котором таблица импорта в pe заголовке девствено чиста.

    но очень хочу использоать процедуру MessageBox


    как это сделать?

    PS отвечать желательно НЕ ОЧЕНЬ ПОДРОБНО.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    LoadLibrary?
     
  3. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    у меня таблица импорта очень пустая
    тоесть ВАЩЕ КАНкРЕТНО ПУСТАЯ
    то что я должна загрузить библиотеку это уже и так понятно
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Очень пустой ее делать нельзя. По крайней мере один импорт из kernel32.dll должен быть (например. ExitProcess).
    Дальше:
    1. читаем статьи о том, как искать базу kernel32
    2. читаем описание pe-формата (конкретно - формат директории экспорта)
    3. парсим экспорты kernel32.dll в памяти, чтобы найти адреса LoadLibrary и GetProcAddress
    4. Используем эти две функции для загрузки нужной либы и получения адреса какой-либо функции в ней.
     
  5. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    Я умею пользовать поиском и эту тему я уже прочитала и поняла и это мне не подходит.
    Если чиста значиТ чиста.
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    на форуме полно примеров поиска функции... и по имени и по хешу.
     
  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    тогда
    Код (Text):
    1. mov     eax, fs:30h
    2. mov     eax, [eax+0Ch]
    3. mov     eax, [eax+1Ch]
    4. mov     eax, [eax]
    5. mov     eax, [eax+8]    ; EAX = Kernel32.dll base
    и продолжаем с пункта 2
     
  8. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    ты либо не отвечай либо отвечай по теме
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если уж совсем нельзя -- то int 0x2E в помощь :).
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    а я все думал про ник, это Алёха или Алекса :))
     
  11. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    а еще я классно умею танцевать
    только это не по теме
     
  12. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    masm:
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. .data
    6. szLoadLibrary   db 'LoadLibraryA',0
    7. szUser32         db 'user32.dll',0
    8. szMessageBox  db 'MessageBoxA',0
    9.  
    10. szText            db 'Message text',0
    11. szCaption        db 'Message caption',0
    12.  
    13. .code
    14. assume fs:nothing
    15.  
    16. start:
    17.     mov     esi, fs:30h
    18.     mov     esi, [esi+0Ch]
    19.     mov     esi, [esi+1Ch]
    20.     mov     esi, [esi]
    21.     mov     esi, [esi+8]
    22.    
    23.     push    esi
    24.    
    25.     xor eax, eax
    26.     mov edi, esi
    27.    
    28.     add esi, [esi + 3Ch]
    29.     mov esi, [esi + 78h]
    30.     test    esi, esi
    31.     jz  err
    32.    
    33.     add esi, edi
    34.     mov ecx, [esi+20]
    35.    
    36.     mov ebx, [esi+28]
    37.     add ebx, edi
    38.    
    39.     mov edx, [esi+32]
    40.     add edx, edi
    41.    
    42. name_cmp_cycle:
    43.     mov esi, [edx]
    44.     add esi, edi
    45.     cmp dword ptr [esi], 'PteG'
    46.     jnz @f
    47.     cmp dword ptr [esi+4], 'Acor'
    48.     jnz @f
    49.     cmp dword ptr [esi+8], 'erdd'
    50.     jnz @f
    51.     cmp word ptr [esi+12], 'ss'
    52.     jz  found
    53.    
    54. @@:
    55.     add edx, 4     
    56.     add ebx, 4     
    57.     dec ecx
    58.     jnz name_cmp_cycle
    59.    
    60.     xor eax, eax
    61.     jmp err
    62.  
    63. found:
    64.     mov eax, [ebx]
    65.     add eax, edi
    66.  
    67. err:
    68.     pop esi             ; esi kernel base
    69.     test    eax, eax
    70.     jz  @f
    71.  
    72.     push    eax
    73.    
    74.     push    offset szLoadLibrary   
    75.     push    esi
    76.     call    eax ; GetProcAddress
    77.    
    78.     push    offset szUser32
    79.     call    eax ; LoadLibrary
    80.  
    81.     pop ebx
    82.  
    83.     push    offset szMessageBox
    84.     push    eax
    85.     call    ebx ; GetProcAddress
    86.    
    87.     push    0
    88.     push    offset szCaption
    89.     push    offset szText
    90.     push    0
    91.     call    eax ; MessageBox
    92.    
    93. @@:
    94.     retn
    95. end start
     
  13. marlboro

    marlboro New Member

    Публикаций:
    0
    Регистрация:
    26 июн 2005
    Сообщения:
    35
    Странный по-моему вопрос. Вариантов два либо адресс дает система (загрузчик) либо ищешь его сама, третьего не дано.
     
  14. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    вы пользутесь тем что кернел грузиться по умолчанию операционой системой
    я делаю допущение что по умолчанию загрущик не грузит кернел
     
  15. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    ага тогда ты хочешь сказать что венда не грузит кернел32 а грузит юзер так шо ли ?

    бред сивой кабылы чти мат часть
     
  16. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ALEXA
    А где по-твоему живёт загрузчик?
     
  17. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    именно так шо ли
     
  18. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Хм, прикольно. Аж интересно стало. Посмотреть бы на такой файл. Интересно, смогёт ли он вааще загрузиться? Даже если импорты и пусты, кернел по-любому должен быть. Ведь именно ж кернел запускает файл. Или нет?

    В любом случае надо искать длл-ки и функции в них. Не используя апи нельзя... эээ... использовать апи :) Если тебе не нравица (или не нужен) kernel32.dll, тогда используй тот же метод, предложенный rmn, но для ntdll.dll. В НТ системах эта библиотека будет однозначно. Единственная проблема - это то, что NtXxx/ZwXxx функции недокументированы!
     
  19. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    Весь вопрос и состоит в том что это метод мне не подходит не дла кернеле не для нтдлл
     
  20. ALEXA

    ALEXA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    26
    мне нужно решение
    для уровня привелегий кольца три и
    пустого адресного пространства
     
Статус темы:
Закрыта.