1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

ntdll для подгрузки

Тема в разделе "WASM.WIN32", создана пользователем sn0w, 25 июл 2019.

  1. sn0w

    sn0w Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    674
    тащемта не стал ходить лесом а смапил нтдлл в процесс, затем перекопировал и ребазировал, всякие прямые стабы работают оккей, но вот с ЛДР уже траблы, споткнулся на первой же:
    ntdll!_LdrpResolveDllName
    ...
    .text:6B2D5EF5 mov eax, _NtdllBaseTag
    .text:6B2D5EFA push edi ; Size
    .text:6B2D5EFB add eax, 40000h
    .text:6B2D5F00 push eax ; Flags
    .text:6B2D5F01 push _LdrpHeap ; ; HeapHandle -- uninitialized after raw copy section
    .text:6B2D5F07 call _RtlAllocateHeap@12 ; RtlAllocateHeap(x,x,x)

    тут вроде пофиксил - нужен хендл был кучи, пофиксил, но опять

    ntdll!RtlpLowFragHeapAllocFromContext+0x20e:
    77ec34f4 f646073f test byte ptr [esi+7],3Fh
    пока не вкуривал, ибо в говно - может есть у кого уже наработки, или проясните что я делаю не так?

    это всё касаемо LdrLoadDll
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    sn0w,

    Логгер включи и не дури мозги. GlobalFlag\ShowSnaps.

    Если косяк с хипом, то для этого есть целый набор системных тулз и механизмов, тогда включается страничная аллокация(PH), на каждом действии с кучей логгер, для этого есть набор штатных тулз. А есчо есть слой верификации. Кури матчасть.
     
    Последнее редактирование: 1 авг 2019
  3. sn0w

    sn0w Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    674
    это я уже курнул, мне надо шобы нтлоадер отрабатывал корректно, насчёт хипа и так понятно, просто я к тому что может ктото тоже такое делал и есть костыли об которые спотыкались
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    sn0w,

    Вы задачу не описали, только "смапил нтдлл в процесс, затем перекопировал и ребазировал". Когда смапил, что копировал и зачем релоцировал хз, откуда же мне знать. Нужно нормально описывать задачу, если конкретный ответ нужен.

    ntdll не релоцируется, так как там глобальные в системе указатели по фикс. адресам. Это значит что этот модуль релоцировать не нужно, если замапить на другую базу, то адресация останется исходного модуля.

    > LdrpHeap ; ; HeapHandle -- uninitialized after raw copy section

    Что это значит тоже не известно. Пусть потоки не стартовали, не прошла инициализация загрузчика. Но причём там копии проекции тоже хз.

    Опиши норм что делаешь и задачу, иначе это бессмысленный отрывок потока мыслей ваших.
     
  5. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    548
    Адрес:
    подполье
    Действительно, снег, ты не говори чо ты делаешь (в этих словах совсем потеряно, что именно хочешь добиться), скажи что хочешь сделать от ... и ... до, включительно;)
     
  6. sn0w

    sn0w Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    674
    ок)
    возможно что разные экспорты нтдлл похуканы и периодически чекаются сторонними процессами, поэтому мне нужно просто сделать её дубль в этом ап чтобы не пилить оверхеда + пользоваться той же LdrLoadDll. для этого я решил смапить секцию, релоцировать и инициализировать вручную.
    надо чтобы LdrLoadDll корректно отрабатывала в этой новой памяти
     
  7. hiddy

    hiddy Member

    Публикаций:
    0
    Регистрация:
    10 мар 2019
    Сообщения:
    33
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    sn0w,

    Так наоборот ведь, релоцировать не нужно. Если ты релочил, то у тебя модуль окажется не инициализированным, отсюда видимо и ошибки. Без какого либо понятия решил релоцировать :punish:

    Нэйтив никогда не релоцируется, его база фиксед. Если спроецировать на другую базу, то адресация из копии останется в базовую проекцию. Если не понятно, то вот на цифрах:

    7C97B178: _LdrpLoaderLock 7C97B1A0 ntdll._LoaderLockDebug

    Отображаем на другую базу, получится:

    (7C97B178 - 7C900000 + NEWBASE): _LdrpLoaderLock 7C97B1A0 ntdll._LoaderLockDebug

    Релок по 7C97B178 оригинальный и указатель тот же самый.

    7C916633: push offset _LdrpLoaderLock(7C97B178)

    - Адресация в оригинальной проекции.

    (7C916633 - 7C900000 + NEWBASE): push offset _LdrpLoaderLock(7C97B178)

    - Адресация в копии.

    Тоесть все указатели останутся в оригинальную проекцию. Как частный случай останется адресация колбеков, тоесть обратный вызов будет происходить в оригинальную проекцию, тоесть управление выйдет из копии. Что бы это зафиксить необходимо релоцировать ссылки в кодовую секцию(там константы/процедуры).

    Так как адресация переменных абсолютная, а за пределы кодовой секции нет релатив ветвлений, то кодовая секция может перемещаться как строка в памяти. Так например восстанавливал кодовую секцию загрузчик из памяти(lwe).

    > инициализировать вручную.

    Повторную инициализацию нэйтив выполнить не получится. Трабла с серверным соеденением(csrss), подробности я давно на exploit.in описывал, там можно глянуть, если он есчо существует.
     
  9. sn0w

    sn0w Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    674
    блин, да я не совсем идиот в отношении релокаций и статических символов, так вот что к чему подсоединить или пересоздать - вот в чём вопрос
     
  10. OverNight

    OverNight New Member

    Публикаций:
    0
    Регистрация:
    21 авг 2019
    Сообщения:
    4
    не с той стороны зашел. находишь и сохраняешь нужный экспорт в загруженной нтдлл. мапишь нтдлл в память. восстанавливаешь из нее нужный экспорт в загруженную. пользуешься. возвращаешь обратно как было.
     
  11. sn0w

    sn0w Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    674
    я же говорю что в .data там есть неинициализированные поинтеры, такие как ntdll!LdrpHeap, без которого не работает ничего кроме syscall стабов например, то что они не экспортируются - другое дело - но на это просто символьный подгруз можно запилить.
     
  12. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    774
    Заколхожено до неприличия, но для демонстрации сгодится.
    Код (ASM):
    1. format pe console 4.0
    2. include 'win32ax.inc'
    3. entry main
    4.  
    5. macro pushdata label,[data] {
    6.     common
    7.         __PUSHDATA_LAST equ label
    8.         __PUSHDATA_LIST equ
    9.         .len=0
    10.         .size=0
    11.     forward
    12.         virtual
    13.             data
    14.             .len=.len+$-$$
    15.         end virtual
    16.     common
    17.         .tlen=((3+.len) and (not 3))-(.len)
    18.         .part=0
    19.     reverse
    20.         .ofst=0
    21.         .dlen=1
    22.         while .ofst<.dlen
    23.             .ofst=.ofst+4
    24.             virtual
    25.                 rb 4
    26.                 data
    27.                 if .tlen > 0
    28.                     db (.part shr 24) and 0xFF
    29.                 end if
    30.                 if .tlen > 1
    31.                     db (.part shr 16) and 0xFF
    32.                 end if
    33.                 if .tlen > 2
    34.                     db (.part shr 8) and 0xFF
    35.                 end if
    36.                 .dlen=$-$$-4
    37.                 load .part DWORD from $-.ofst
    38.             end virtual
    39.             if .ofst<=.dlen
    40.                 push .part
    41.                 .size=.size+4
    42.             end if
    43.         end while
    44.         .pad=0
    45.         .tlen=4-((3+.dlen) and (not 3))+(.dlen)
    46.         if .tlen=4
    47.             .tlen=0
    48.         end if
    49.     common
    50.         locals
    51.             label dd ?
    52.         endl
    53.         mov [label],esp
    54.         pushdata.#label#.size=.size
    55.         pushdata.#label#.length=.len
    56.         __PUSHDATA_LAST_SIZE     equ pushdata.#label#.size
    57.         __PUSHDATA_LAST_LENGTH equ pushdata.#label#.length }
    58.  
    59. macro pushdatanp d {
    60.      local length,size,part
    61.      virtual
    62.       d
    63.       length=$-$$
    64.       size=((length+3)and(not 3))
    65.      end virtual
    66.      repeat size shr 2
    67.       virtual
    68.            d
    69.            rb size-length
    70.            load part DWORD from $-%*4
    71.       end virtual
    72.       push part
    73.      end repeat
    74.      __PUSHDATA_LAST_SIZE   equ size
    75.      __PUSHDATA_LAST_LENGTH equ length }
    76.  
    77. macro popdata {
    78.     add esp,__PUSHDATA_LAST_SIZE
    79.     restore __PUSHDATA_LAST_SIZE
    80.     restore __PUSHDATA_LAST_LENGTH }
    81.  
    82. struct IMAGE_DOS_HEADER
    83.     e_magic            dw ?
    84.     e_cblp            dw ?
    85.     e_cp            dw ?
    86.     e_crlc            dw ?
    87.     e_cparhdr        dw ?
    88.     e_minalloc        dw ?
    89.     e_maxalloc        dw ?
    90.     e_ss            dw ?
    91.     e_sp            dw ?
    92.     e_csum            dw ?
    93.     e_ip            dw ?
    94.     e_cs            dw ?
    95.     e_lfarlc        dw ?
    96.     e_ovno            dw ?
    97.     e_res            rw 4
    98.     e_oemid            dw ?
    99.     e_oeminfo        dw ?
    100.     e_res2            rw 10
    101.     e_lfanew        dd ?
    102. ends
    103.  
    104. struct IMAGE_FILE_HEADER
    105.     Machine                    dw ?
    106.     NumberOfSections        dw ?
    107.     TimeDateStamp            dd ?
    108.     PointerToSymbolTable    dd ?
    109.     NumberOfSymbols            dd ?
    110.     SizeOfOptionalHeader    dw ?
    111.     Characteristics            dw ?
    112. ends
    113.  
    114. struct IMAGE_DATA_DIRECTORY
    115.     VirtualAddress        dd ?
    116.     Size                dd ?
    117. ends
    118.  
    119. struct IMAGE_OPTIONAL_HEADER
    120.     Magic                                                dw ?
    121.     MajorLinkerVersion                                    db ?
    122.     MinorLinkerVersion                                    db ?
    123.     SizeOfCode                                            dd ?
    124.     SizeOfInitializedData                                dd ?
    125.     SizeOfUninitializedData                                dd ?
    126.     AddressOfEntryPoint                                    dd ?
    127.     BaseOfCode                                            dd ?
    128.     BaseOfData                                            dd ?
    129.     ImageBase                                            dd ?
    130.     SectionAlignment                                    dd ?
    131.     FileAlignment                                        dd ?
    132.     MajorOperatingSystemVersion                            dw ?
    133.     MinorOperatingSystemVersion                            dw ?
    134.     MajorImageVersion                                    dw ?
    135.     MinorImageVersion                                    dw ?
    136.     MajorSubsystemVersion                                dw ?
    137.     MinorSubsystemVersion                                dw ?
    138.     Reserved1                                            dd ?
    139.     SizeOfImage                                            dd ?
    140.     SizeOfHeaders                                        dd ?
    141.     CheckSum                                            dd ?
    142.     Subsystem                                            dw ?
    143.     DllCharacteristics                                    dw ?
    144.     SizeOfStackReserve                                    dd ?
    145.     SizeOfStackCommit                                    dd ?
    146.     SizeOfHeapReserve                                    dd ?
    147.     SizeOfHeapCommit                                    dd ?
    148.     LoaderFlags                                            dd ?
    149.     NumberOfRvaAndSizes                                    dd ?
    150.     DataDirectoryExport                                    IMAGE_DATA_DIRECTORY
    151.     DataDirectoryImport                                    IMAGE_DATA_DIRECTORY
    152.     DataDirectoryResource                                IMAGE_DATA_DIRECTORY
    153.     DataDirectoryException                                IMAGE_DATA_DIRECTORY
    154.     DataDirectorySecurity                                IMAGE_DATA_DIRECTORY
    155.     DataDirectoryBaseRelocationTable                    IMAGE_DATA_DIRECTORY
    156.     DataDirectoryDebugDirectory                            IMAGE_DATA_DIRECTORY
    157.     DataDirectoryCopyrightOrArchitectureSpecificData    IMAGE_DATA_DIRECTORY
    158.     DataDirectoryGlobalPtr                                IMAGE_DATA_DIRECTORY
    159.     DataDirectoryTLSDirectory                            IMAGE_DATA_DIRECTORY
    160.     DataDirectoryLoadConfigurationDirectory                IMAGE_DATA_DIRECTORY
    161.     DataDirectoryBoundImportDirectory                    IMAGE_DATA_DIRECTORY
    162.     DataDirectoryImportAddressTable                        IMAGE_DATA_DIRECTORY
    163.     DataDirectoryDelayImportDescriptors                    IMAGE_DATA_DIRECTORY
    164.     DataDirectoryComRuntimeDescriptor                    IMAGE_DATA_DIRECTORY
    165.     DataDirectoryReserved                                IMAGE_DATA_DIRECTORY
    166. ends
    167.  
    168. struct IMAGE_NT_HEADERS
    169.     Signature        dd ?
    170.     FileHeader        IMAGE_FILE_HEADER
    171.     OptionalHeader    IMAGE_OPTIONAL_HEADER
    172. ends
    173.  
    174. struct IMAGE_SECTION_HEADER
    175.     Name                    rb 8
    176.     union
    177.         PhysicalAddress        dd ?
    178.         VirtualSize            dd ?
    179.     ends
    180.     VirtualAddress            dd ?
    181.     SizeOfRawData            dd ?
    182.     PointerToRawData        dd ?
    183.     PointerToRelocations    dd ?
    184.     PointerToLinenumbers    dd ?
    185.     NumberOfRelocations        dw ?
    186.     NumberOfLinenumbers        dw ?
    187.     Characteristics            dd ?
    188. ends
    189.  
    190.  
    191. section '.code' code data readable executable
    192.  
    193. proc main
    194.             locals
    195.                 hNtdllDll                        dd ?
    196.                 hNtdllCopyDll                    dd ?
    197.                 nNumberOfSections                dd ?
    198.                 nBaserelocRva                    dd ?
    199.                 nBaserelocSize                    dd ?
    200.                 nCurrentSection                    dd ?
    201.                 nDataRvaLo                        dd ?
    202.                 nDataRvaHi                        dd ?
    203.                 nCurrentBaserelocHeaderOffset    dd ?
    204.                 nBaserelocBlockRva                dd ?
    205.                 nBaserelocBlockSize                dd ?
    206.                 nCurrentBaserelocItemOffset        dd ?
    207.                 nOldProtection                    dd ?
    208.                 nUnknown                        dd ?
    209.                 hLibrary                        dd ?
    210.             endl
    211.             pushdatanp db 'ntdll.dll'\,0
    212.                 invoke GetModuleHandle,esp
    213.             popdata
    214.             mov [hNtdllDll],eax
    215.             pushdatanp db 'ntdll_copy.dll'\,0
    216.                 invoke GetModuleHandle,esp
    217.             popdata
    218.             mov [hNtdllCopyDll],eax
    219.             mov ecx,[eax + IMAGE_DOS_HEADER.e_lfanew]
    220.             movzx edx,[eax + ecx + IMAGE_NT_HEADERS.FileHeader.NumberOfSections]
    221.             mov [nNumberOfSections],edx
    222.             mov edx,[eax + ecx + IMAGE_NT_HEADERS.OptionalHeader.DataDirectoryBaseRelocationTable.VirtualAddress]
    223.             mov [nBaserelocRva],edx
    224.             mov edx,[eax + ecx + IMAGE_NT_HEADERS.OptionalHeader.DataDirectoryBaseRelocationTable.Size]
    225.             mov [nBaserelocSize],edx
    226.             movzx edx,[eax + ecx + IMAGE_NT_HEADERS.FileHeader.SizeOfOptionalHeader]
    227.             lea ecx,[ecx + IMAGE_NT_HEADERS.OptionalHeader + edx]
    228.             lea ecx,[ecx + eax]
    229.             mov [nCurrentSection],0
    230.             @@:
    231.             mov edx,[nCurrentSection]
    232.             .if edx < [nNumberOfSections]
    233.                 imul edx,edx,sizeof.IMAGE_SECTION_HEADER
    234.                 pushad
    235.                     mov eax,[ecx + edx + IMAGE_SECTION_HEADER.VirtualAddress]
    236.                     add eax,[hNtdllCopyDll]
    237.                     mov ecx,[ecx + edx + IMAGE_SECTION_HEADER.VirtualSize]
    238.                     invoke VirtualProtect,eax,ecx,PAGE_EXECUTE_READWRITE,addr nOldProtection
    239.                 popad
    240.                 inc [nCurrentSection]
    241.                 jmp @B
    242.             .endif
    243.             mov [nCurrentSection],0
    244.             @@:
    245.             mov edx,[nCurrentSection]
    246.             .if edx < [nNumberOfSections]
    247.                 imul edx,edx,sizeof.IMAGE_SECTION_HEADER
    248.                 .if DWORD[ecx + edx + IMAGE_SECTION_HEADER.Name + 00]<>'.dat' | DWORD[ecx + edx + IMAGE_SECTION_HEADER.Name + 04]<>'a'
    249.                     inc [nCurrentSection]
    250.                     jmp @B
    251.                 .endif
    252.                 mov eax,[ecx + edx + IMAGE_SECTION_HEADER.VirtualAddress]
    253.                 mov [nDataRvaLo],eax
    254.                 mov [nDataRvaHi],eax
    255.                 mov eax,[ecx + edx + IMAGE_SECTION_HEADER.VirtualSize]
    256.                 add [nDataRvaHi],eax
    257.                 mov esi,[hNtdllCopyDll]
    258.                 mov [nCurrentBaserelocHeaderOffset],0
    259.                 .next_basereloc_header:
    260.                 mov edi,[nCurrentBaserelocHeaderOffset]
    261.                 .if edi < [nBaserelocSize]
    262.                     add edi,[nBaserelocRva]
    263.                     mov eax,DWORD[esi + edi + 00]
    264.                     mov [nBaserelocBlockRva],eax
    265.                     mov eax,DWORD[esi + edi + 04]
    266.                     mov [nBaserelocBlockSize],eax
    267.                     mov [nCurrentBaserelocItemOffset],8
    268.                     @@:
    269.                     mov edx,[nCurrentBaserelocItemOffset]
    270.                     .if edx < [nBaserelocBlockSize]
    271.                         add edx,edi
    272.                         movzx ecx,WORD[esi + edx]
    273.                         .if ecx>=0x3000 & ecx<0x4000
    274.                             and ecx,0xFFF
    275.                             add ecx,[nBaserelocBlockRva]
    276.                             mov eax,DWORD[esi + ecx]
    277.                             sub eax,esi
    278.                             .if eax>=[nDataRvaLo] & eax<[nDataRvaHi]
    279.                                 add eax,[hNtdllDll]
    280.                                 mov DWORD[esi + ecx],eax
    281.                             .endif
    282.                         .endif
    283.                         add [nCurrentBaserelocItemOffset],2
    284.                         jmp @B
    285.                     .endif
    286.                     mov ecx,[nBaserelocBlockSize]
    287.                     add [nCurrentBaserelocHeaderOffset],ecx
    288.                     jmp .next_basereloc_header
    289.                 .endif
    290.             .endif
    291.             pushdatanp du 'advapi32.dll'\,0
    292.                 mov [nUnknown],0
    293.                 mov [hLibrary],0
    294.                 invoke LdrLoadDll_copy,1,addr nUnknown,addr esp + 1*4,addr hLibrary,0x001A0018,esp
    295.                 pop ecx ecx
    296.             popdata
    297.             ret
    298. endp
    299.  
    300. section '.data' data readable writable
    301. data import
    302.     library kernel32,'kernel32.dll',user32,'user32.dll',ntdll_copy,'ntdll_copy.dll'
    303.     include 'api\kernel32.inc'
    304.     include 'api\user32.inc'
    305.     import ntdll_copy,\
    306.         LdrLoadDll_copy,'LdrLoadDll'
    307. end data
    ntdll_copy.dll чтобы не возиться с остальным :crazy: На 8.1 х64 работает.
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    f13nd,

    Статистика по косвенным ветвлениям из LdrLoadDll(), call:

    Код (Text):
    1. ICALL 0x7C915216 -> [0x12FA00]: 0x7C915454 ; bsearch(_RtlpCompareActivationContextStringSectionEntryByPseudoKey)
    2. ICALL 0x7C915216 -> [0x12F6B8]: 0x7C915454
    3. ICALL 0x7C915216 -> [0x12F838]: 0x7C915454
    4. ICALL 0x7C90D61A -> [0x7FFE0300]: 0x7C90E4F0
    5. ICALL 0x7C910412 -> [0x12F544]: 0x7C901000 ; RtlAcquirePebLock()
    6. ICALL 0x7C910412 -> [0x12F480]: 0x7C901000
    7. ICALL 0x7C91043D -> [0x7FFD8024]: 0x7C9010E0
    8. ICALL 0x7C91043D -> [0x7FFD8024]: 0x7C9010E0
    9. ICALL 0x7C90D6FA -> [0x7FFE0300]: 0x7C90E4F0
    10. ICALL 0x7C910412 -> [0x12F544]: 0x7C901000 ; RtlAcquirePebLock()
    11. ICALL 0x7C910412 -> [0x12F480]: 0x7C901000
    12. ICALL 0x7C91043D -> [0x7FFD8024]: 0x7C9010E0 ; RtlReleasePebLock()
    13. ICALL 0x7C91043D -> [0x7FFD8024]: 0x7C9010E0
    14. ICALL 0x7C90D16A -> [0x7FFE0300]: 0x7C90E4F0
    15. ICALL 0x7C90D8BA -> [0x7FFE0300]: 0x7C90E4F0
    16. ICALL 0x7C90CFDA -> [0x7FFE0300]: 0x7C90E4F0
    17. ICALL 0x7C90D50A -> [0x7FFE0300]: 0x7C90E4F0
    18. ICALL 0x7C90CFDA -> [0x7FFE0300]: 0x7C90E4F0
    19. ICALL 0x7C91C12F -> [0x7C97C30C]: 0x7C8112A0 ; _LdrpManifestProberRoutine
    20. ICALL 0x7C915216 -> [0x12F410]: 0x7C915454
    21. ICALL 0x7C915216 -> [0x12F410]: 0x7C915454
    22. ICALL 0x7C915216 -> [0x12F410]: 0x7C915454
    23. ICALL 0x7C915216 -> [0x12F464]: 0x7C915454
    24. ICALL 0x7C915216 -> [0x12F3AC]: 0x7C915454
    25. ICALL 0x7C90EAB8 -> [0x7C916B10]: 0x7C916B79 ; __local_unwind2
    26. ICALL 0x7C915216 -> [0x12F464]: 0x7C915454
    27. ICALL 0x7C90EAB8 -> [0x7C916B10]: 0x7C916B79
    28. ICALL 0x7C915216 -> [0x12F464]: 0x7C915454
    29. ICALL 0x7C90EAB8 -> [0x7C916B10]: 0x7C916B79
    30. ICALL 0x7C90EAB8 -> [0x7C916B10]: 0x7C916B79
    31. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    32. ICALL 0x7C901187 -> [0x12F948]: 0x76BE10F1 ; _LdrpCallInitRoutine
    33. ICALL 0x76BE1109 -> [0x76BE103C]: 0x7C811326
    34. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    35. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    36. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    37. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    38. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    39. ICALL 0x7C90D5BA -> [0x7FFE0300]: 0x7C90E4F0
    - XP 32

    Код (Text):
    1. ICALL 0x77D18348 -> [0x77DD31D0]: 0x77D14700    ; bsearch(RtlDebugPrintTimes)
    2. ICALL 0x77D18372 -> [0x18FA04]: 0x77D182E0
    3. ICALL 0x77D18372 -> [0x18FA04]: 0x77D182E0
    4. ICALL 0x77D0C9A5 -> [0x7FFDD0C0]: 0x77CC1218
    5. ICALL 0x77D0C8B5 -> [0x7FFDD0C0]: 0x77CC1218
    6. ICALL 0x77D0CB45 -> [0x7FFDD0C0]: 0x77CC1218
    7. ICALL 0x77D0C725 -> [0x7FFDD0C0]: 0x77CC1218
    8. ICALL 0x77D0C945 -> [0x7FFDD0C0]: 0x77CC1218
    9. ICALL 0x77D0CB35 -> [0x7FFDD0C0]: 0x77CC1218
    10. ICALL 0x77D0CB35 -> [0x7FFDD0C0]: 0x77CC1218
    11. ICALL 0x77D29755 -> [0x77DD31D0]: 0x77D14700
    12. ICALL 0x77D2975B -> [0x76EC7190]: 0x8B55FF8B
    13. ICALL 0x76EC71C6 -> [0x76F300D8]: 0x77540280
    14. ICALL 0x76EC71E1 -> [0x76F30CB4]: 0x77D2A840
    15. ICALL 0x77D0CB35 -> [0x7FFDD0C0]: 0x77CC1218
    16. ICALL 0x77D0CB35 -> [0x7FFDD0C0]: 0x77CC1218
    17. ICALL 0x77D0CAF5 -> [0x7FFDD0C0]: 0x77CC1218
    18. ICALL 0x77D19B5B -> [0x18FC50]: 0x77AD10E0    ; LdrpCallInit
    19. ICALL 0x77AD10EE -> [0x77AD3040]: 0x775445F0
    20. ICALL 0x775445FC -> [0x775F6584]: 0x77D2B0D0
    - 8 wow

    Видим пару вызовов интернал колбеков, за исключением сервисов. Так же вызов загружаемого модуля. По JMP статистика - их много, все в интернал функциях, это примитивы копирования памяти и тп.

    Из всех интернал ветвлений происходит возврат в вызывающий код, за исключением вызова загружаемой длл. В таком случае какой смысл в релокации кодовых секций ?
     
  14. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    774
    Задачка была про хукнутые экспорты ntdll, экспорты из длл вынесены. Надо только вычитывать оригинал из файла, проставить все релоки, кроме указателей в секцию .data на свой образ, указатели на .data в оригинальную длл. Если по-тупому скопировать содержимое .data, будет затыкаться на сравнении указателей в ней, если пофиксить их, будет затыкаться на указатели в .data в хипе. Это единственный более-менее простой способ обойти перехват.
     
  15. sn0w

    sn0w Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    674
    ну во, а говорил что я не я и жопа не моя)) а у индия всё время закос на предел того, что маглам, вроде меня, не понять))) борщит чувак не по теме специями) я конечно понимаю желание сверкнуть своими знаниями, - но не так уж чрезмерно
    --- Сообщение объединено, 22 авг 2019 ---
    исчо раз, повторюсь - как заставить работать клонированный нтдлл, после его маппинга с секции KnownDlls?
     
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    f13nd,

    Директория экспорта расположена в кодовой секции. Фиксапить ссылки можно(те не имеет смысла) на колбеки, я же говорил.

    Ничего не нужно релоцировать, n-й раз уже сказал что можно использовать образ как строку. Так восстанавливалась кодовая секция в lwe:

    MemoryMappedFilenameInformation(*ntdll) -> NtOpenFile -> NtCreateSection -> NtMapViewOfSection -> deprotect_code_sect -> mmcopy.

    Хотя можно смапить и вызвать, но при этом нужно править указатели в апп на дельту баз, что не удобно.

    sn0w,

    Тебе всё подробно сказали. Не можешь пару апи вызвать или отладить - закрой тему и займись чем то другим, коденг не твоё дело судя по всему.