Показать сообщение отдельно

  #7  
Старый 13.07.2009, 19:21
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

если быть более подробным то делал примерно так (кусок кода из криптера моего)
Надеюсь алгоритм будет понятен. Если знаеш 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
 
Ответить с цитированием