Blog. Just Blog

Ассемблер: загрузка файлов на FTP-сервер

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Небольшой пример работы с Интернетом на Ассемблере, а именно передача файла на сервер по FTP-протоколу. В реализации нет ничего сложного, а вот где применить это знание - решать вам. Можете сливать логи с паролями жертвы, можете загружать картинки на свой сайт.

В процессе работы используются константы, которых по дефолту нет в FASM. Это не самая большая проблема, опишем их самостоятельно:
  1. ; Константы для работы
  2. INTERNET_OPEN_TYPE_PRECONFIG = 0
  3. INTERNET_FLAG_PASSIVE = 0x08000000
  4. INTERNET_SERVICE_FTP = 1
  5. FTP_TRANSFER_TYPE_BINARY = 2
Теперь несколько слов о порядке загрузки файлов на FTP. Сперва создается FTP-соединение с удаленным сервером на указанный порт (по умолчанию 21) и с заранее известными логином и паролем. Если соединение прошло успешно, на сервере выбирается целевая директория относительно корневой. Затем указывается существующий файл на диске и имя, под которым он будет загружен на сервер. Вот, в принципе, и все, что надо знать. Осталось перевести слова на язык Ассемблера.
  1. ; Данные для подключения к FTP-серверу
  2. user_agent  db   'FTP Uploader',0   ; User Agent вашего загрузчика
  3. login       db   'login',0          ; Логин
  4. password    db   'password',0       ; Пароль
  5. server      db   'example.com',0    ; Сервер
  6. port        dd   21                 ; Порт для подключения к серверу
  7. local_file  db   'C:\data.txt',0    ; Имя исходного файла на диске
  8. remote_file db   'data.txt',0       ; Имя целевого файла на сервере
  9. remote_dir  db   '/public_html/',0  ; Имя целевой директории на сервере
Выше перечислены примерные данные, необходимые для подключения к FTP-серверу и для передачи файла. В вашем случае, естественно, все значения будут другими.

Теперь приведу пример минимального кода, реализующего загрузку файла. Никаких проверок на наличие файла, результат установки соединения и т.п. не производится, подразумевается, что все работает нормально.
  1.         ; Открыть интернет-соединение
  2.         invoke  InternetOpen,user_agent,\
  3.                 INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0
  4.         mov     [hInet],eax
  5.  
  6.         ; Открыть FTP-соединение
  7.         invoke  InternetConnect,[hInet],server,[port],login,password,\
  8.                 INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0
  9.         mov     [hConnection],eax
  10.  
  11.         ; Установить рабочую директорию на FTP
  12.         invoke  FtpSetCurrentDirectory,[hConnection],remote_dir
  13.  
  14.         ; Загрузить файл на FTP-сервер
  15.         invoke  FtpPutFile,[hConnection],local_file,remote_file,\
  16.                 FTP_TRANSFER_TYPE_BINARY,0
  17.  
  18.         ; Закрыть соединение
  19.         invoke  InternetCloseHandle,[hConnection]
  20.         invoke  InternetCloseHandle,[hInet]
В приложении небольшая программа с исходным текстом, позволяющая загружать выбранный локальный файл на FTP-сервер. В целях безопасности и сохранения приватности все данные для соединения и имена файлов вы указываете сами.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Upload.To.FTP.Demo.zip (3,439 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 5788 | Комментариев: 14

Метки: Assembler, сеть
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Наум (09.06.2018 в 19:14):
Цитатапривет, скажи а почему ошибка при компилирование?

Замени в исходнике это:

include 'apia\kernel32.inc'
include 'apia\user32.inc'
include 'apia\shell32.inc'

на это:

include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\shell32.inc'
Наум (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):
Спасибо. Опасный вы человек, охотник.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2018
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0045 сек.) / Память: 4.75 Mb
Наверх