Вопрос Парсер импортов

Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
656
Реакции[?]
102
Поинты[?]
65K
C++:
std::unordered_map<std::string, std::ptrdiff_t> get_IAT( HINSTANCE module ) {
    std::unordered_map<std::string, std::ptrdiff_t> IAT;
    std::uintptr_t module_base = reinterpret_cast<std::uintptr_t>( module );

    auto import_descriptor = reinterpret_cast<PIMAGE_IMPORT_DESCRIPTOR>( ( reinterpret_cast<PIMAGE_NT_HEADERS>( module_base + ( reinterpret_cast<PIMAGE_DOS_HEADER>( module_base ) )->e_lfanew ) )->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + module_base );
    while ( import_descriptor->Name )
    {
        auto og_first_thunk = reinterpret_cast<PIMAGE_THUNK_DATA>( module_base + import_descriptor->OriginalFirstThunk );
        auto first_thunk = reinterpret_cast<PIMAGE_THUNK_DATA>( module_base + import_descriptor->FirstThunk );

        while ( og_first_thunk->u1.AddressOfData )
        {
            const auto& method_name = reinterpret_cast<PIMAGE_IMPORT_BY_NAME>( module_base + og_first_thunk->u1.AddressOfData );
            IAT[method_name->Name] = first_thunk->u1.Function;

            ++og_first_thunk;
            ++first_thunk;
        }

        import_descriptor++;
    }

    return IAT;
}

int main( ) {
    const auto& mod = GetModuleHandleA( nullptr );
    auto iat = get_IAT( mod );
    auto max_name_length = *std::max_element( iat.begin( ), iat.end( ), []( const std::pair<std::string, std::ptrdiff_t>& p1, const std::pair<std::string, std::ptrdiff_t>& p2 ) { return p1.first.size() < p2.first.size(); } );

    for ( auto& imp : iat ) {
        std::cout << imp.first << std::setw( max_name_length.first.size( ) - imp.first.size( ) + 1) << " " << std::setw( 1 ) << "0x" << std::hex << imp.second << std::endl;
    }

    std::cout << std::setw( ( max_name_length.first.size( ) + 12 ) / 2) << max_name_length.first.size( ) << std::endl;
}
хд
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как руками получить iat import ?
если есть пешник, то просто пройдись по таблице, если нету, то найди iat, получи адресс импорта, получи дллку по адресу, парси экспорт таблицу дллки, и получай нейм импорта
 
EFI_COMPROMISED_DATA
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
920
Реакции[?]
1,632
Поинты[?]
85K
const auto& method_name = reinterpret_cast<PIMAGE_IMPORT_BY_NAME>( module_base + og_first_thunk->u1.AddressOfData );
зачем тебе ссылка на указатель
к тому же у тебя нет хендла импортов по ординалам(без имени)

Мастер есенин эксперт по импортам таркова, напиши ему!
huh?
 
Похожие темы
Сверху Снизу