Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Вопрос по шифрованию таблицы импорта |

13.07.2009, 17:26
|
|
Новичок
Регистрация: 25.04.2009
Сообщений: 17
Провел на форуме: 94720
Репутация:
1
|
|
Вопрос по шифрованию таблицы импорта
Пишу свой криптор.В ходе работы возник вопрос-почему нельзя шифровать таблицу импорта так же как например таблицу данных или таблицу кода?
Объясните кто-нибудь или киньте ссылки-как решить данную проблему.
|
|
|

13.07.2009, 18:50
|
|
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме: 3886281
Репутация:
929
|
|
А кто тебе сказал что нельзя? 0_o
|
|
|

13.07.2009, 19:01
|
|
Новичок
Регистрация: 25.04.2009
Сообщений: 17
Провел на форуме: 94720
Репутация:
1
|
|
При запуске программы загрузчик ОС получает адреса используемых в программе функций и записывает их в массив адресов имен функций, на который ссылаются поля FirstThunk, и в котором до этого были RVA, ссылающиеся на имена соответствующих функций. После того, как этот массив заполнен адресами функций, он называется Таблицей Адресов Импорта (Import Address Table, сокращенно IAT).
После того, как IAT заполнена адресами нужных функций, программа может начать работу.
Исхожу из этого отрывка об описании таблицы импорта.Если таблица импорта будет зашифрована то тогда IAT не сможет заполниться реальными адресами функций, так как в "таблице просмотра импорта" находятся зашифрованные данные.Соответственно программа не загрузится.
|
|
|

13.07.2009, 19:05
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
а что мешает криптору сделать свою таблицу импорта, зашифровать ИАТ программы и потом восстановить =)
|
|
|

13.07.2009, 19:08
|
|
Познающий
Регистрация: 24.02.2006
Сообщений: 34
Провел на форуме: 136883
Репутация:
50
|
|
|
|
|

13.07.2009, 19:10
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
вообще IT шифровать нужно обязательно.
А потом ты просто пишеш код который сам загрузит все данные.
т.е. ручная обработка импорта и потом LoadLibrary и GetProcAddress
КОгдато писал для криптера, то вышло гдето строк 100 на асме. мож меньше
|
|
|

13.07.2009, 19:21
|
|
Reservists Of Antichat - Level 6
Регистрация: 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
|
|
|

13.07.2009, 19:26
|
|
Новичок
Регистрация: 25.04.2009
Сообщений: 17
Провел на форуме: 94720
Репутация:
1
|
|
slesh, спасибо за пояснение.
Это код на MASM или на чём? Просто немного непонятно что делают эти значики собаки в начале имён меток (@_nextProc: @_next4  + что значит знак доллара в инструкции and edx,$0000ffff?
|
|
|

13.07.2009, 19:38
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Это ассемблерная вставка из дельфяной проги )
А там $ - это типа HEX значение т.е. аналог буквы h в конце
@ - там все метки начинаются с сабаки.
|
|
|

13.07.2009, 19:39
|
|
Познающий
Регистрация: 24.02.2006
Сообщений: 34
Провел на форуме: 136883
Репутация:
50
|
|
Если смотрешь в код ты асма
И увидел там знак бакса
Крикни в воздух с другом разом
-Это млять же сцуко "ФАСыМ"!!!!!
-----
(C) х0ман) мухаха)
P.S.
(для тех кто не может понять, что это перед ним fasm или masm) ^^.
про делфу потом напишу 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|