|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 25, 2004 00:21:06 Т.е. как мне кажется в "секции импорта" :) строковые названия заменяются на конкретные адреса... Ну мысль почти правильная :) , см. подробней . ====================================================================== ====================== 00401000 >/$ 6A 00 PUSH 0 ; /ExitCode = 0 00401002 \. FF15 3D104000 CALL [40103D] ; \ExitProcess ====================================================================== ====================== 00401008 . 00000000 DD 00000000 ; Struct 'IMAGE_IMPORT_DESCRIPTOR' 0040100C . 00000000 DD 00000000 00401010 . 00000000 DD 00000000 00401014 . 30100000 DD 00001030 00401018 . 3D100000 DD 0000103D 0040101C . 00000000 DD 00000000 ; Struct 'IMAGE_IMPORT_DESCRIPTOR' 00401020 . 00000000 DD 00000000 00401024 . 00000000 DD 00000000 00401028 . 00000000 DD 00000000 0040102C . 00000000 DD 00000000 00401030 . 6B 65 72 6E 65 6C>ASCII "kernel32.dll",0 0040103D > . 1AE03A79 DD 793AE01A ; kernel32.ExitProcess 00401041 00000000 DD 00000000 00401045 00 DB 00 00401046 00 DB 00 00401047 . 45 78 69 74 50 72>ASCII "ExitProcess",0 ============================================================================================ Тут я разделил вверху код , а ниже импорт (один из его видов) . Команда по адресу 00401002 (CALL [40103D]) генерируеться компилером , и четыре байта по адресу 0040103D до загрузки модуля пустые (нули) , а при загрузке его в память туда проставляеться реальный адрес ф-ции (т.е. у меня 793AE01A соотв. ExitProcess) |
|
|
Дата: Сен 25, 2004 01:33:25 Ещё может работать и так , но не везде :) 00401000 >/$ 6A 00 PUSH 0 ; /ExitCode = 0 00401002 \. E8 13D0FA78 CALL 793AE01A ; \ExitProcess |
|
|
Дата: Сен 25, 2004 11:00:03 bagrus. 1) Спасибо, что объясняешь,но я не могу понять цепочку передачи уп- равления, т.е. на 00401002 call, но ведь на 0040103D стоит та- кое значение 1AE03A79, а это далеко не jmp или call! Следовате- льно наверняка есть демон, который следит за обращением к этой области и переправляет по адресу указанному адресу. Прав ли я? И в какой момент в игру вступает функция GetProcAdress? 2) Плюс если msgbox.exe из 2 урока Исцелителя компилится с помощью ml.exe, а он не call dword использует, а call->jmp dword! Как сделать так, что бы он сделал первый случай? 3) В досе я люблю делать модификацию в сегменте кода, в винде на сколько я понял в таблице секции поле characteristic надо пра- вить, но на какое значение, какое наиболее безопасно? Чтобы слу- чайно эту секцию не затерли. 4) Как узнать по какому адресу загрузится функция из user32.dll, для случая bound импорта? Мои мысли спросил dumppe: Image Base 77E10000 00026544 1C3 452 MessageBoxA т.е. MessageBoxA загрузится по IB+Rva=VA=77e36544 Правильно? Olly говорит да, но ведь винде можит иногда не нравить- ся imageBase? В случае если я захочу сделать bound import, мне что все придется вручную? |
|
|
Дата: Сен 26, 2004 12:46:05 DevilsInterrupt 1. Квадратные скобки там не зря , CALL [40103D] - это не "прыгнуть" по адресу 40103D , а "прыгнуть" по адресу который лежит в ячейке 40103D . GetProcAdress вступает во время загрузки модуля , именно по-этому мы должны хранить в импорте строковое наименование ф-ции и модуля (тут ExitProcess и kernel32.dll) , а результат от GetProcAdress загрузчик и запишет в ячейку 40103D . 2. http://www.xmln.narod.ru/Masm32ex.htm |
|
|
Дата: Сен 27, 2004 09:17:05 >Квадратные скобки там не зря Сорри за тупость А второй вопрос слабо? Плюс тему Дизассембирование смотрел? На Третий вопрос ответ начал получать исследуя Aspack, точнее че он "натворил" с моей msgbox.exe Тама и увидел вопросы по теме дизассемблирование ;) Прикольные вещи, но легко увидеть. Кстати твой линк у меня 404 дает И как по поводу 4го квеста? |
|
|
Дата: Сен 27, 2004 12:08:27 Я тебе говорил - восемь раз , разными предложениями задавать один вопрос , чтобы можно было его понять . Слабо ? Буду тебя игнорировать пока не научишся . |
|
|
Дата: Сен 27, 2004 12:37:41 Bagrus Извини за непонятливость! :( Постараюсь исправиться. Если сейчас взять 2 урок из Iczelion`a то если посмотреть через Hiew можно увидеть такие байты вроде ff 25 [adress], т.е. вызов функции идет через цепочку call -> jmp dword [adress]. А как сделать мне, что бы скомпилировалось приложение и там вместо этой цепочки сразу было call dword[adress]? ЗЫ: Не сердись постарался испаравиться и написать по норме. |
|
|
Дата: Сен 27, 2004 12:51:05 Тю , погуглил бы по слову "Masm32ex" и скачал , там батник тебе всё сам переделает в масме , а вчера ещё линк работал , странно . |
|
|
Дата: Сен 27, 2004 13:06:54 [edited by IceStudent] Ты про это говорил? :)))) |
|
|
Дата: Сен 27, 2004 13:13:59 |
|
|
Дата: Сен 27, 2004 18:28:04 Bogrus Честное слово, чеза дурь не где ничо не скачаешь, кинь хоть на мыло? |
|
|
Дата: Сен 27, 2004 18:55:19 Бери тогда отсюда , махал я все линки проверять . |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.085 |