Ассемблер: загрузка файлов на FTP-сервер
Небольшой пример работы с Интернетом на Ассемблере, а именно передача файла на сервер по FTP-протоколу. В реализации нет ничего сложного, а вот где применить это знание - решать вам. Можете сливать логи с паролями жертвы, можете загружать картинки на свой сайт.В процессе работы используются константы, которых по дефолту нет в FASM. Это не самая большая проблема, опишем их самостоятельно:
Code (Assembler) : Убрать нумерацию
- ; Константы для работы
- INTERNET_OPEN_TYPE_PRECONFIG = 0
- INTERNET_FLAG_PASSIVE = 0x08000000
- INTERNET_SERVICE_FTP = 1
- FTP_TRANSFER_TYPE_BINARY = 2
Code (Assembler) : Убрать нумерацию
- ; Данные для подключения к FTP-серверу
- user_agent db 'FTP Uploader',0 ; User Agent вашего загрузчика
- login db 'login',0 ; Логин
- password db 'password',0 ; Пароль
- server db 'example.com',0 ; Сервер
- port dd 21 ; Порт для подключения к серверу
- local_file db 'C:\data.txt',0 ; Имя исходного файла на диске
- remote_file db 'data.txt',0 ; Имя целевого файла на сервере
- remote_dir db '/public_html/',0 ; Имя целевой директории на сервере
Теперь приведу пример минимального кода, реализующего загрузку файла. Никаких проверок на наличие файла, результат установки соединения и т.п. не производится, подразумевается, что все работает нормально.
Code (Assembler) : Убрать нумерацию
- ; Открыть интернет-соединение
- invoke InternetOpen,user_agent,\
- INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0
- mov [hInet],eax
- ; Открыть FTP-соединение
- invoke InternetConnect,[hInet],server,[port],login,password,\
- INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0
- mov [hConnection],eax
- ; Установить рабочую директорию на FTP
- invoke FtpSetCurrentDirectory,[hConnection],remote_dir
- ; Загрузить файл на FTP-сервер
- invoke FtpPutFile,[hConnection],local_file,remote_file,\
- FTP_TRANSFER_TYPE_BINARY,0
- ; Закрыть соединение
- invoke InternetCloseHandle,[hConnection]
- invoke InternetCloseHandle,[hInet]
Просмотров: 7260 | Комментариев: 14
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Наум
(08.06.2018 в 17:48):
Даёшь WS_EX_TOOLWINDOW для асм-тулзов!
За тулзу спасибо.
За тулзу спасибо.
ManHunter
(09.10.2017 в 23:41):
Я чо, по звездам угадывать должен?
Ромка
(09.10.2017 в 23:38):
привет, скажи а почему ошибка при компилирование?
ManHunter
(20.06.2014 в 06:50):
Из гуглояндекса, из MSDN
Аркадей
(20.06.2014 в 03:00):
Откуда брать остальные константы типа INTERNET_SERVICE_HTTP?
Grey
(29.04.2014 в 14:50):
с моей любительской квалификацией )) боюсь у меня это займет лет пять, а гармонию и спокойствие точно заменит паранойя.
ManHunter
(29.04.2014 в 13:21):
Что-то в свопе в любом случае остается, может еще где-то, но вряд ли нарочно. А так welcome в отладчик и пару недель трассировки от входа в апи до сетевых дров. Зато потом наступит гармония и спокойствие :)
Grey
(29.04.2014 в 13:18):
А если локально посмотреть? Может такое быть что миллионы авторов "настольных" программ не подозревают, что она что то там собирает и передаёт при оказии соединения? Это не паранойя но имхо соблазн достаточно велик.
ManHunter
(29.04.2014 в 08:54):
Если подумать, сколько перекладных узлов от твоего компа до точки соединения, то винапи из всего этого самое невинное звено.
Grey
(29.04.2014 в 08:44):
кто нибудь вообще анализировал вин-апи? может они там тоже чегото передают себе??
ManHunter
(04.04.2014 в 16:47):
Вручную приловчился
Анатолий
(04.04.2014 в 15:22):
Диалоги вы в ResEdit'е и пр. делаете, а потом переводите в форма FASM'а или же вручную всё?
Grey
(03.04.2014 в 15:48):
Спасибо. Опасный вы человек, охотник.
Добавить комментарий
Заполните форму для добавления комментария
Замени в исходнике это:
include 'apia\kernel32.inc'
include 'apia\user32.inc'
include 'apia\shell32.inc'
на это:
include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\shell32.inc'