0x0c0de
05.06.2007, 17:02
Определяются все функции в библиотеке.
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
Результат работы выводится в файл
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
Результат работы выводится в файл