Спрятать импорт

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShyRka_coder, 5 Sep 2011.

  1. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Нашол пару статей на хакере, но не понятна там как то ... а инфы больше найти не смог ...
    может кто еще подкинет что то ... буду очень благодарен....
     
  2. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Найти базу kernel32 ,найти в таблице экспорта LoadLibrary и GetProcAddress.И грузить все функции динамически.
     
  3. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Слух а примеров нет у тебя случайно ... для 1 функции , если можешь сюда брось или в ЛС!
     
  4. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    Вот, например:
    Code:
    ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
        include \masm32\include\masm32rt.inc
        includelib dlltute.lib
    ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
    comment * -----------------------------------------------------
                         Build this console app with
                      "MAKEIT.BAT" on the PROJECT menu.
            ----------------------------------------------------- *
    
        .data
    
            pass db "password",0
            my_lib  db "mydll.dll",0
            My_proc db "crypt",0
            cmd dd 0
        .code
    
    start:
       
    ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
        call main
        ;inkey
        exit
    
    ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
    main proc
       
    ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    
        invoke LoadLibrary,addr my_lib;
        invoke GetProcAddress,eax, addr My_proc;
        push eax
        push offset test_str
        push offset pass
        call eax
        call FreeLibrary
        RET
    
    main endp
    
    end start
    
     
    #4 0xF0RD, 6 Sep 2011
    Last edited: 6 Sep 2011
  5. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    а на си пример не дадите ??
    А то я делаю 1 только вылетает..


    tLoadLibraryA pLoadLibraryA = (tLoadLibraryA)GetProcAddress(hKernel32,"LoadLibraryA"); HMODULE hUser32 = pLoadLibraryA ("user32.dll");
    в этих 2 строках вылетает не знаю почему... не может загрузить pLoadLibraryA ("user32.dll")... когда делаю LoadLibraryA ("user32.dll"); все гуд..
    Жду советов ..
     
  6. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    а не судьюа в отладчике потыкать и посмотреть, что возвращает GetLastError() после
    Code:
    tLoadLibraryA pLoadLibraryA = (tLoadLibraryA)GetProcAddress(hKernel32,"LoadLibraryA");
    а возвращает она ERROR_PROC_NOT_FOUND.
    и pLoadLibraryA указывает на нуль.
     
  7. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    И??
    Я смотрел , только не могу понять почему ....
     
  8. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Code:
    .386                
    .model flat,stdcall
    option casemap:none
    .code
    FindFuncAddr:
    pushad
    	mov ebx,eax
    	mov eax,dword ptr[eax+3ch] 
    	add eax,ebx	
    	mov eax,dword ptr[eax+78h] 
    	add eax,ebx 
    	mov ecx,dword ptr[eax+14h]
    	mov edx,dword ptr[eax+1Ch]
    	add edx,ebx
    	mov esi,dword ptr[eax+20h]
    	add esi,ebx
    	xor ebp,ebp
    	next_func:
    		push ecx
    			lodsd 
    			add eax,ebx
    			push edi
    				xchg ecx,eax			
    				@@:		
    					test eax,eax
    					jnz no_end_str
    						rcl ebp,2
    						add ebp,edx
    						add ebx,[ebp]
    						xchg ebx,[esp+4*7+4*2]
    						jmp @f
    					no_end_str:				
    					movzx eax,byte ptr[ecx]
    					inc ecx					
    					scasb				
    				jz @b
    				@@:
    			pop edi	
    		pop ecx							
    	inc ebp
    	loop next_func							
    popad	
    ret		
    
    start:
    pop eax
    push eax
    @@:
    	dec eax
    	xor al,al
    	cmp word ptr[eax],"ZM"
    jnz @b
    
    call delta
    delta:
    pop ebx
    
    
    
    lea edi,[ebx-(offset delta-offset _LoadLibraryA)]
    lea esi,[ebx-(offset delta-offset FindFuncAddr)]
    call esi
    lea edx,[ebx-(offset delta-offset _user32)]
    push edx
    call eax	
    lea edi,[ebx-(offset delta-offset offset _MessageBoxA)]
    call esi	
    push 40h
    lea edx,[ebx-(offset delta-offset see)]
    push edx
    lea edx,[ebx-(offset delta-offset string)]
    push edx
    push 0
    call eax      
    no_find: 
    ret
    
    _LoadLibraryA db "LoadLibraryA",0
    _MessageBoxA db "MessageBoxA",0
    _user32 db "user32.dll",0
    string db 052h,054h,046h,04Dh,02Ch,020h,062h,06Ch,065h,061h,074h,027h,021h,0
    see db 05Ah,072h,069h,020h,076h,020h,06Bh,06Fh,072h,065h,06Eh,027h,02Ch,061h,03Fh,0
    end start
     
    1 person likes this.
  9. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Спс конечно ... но с асм не оч дружу ... мне бы на си...
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    не, ну что за люди, в инете 100500 страниц по данной теме.
    1) Работа с LoadLibrary и GetProcessAddress есть в MSDN
    2) Поиск базы ядра - тоже есть на многих форумах.
    3) поиск функции в экспорте тоже есть в инете причем на любых языках.
    Так что нехрен тупить, мучай гугл.

    Единственное что подскажу, так это только то, что надо искать не LoadLibraryA, а LoadLibraryExA/W
    потому что в Win7 (может даже уже и в Win Vista) в PEB (откуда берется адрес на базу kernel32) находится не kernel32.dll а kernelbase.dll которая является укороченным вариантом kernel32.dll и она не содержит функции LoadLibrary.

    А также запомни и такую вещь: Если импорт пустой, то антивири вообще обозлятся. Да и если прямое обращение к PEB то же будут возмущаться. по этому лучше GetProcessAddress и LoadLibrary оставь в импорте. и с их помощью грузи нудный тебе wininet
     
    #10 slesh, 6 Sep 2011
    Last edited: 6 Sep 2011
  11. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    все можно закрывать тему
    Спс всем ...
     
  12. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Ну в данном случае не нужно в шеллкод стиле писать,так что можно по большой части без асма обойтись и сделать так:
    Code:
    int noncrt_strcmpW(wchar_t *s1,wchar_t *s2)
    {
    	while ( *s1 && *s2 && *s1 == *s2 )
                    ++s1, ++s2;
            return *s1 - *s2;
    }
    DWORD GetKernel32Base()
    {
    	DWORD k32b=0;
    	DWORD PEBadr=0;
    	__asm
    	{
    		mov ecx,FS:[30h]
    		mov PEBadr,ecx
    	}
    	PEB *peb=(PEB*)PEBadr;
    	PEB_LDR_DATA *ldr=(PEB_LDR_DATA*)peb->LoaderData;
    	LDR_MODULE *mod=(LDR_MODULE *)ldr->InInitializationOrderModuleList.Flink;
    	for(;;)
    	{
    		if(mod->BaseDllName.Buffer==NULL){break;}
    		if(noncrt_strcmpW(L"kernel32.dll",mod->BaseDllName.Buffer)==0 || noncrt_strcmpW(L"KERNEL32.dll",mod->BaseDllName.Buffer)==0)
    		{
    			k32b=(DWORD)mod->BaseAddress;	
    		}
    		mod=(LDR_MODULE *)mod->ModuleList.Flink;
    	}
    	return(k32b);
    }