![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
1) названия
2) на распаковщик -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
Тоесть на функцию unpack ? Но я не могу понять как при получении контроля сдвинуть EXE на ImageBase
![]() |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
а как ты вообще делаеш?
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
Я создаю новую секцию в файле, туда пишу внедряемый EXE'шник ну конечно ставлю аттрибуты, виртуальный размер и физический размеры устанавливаю равным размеру внедр. EXE, меняю точку входа на (EntryPoint внедряемого EXE + физический адрес по которому он закинут, то есть физическому адресу последней секции), увеличиваю SizeOfImage.
Но сам процесс перекидывания EXE в виртуальном пространстве не пойму, как это вообще делается ? Это сообщение отредактировал(а) SIGAra - 27.2.2006, 14:36 |
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
Наконец-то разобрался. Это оказалось просто! Большое спасибо oleg1973 за оказанную помощь.
|
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
При перекидывании EXE в памяти, он использует оригинальные адреса или адреса относительно с места которого он загружен ?
То есть, например:
В оригинале (Не будучи склееным с некоторым EXE) выведет Hello World, а вот при переадрессации в склееном EXE, выведет какой-то мусор. Действитвительно это так ? |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
в данном случае адрес указывающий на стринг будет фиксированным
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
И сразу же возникает вопрос.
Например:
Функия будет переадресована ? Или просто вызов будет по стандартному адресу ? |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
что значит переадресована?
оно получается так: MessageBox(0,"hello","world",0); компилятор переведет все это дело в push 0 push adr_hello <- тут у нас адрес нашего стринга hello push adr_world <- тут у нас адрес нашего стринга world push 0 call [adr_msgbox] <- указывает НА АДРЕС в таблице импорта ехе файла , по которому лежит адрес функции MessageBox из User32.dll -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
Я имел ввиду переадресована, например имеется функция func , а main её вызывает и в момент когда весь образ exe закинут на ImageBase(в моем случае - 0x00400000) функция main будет вызывать func или она будет брать адрес этой функции относительно ImageBase ?
|
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
есть несколько вариантов вызова процедуры (всмысле интерпритация в асме/машинном коде)
call main_proc если имеем дело с CALL то тут будет указано смещение относительно адреса с которого мы вызываем процедуру в 99% оно так и будет а вот если в сишном коде есть нечто типа IF - проверка некого условия то компилер может сделать в данном случае 2 варианта jz или jmp тут уже будет все по другому так как к примеру jmp бывает "короткий" и "длинный" если вызываемая процедура находится в пределах 128 байт то будет использован короткий "релативный" jmp в котором укажется смещение вызываемой процедуры относительно адреса вызова а если вызываемая процедура находится "вне доступа" короткого jmp тогда компилятор сделает конструкцию типа jmp 0x401000 тоесть подставит жесткий фиксированный адрес вызываемой процедуры и соответственно перенеся данный код на другой адрес он будет не работоспособен -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
SIGAra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
Спасибо за помощь !
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |