• XSS.stack #1 – первый литературный журнал от юзеров форума

Добавление записи в Пеб о ДЛЛ

rtkm

(L3) cache
Пользователь
Регистрация
16.01.2013
Сообщения
159
Реакции
71
Загружаю ДЛЛ в память, запускаю ее, но почемуто не работает как надо. Подозреваю что это иза того что нет ее в списке модулец.
Может есть у кого функция что бы добавить инфу про ДЛЛ туда.

У меня есть наработки , но почемуто не могу ЕП поставить. точней ставлю , а она не отображается в списке модуля.

П.С. Спасибо за помощь.
 
Да продебагил все.
Вызначает ЕОП норм, и вроде как пишет в процесс, но в модуль листе не отображается"
 
Код:
    bool AddPebDLl(HMODULE base_address, wchar_t *name){
     
            PLDR_DATA_TABLE_ENTRY new_entry = LdrpAllocateEntry();
     
            PIMAGE_NT_HEADERS NtHeaders;
     
            NtHeaders = (PIMAGE_NT_HEADERS)xRtlImageNtHeader(base_address);
            new_entry->DllBase = base_address;
            new_entry->SizeOfImage=NtHeaders->OptionalHeader.SizeOfImage;
            new_entry->EntryPoint=(PVOID)(base_address + NtHeaders->OptionalHeader.AddressOfEntryPoint);
     
            new_entry->FullDllName.MaximumLength = MAX_PATH;
            new_entry->FullDllName.Length = ((int)xlstrlenW(name) + 1) * sizeof(WCHAR);
            new_entry->FullDllName.Buffer= (PWSTR)( xGlobalAlloc (GPTR, new_entry->FullDllName.Length));
            xRtlMoveMemory(new_entry->FullDllName.Buffer, (PWSTR)(name), new_entry->FullDllName.Length);
            new_entry->BaseDllName = new_entry->FullDllName;
            new_entry->BaseDllName.Buffer= (PWSTR)( xGlobalAlloc (GPTR, new_entry->BaseDllName.Length));
            xRtlMoveMemory(new_entry->BaseDllName.Buffer, (PWSTR)(name), new_entry->BaseDllName.Length);
     
    #define LDRP_IMAGE_DLL                          0x00000004
    #define LDRP_ENTRY_PROCESSED                    0x00004000
    #define LDRP_DONT_CALL_FOR_THREADS              0x00040000
    #define LDRP_PROCESS_ATTACH_CALLED              0x00080000
    #define LDRP_IMAGE_NOT_AT_BASE                  0x00200000
            new_entry->Flags =
                    LDRP_IMAGE_DLL |                  // this entry describes a DLL
                    LDRP_ENTRY_PROCESSED |            // entry point has been already called
                    LDRP_PROCESS_ATTACH_CALLED;     // DLL_PROCESS_ATTACH called, don't call again
                    //LDRP_IMAGE_NOT_AT_BASE |
                    new_entry->LoadCount = 1;
     
            PLIST_ENTRY head = &peb()->Ldr->InLoadOrderModuleList;
            PLDR_DATA_TABLE_ENTRY ldr_head = CONTAINING_RECORD(head->Flink, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
            InsertTailList(head, &new_entry->InLoadOrderLinks);
     
     
            head = &peb()->Ldr->InMemoryOrderModuleList;
            PLIST_ENTRY entry = head->Flink;
            for (; entry != head; entry = entry->Flink)
                    if (CONTAINING_RECORD(entry, LDR_DATA_TABLE_ENTRY, InMemoryOrderLinks)->DllBase > new_entry->DllBase)
                            break;
     
            entry->Blink->Flink = &new_entry->InMemoryOrderLinks;
            new_entry->InMemoryOrderLinks.Blink = entry->Blink;
            new_entry->InMemoryOrderLinks.Flink = entry;
            entry->Blink = &new_entry->InMemoryOrderLinks;
     
            new_entry->InInitializationOrderLinks.Flink = 0;
            new_entry->InInitializationOrderLinks.Blink = 0;
     
            return true;
    }

Вот код. Записаль додало, начало ДЛЛ, размер, путь, а вот ЕП нет.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх