Процедура определения набора экспортируемых функций в библиотеке (ассемблер)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by 0x0c0de, 5 Jun 2007.

  1. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Определяются все функции в библиотеке.
    Code:
    opredelenie_ proc
    invoke _lopen, addr prFile, OF_WRITE ;открытие файла
    mov cmd1,eax
    .IF eax == -1
    invoke _lcreat, addr prFile, 0
    mov cmd1,eax
    .ELSE                                                    
    invoke _llseek, cmd1, 0, FILE_END
    .ENDIF               
    invoke LoadLibraryA,offset lib_ ; подгрузка либы в адресное пространство процесса
    mov adr_,eax
    .if eax==0
    jmp ret_
    .endif
    Find_proc:
    mov edi,eax   
    mov eax,dword ptr [edi+3Ch] ; PE
    mov ebx,eax
    mov ebp,edi
    mov edx,dword ptr [ebp+eax+78h] ; смещаемся на таблицу экспорта
    add edx,ebp 
    mov ecx,dword ptr [edx+18h] ; число функций
    mov ebx,dword ptr [edx+20h] ; экспортируемые имена
    add ebx,ebp ; таблица экспортируемых имен
    funk_loo:
    jecxz exit_  ; если функции кончились - выходим
    dec ecx  ; уменьшаем счетчик функций
    xor esi,esi
    mov esi,dword ptr [ebx+ecx*4h] ; конец массива эксп. функций 
    add esi,ebp ; адрес конца массива 
    xor edi,edi
    cld 
    pusha
    mov addres_,esi
    .IF cmd1 != -1
    invoke lstrlen,addres_ ; получаем длину строки с именем функции
    invoke _lwrite, cmd1, addres_, eax ; записываем имя функции в файл
    invoke _lwrite, cmd1,offset flash_,3	
    .endif
    popad
    loo_:
    xor eax,eax
    lodsb  ; чтение следующего символа имени функции 
    cmp al,ah ; конец строки?
    je _next_ ; если конец - записываем имя функции в файл 
    jmp loo_
    _next_:
    jmp funk_loo 
    exit_:
    invoke _lclose, cmd1 ; закрытие
    ret_:
    ret
    opredelenie_ endp 
    Результат работы выводится в файл
     
    #1 0x0c0de, 5 Jun 2007
    Last edited: 5 Jun 2007
    4 people like this.
  2. NetMan

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

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Хм, а комменты можно к коду? ;)
     
  3. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Такой способ поиска функций используется в шелл-кодах. Достаточно красивый способ, кстати....
     
  4. NetMan

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

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    flash_ это CR LF ? ;)