
13.07.2009, 19:21
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
если быть более подробным то делал примерно так (кусок кода из криптера моего)
Надеюсь алгоритм будет понятен. Если знаеш ASM
/me ехидно улыбнулся )
Код:
ESI = PE
.............
pushad
mov edx,eax
cmp [esi+80h],0
je @_exit
add eax,[esi+80h] //; IT
mov esi,eax
@_next1:
cmp dword [esi+10h],0 //; если нет больше загружаемых библиотек
jz @_exit
push edx
push ecx
add edx,[esi+0Ch]
push edx
call [my_LoadLibrary] //; загрузить библиотеку
pop ecx
pop edx
mov ebx,eax //; сохранить в ebx module handle библиотеки
mov edi,[esi+10h] //; в EDI будет адрес на Addres_Table_RVA
add edi,edx
@_nextProc:
cmp dword [edi],0 //; проверить текущий указатель на импортируемую функцию.
jz @_nextDLL //; если больше нет импортируемых функций для текущей библиотеки
push edx
push ecx //; если есть IAT
add edx,[edi]
bt edx,31 //; проверка импорта по имени или ординалу
jnc @_next3
and edx,$0000ffff
push edx //; если ординал
jmp @_next4
@_next3:
inc edx //; если имя
inc edx
push edx //; поместить в стек адрес имени функции
@_next4:
push ebx //; module handle
call [my_GetProcAddress] //; получить адрес функции
pop ecx
pop edx
mov [edi],eax //; сохранить адрес
@_next2:
inc ecx
add edi,4 //; перейти на слудующий элемент.
jmp @_nextProc
@_nextDLL: //; больше нет элементов.
add esi,14h //; сместить указатель на следующую библиотеку
jmp @_next1
@_exit:
popad
|
|
|