Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |
Извиняюсь! В процессе отправки поста МД грохнулся! 17.03.02 19:04 Число просмотров: 993
Автор: Biasha <Бяша> Статус: Member
|
> На самом деле проблема такая: под МД шмат кода хранится в > криптованном виде, потом декриптуется и запускается. > Как из этого фрагмента организовать вызовы АПИ? > Если бы там это было через прерывания, я бы не спрашивал. У приложения есть таблица импортов, в которую загрузчик записывает адреса функций, статически связанных - из этой таблицы и бери адреса.
А ещё можно извратиться и вызывать функции через int 2Eh.
|
|
<programming>
|
Как вызвать АПИ из перемещаемого кода? 16.03.02 07:54
Автор: Zef <Alloo Zef> Статус: Elderman
|
|
|
 |
Как вызвать АПИ из перемещаемого кода? 16.03.02 10:01
Автор: vp016 Статус: Незарегистрированный пользователь
|
hi!
Oooo!:) Брат по разуму! Короче говоря абсолютный адрес можно загрузить
в регистр:
mov[lb] $128, %eax
call *%eax
эквивалент:
int (* f)();
f = 0x80;
(* f)();
Для unix, я насколько понимаю о чем идет речь :), проблем нету - используешь прямо системные вызовы int, сам код можно написать
переместимым сравнительно просто:
jmp test
test1:
mov %esp, %ebp # сдесь стало быть мы можем вычислить адрес скоторго у нас прога:)
...
call test1
Для Вин32 проблема состоит в том что для апи - адреса в dll (их можно вытянуть из PEаголовка), но от версии вин зависит где искать PE заголовок. Если бы микрочлены выложили полное описание системных вызовов, то можно было бы сделать так как в unix. Если интересно, стукни в 144221400 и обсудим более подробно задачу, если это то о чем я подумал, я смогу помочь:).
|
 |  |
Извиняюсь! В процессе отправки поста МД грохнулся! 16.03.02 12:37
Автор: Zef <Alloo Zef> Статус: Elderman Отредактировано 16.03.02 12:39 Количество правок: 1
|
На самом деле проблема такая: под МД шмат кода хранится в криптованном виде, потом декриптуется и запускается.
Как из этого фрагмента организовать вызовы АПИ?
Если бы там это было через прерывания, я бы не спрашивал.
|
 |  |  |
Извиняюсь! В процессе отправки поста МД грохнулся! 17.03.02 19:04
Автор: Biasha <Бяша> Статус: Member
|
> На самом деле проблема такая: под МД шмат кода хранится в > криптованном виде, потом декриптуется и запускается. > Как из этого фрагмента организовать вызовы АПИ? > Если бы там это было через прерывания, я бы не спрашивал. У приложения есть таблица импортов, в которую загрузчик записывает адреса функций, статически связанных - из этой таблицы и бери адреса.
А ещё можно извратиться и вызывать функции через int 2Eh.
|
 |  |  |  |
А через int 2Eh как? 18.03.02 04:05
Автор: Zef <Alloo Zef> Статус: Elderman
|
|
|
 |  |  |  |  |
А через int 2Eh как? 18.03.02 08:38
Автор: vp016 Статус: Незарегистрированный пользователь
|
|
Знал бы прикуп - жил бы в Сочи. Описание системных вызовов в вин, мне неизвестно:(.
|
 |  |  |
Извиняюсь! В процессе отправки поста МД грохнулся! 16.03.02 13:24
Автор: YURICH Статус: Незарегистрированный пользователь
|
> На самом деле проблема такая: под МД шмат кода хранится в > криптованном виде, потом декриптуется и запускается. > Как из этого фрагмента организовать вызовы АПИ? > Если бы там это было через прерывания, я бы не спрашивал. GetProcAddress?
|
 |  |  |  |
Дык, его же то же надо вызвать, а как? 17.03.02 02:51
Автор: Zef <Alloo Zef> Статус: Elderman
|
|
Я думаю, лучше сделать некриптованные "переходнички" в теле проги, вот тока вопрос: а подпрограммы при загрузке садятся на постоянные относительные адреса, или "плавают" друг относительно друга?
|
 |  |  |  |  |
Дык, его же то же надо вызвать, а как? 17.03.02 12:28
Автор: vp016 Статус: Незарегистрированный пользователь
|
> Я думаю, лучше сделать некриптованные "переходнички" в теле > проги, вот тока вопрос: а подпрограммы при загрузке садятся > на постоянные относительные адреса, или "плавают" друг > относительно друга? При таком раскладе можно получить дескриптор на загруженную библиотеку
или загрузить ту кокторую нужно loadlibrary. затем получить указатели на необходимые функции getprocessaddr. Ну и дальше вызывать по указателям.
|
|
|