Граббер адресов по уже известным именам

Тема в разделе "WASM.WIN32", создана пользователем Vo1T, 9 авг 2009.

  1. Vo1T

    Vo1T New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    8
    Задача архисложная ... нужно найти адрес функции по имени из DLL загруженной в некий процесс (есть несколько процедур у которых уже известен адрес) если кто с таким сталкивался или видел ссылочку на пример, хоть что то ... помогите
     
  2. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    ну если я правильно понял задачу... В процеес,в котором загружена длл,инжектишь код, который из PEB получает ImageBase библиотеки, и вызываешь GetProcAddress. Ну или руками разобрать таблицу экспорта.
     
  3. Vo1T

    Vo1T New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    8
    Вот ... мне это и нужно сделать ... не откажусь от примера на С++
     
  4. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    готового кода не будет
     
  5. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    какая цель получения адресов? может можно все проше сделать...
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Пример для си:
    Код (Text):
    1. 0x55, 0x8B, 0xEC, 0x83, 0xC4, 0xF4, 0x53, 0x56, 0x57, 0x55,
    2. 0xE8, 0x00, 0x00, 0x00, 0x00, 0x81, 0x04, 0x24, 0xAC, 0x00,
    3. 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x81, 0x04, 0x24,
    4. 0x5B, 0x01, 0x00, 0x00, 0x64, 0xFF, 0x35, 0x00, 0x00, 0x00,
    5. 0x00, 0x64, 0x89, 0x25, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5D,
    6. 0x08, 0x8D, 0x45, 0xF8, 0x50, 0x53, 0xE8, 0xC7, 0x00, 0x00,
    7. 0x00, 0x85, 0xC0, 0x8B, 0x55, 0xF8, 0x0F, 0x85, 0x85, 0x00,
    8. 0x00, 0x00, 0x8B, 0x42, 0x78, 0x85, 0xC0, 0x74, 0x7E, 0x03,
    9. 0xC3, 0x89, 0x45, 0xFC, 0x8B, 0x70, 0x20, 0x85, 0xF6, 0x74,
    10. 0x79, 0x8B, 0x40, 0x18, 0x85, 0xC0, 0x74, 0x72, 0x89, 0x45,
    11. 0xF4, 0x03, 0xF3, 0x33, 0xFF, 0x8B, 0x06, 0x03, 0xC3, 0x50,
    12. 0xFF, 0x75, 0x0C, 0xE8, 0x65, 0x00, 0x00, 0x00, 0x0B, 0xC0,
    13. 0x74, 0x33, 0x8B, 0x4D, 0xFC, 0x8B, 0x41, 0x24, 0x03, 0xC3,
    14. 0x0F, 0xB7, 0x3C, 0x78, 0x3B, 0x79, 0x10, 0x72, 0x03, 0x2B,
    15. 0x79, 0x10, 0x47, 0x8B, 0x71, 0x1C, 0x03, 0xF3, 0x8B, 0x04,
    16. 0xBE, 0x85, 0xC0, 0x8B, 0x5D, 0x14, 0x74, 0x2F, 0x83, 0x7D,
    17. 0x10, 0x00, 0x74, 0x03, 0x03, 0x45, 0x08, 0x89, 0x03, 0x33,
    18. 0xC0, 0xEB, 0x0E, 0x83, 0xC6, 0x04, 0x47, 0xFF, 0x4D, 0xF4,
    19. 0x75, 0xB3, 0xB8, 0x7A, 0x00, 0x00, 0xC0, 0x64, 0x8F, 0x05,
    20. 0x00, 0x00, 0x00, 0x00, 0x8D, 0x64, 0x24, 0x0C, 0x5F, 0x5E,
    21. 0x5B, 0xC9, 0xC2, 0x10, 0x00, 0xB8, 0x7B, 0x00, 0x00, 0xC0,
    22. 0xEB, 0xE7, 0xB8, 0xFF, 0x00, 0x00, 0xC0, 0xEB, 0xE0, 0x55,
    23. 0x8B, 0xEC, 0x56, 0x8B, 0x4D, 0x08, 0x8B, 0x55, 0x0C, 0x33,
    24. 0xF6, 0x8A, 0x04, 0x0E, 0x3A, 0x04, 0x16, 0x75, 0x0E, 0x46,
    25. 0x84, 0xC0, 0x75, 0xF3, 0x8D, 0x44, 0x0E, 0xFF, 0x2B, 0x45,
    26. 0x08, 0xEB, 0x02, 0x33, 0xC0, 0x5E, 0xC9, 0xC2, 0x08, 0x00,
    27. 0x55, 0x8B, 0xEC, 0x55, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x81,
    28. 0x04, 0x24, 0x5A, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00,
    29. 0x00, 0x81, 0x04, 0x24, 0x5D, 0x00, 0x00, 0x00, 0x64, 0xFF,
    30. 0x35, 0x00, 0x00, 0x00, 0x00, 0x64, 0x89, 0x25, 0x00, 0x00,
    31. 0x00, 0x00, 0x8B, 0x55, 0x08, 0xB8, 0x7B, 0x00, 0x00, 0xC0,
    32. 0x66, 0x81, 0x3A, 0x4D, 0x5A, 0x75, 0x2A, 0x03, 0x52, 0x3C,
    33. 0x81, 0x3A, 0x50, 0x45, 0x00, 0x00, 0x75, 0x1F, 0x66, 0x81,
    34. 0x7A, 0x14, 0xE0, 0x00, 0x75, 0x17, 0x66, 0x81, 0x7A, 0x04,
    35. 0x4C, 0x01, 0x75, 0x0F, 0x66, 0xF7, 0x42, 0x16, 0x00, 0x01,
    36. 0x74, 0x07, 0x8B, 0x4D, 0x0C, 0x33, 0xC0, 0x89, 0x11, 0x64,
    37. 0x8F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x64, 0x24, 0x0C,
    38. 0xC9, 0xC2, 0x08, 0x00, 0x8B, 0x64, 0x24, 0x08, 0x33, 0xC0,
    39. 0x8B, 0x6C, 0x24, 0x0C, 0xFF, 0x64, 0x24, 0x08
    40.  
    41. NTSTATUS
    42. GetProcedureAddress(
    43.     IN PVOID ImageBase,
    44.     IN PSTR EntryName,
    45.     IN BOOLEAN RvaOrAddress,
    46.     OUT PVOID *Entry
    47.     );
     
  7. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    интересно, кто-то еще кроме клерка пишет в таком виде?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    o14189
    Собственно чем вид не нравится ??
     
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    o14189
    это код в шелл стиле, чем он тебе не угодил?
    распространён в секурите и хакинге.
    если нечего сказать, не надо баламутить :)
     
  10. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    )ладно
     
  11. Vo1T

    Vo1T New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    8
    wsd
    Очень смешно ... увы Ты не угадал цель простая тренер для игры
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Код (Text):
    1. PVOID
    2. NTAPI
    3. GetProcedureAddressEx(
    4.                       IN PVOID Base,
    5.                       IN PCHAR FunctionName OPTIONAL,
    6.                       IN PVOID FunctionEntry OPTIONAL
    7.                       )
    8. {
    9.   PIMAGE_DOS_HEADER mz;
    10.   PIMAGE_FILE_HEADER pfh;
    11.   PIMAGE_OPTIONAL_HEADER poh;
    12.   PIMAGE_EXPORT_DIRECTORY pexd;
    13.   PULONG AddressOfFunctions;
    14.   PULONG AddressOfNames;
    15.   PUSHORT AddressOfNameOrdinals;
    16.   ULONG i;
    17.  
    18.   // Get headers
    19.   *(PUCHAR*)&mz = (PUCHAR)Base;
    20.   *(PUCHAR*)&pfh = (PUCHAR)Base + mz->e_lfanew + sizeof(IMAGE_NT_SIGNATURE);
    21.   *(PVOID*)&poh = pfh + 1;
    22.  
    23.   // Get export
    24.   *(PUCHAR*)&pexd = (PUCHAR)Base + poh->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
    25.   *(PUCHAR*)&AddressOfFunctions = (PUCHAR)Base + pexd->AddressOfFunctions;
    26.   *(PUCHAR*)&AddressOfNames = (PUCHAR)Base + pexd->AddressOfNames;
    27.   *(PUCHAR*)&AddressOfNameOrdinals = (PUCHAR)Base + pexd->AddressOfNameOrdinals;
    28.  
    29.   // Find function
    30.   for( i=0; i<pexd->NumberOfNames; i++ )
    31.   {
    32.     PCHAR name = ((char*)Base + AddressOfNames[i]);
    33.     PVOID addr = (PVOID*)((ULONG)Base + AddressOfFunctions[AddressOfNameOrdinals[i]]);
    34.  
    35.     if (ARGUMENT_PRESENT (FunctionName))
    36.     {
    37.       if( !strcmp( name, FunctionName ) )
    38.       {
    39.         return addr;
    40.       }
    41.     }
    42.     else if (ARGUMENT_PRESENT (FunctionEntry))
    43.     {
    44.       if (FunctionEntry == addr)
    45.         return name;
    46.     }
    47.     else
    48.     {
    49.       ASSERTMSG ("SHOULD NOT REACH HERE", ARGUMENT_PRESENT(FunctionName) || ARGUMENT_PRESENT(FunctionEntry));
    50.     }
    51.   }
    52.  
    53.   return NULL;
    54. }
    Позволяет делать поиск точки входа по имени или же имени по точке входа (соответственно нужно задать один из последних двух параметров).