Исследование защиты программы Advanced FTP Password Recovery
Скриншот программы Advanced FTP Password Recovery
Программа Advanced FTP Password Recovery предназначена для восстановления забытых паролей от FTP, которые сохранены в настройках различных FTP-клиентов. Уникальность и универсальность Advanced FTP Password Recovery заключается в том, что вам не требуется расшифровывать какие-то файлы, брутить пароли или что-то еще. Если пароль сохранен в FTP-клиенте, то вам достаточно просто послать запрос на соединение, а Advanced FTP Password Recovery перехватит и покажет ваш пароль. Для перехвата надо сперва немного подготовиться: изменить в настройках FTP-клиента адрес нужного сервера на localhost или завернуть его через файл hosts на ip-адрес 127.0.0.1, если отредактировать его нельзя. Advanced FTP Password Recovery при запуске биндит свой перехватчик на порт 21 (FTP) локального хоста и ждет от FTP-клиента запроса на авторизацию. Очень простое и элегантное решение. Лично я считаю, что подобный инструмент в обязательном порядке должен быть на дежурной флешке, но, во-первых, программа не портативная, а во-вторых, бесплатно показывает только количество символов в пароле, сам пароль отображается только после регистрации.
Несмотря на то, что на офсайте есть ссылки на дистрибутив, они все ведут в никуда. Чтобы найти рабочую ссылку, пришлось немало пошерстить интернет. На всякий случай я перезалил его на файлообменник. Устанавливаем программу, смотрим. Главный исполняемый файл упакован UPX, который снимается им же или любым привычным для вас распаковщиком. Все остальные файлы в папке не несут никакой полезной нагрузки и могут быть удалены.
Запускаем распакованную программу, пробуем зарегистрировать любыми левыми данными:
Сообщение о неправильной регистрации
Отлично, текст сообщения мы теперь знаем. Поищем его в распакованном файле.
Строка сообщения о неправильной регистрации
Тоже никаких проблем, строка найдена, а рядом строка о корректной регистрации. Может быть придется и ее где-нибудь искать. Но пока посмотрим в дизассемблере условия появления сообщения о неправильной регистрации:
Code (Assembler) : Убрать нумерацию
- .text:00402BFA lea eax, [ebp+String]
- .text:00402C00 push eax ; lpString
- ; Вызвать функцию проверки
- .text:00402C01 call sub_403D50
- ; Если она вернула EAX=0, то введенный серийник неправильный
- .text:00402C06 test eax, eax
- .text:00402C08 pop ecx
- .text:00402C09 jz short loc_402C58
- ; Сообщение об удачной регистрации
- .text:00402C0B lea eax, [ebp+String2]
- .text:00402C11 push 40h ; uType
- .text:00402C13 push eax ; lpCaption
- .text:00402C14 push offset aThanksForRegis
- ; "Thanks for registering this program!"
- .text:00402C19 push [ebp+hDlg] ; hWnd
- .text:00402C1C call MessageBoxA
- .text:00402C22 mov esi, EndDialog
- .text:00402C28 push 1 ; nResult
- .text:00402C2A push [ebp+hDlg] ; hDlg
- .text:00402C2D call esi ; EndDialog
- .text:00402C2F lea eax, [ebp+String]
- .text:00402C35 push eax ; lpData
- .text:00402C36 call sub_403ED0
- .text:00402C3B pop ecx
- .text:00402C3C push ebx ; lParam
- .text:00402C3D push ebx ; wParam
- .text:00402C3E push 464h ; Msg
- .text:00402C43 push dword_4043E8 ; hWnd
- .text:00402C49 call PostMessageA
- .text:00402C4F push 2 ; nResult
- .text:00402C51 push [ebp+hDlg] ; hDlg
- .text:00402C54 call esi ; EndDialog
- .text:00402C56 jmp short loc_402C8A
- .text:00402C58 ; -----------------------------------------------
- .text:00402C58 loc_402C58:
- ; Сообщение о неудачной регистрации
- .text:00402C58 lea eax, [ebp+String2]
- .text:00402C5E push 10h ; uType
- .text:00402C60 push eax ; lpCaption
- .text:00402C61 push offset aTheCodeYouHave
- ; "The code you have entered is incorrect."...
- .text:00402C66 push [ebp+hDlg] ; hWnd
- .text:00402C69 call MessageBoxA
- .text:00402C6F jmp short loc_402C8A
Code (Assembler) : Убрать нумерацию
- .text:00403D50 sub_403D50 proc near
- .text:00403D50 sub esp, 2Ch
- .text:00403D53 xor ecx, ecx
- .text:00403D55 xor al, al
- .text:00403D57 mov [esp+2Ch+var_F], ecx
- .text:00403D5B mov [esp+2Ch+var_10], al
- .text:00403D5F mov [esp+2Ch+var_B], ecx
- .text:00403D63 mov [esp+2Ch+Src], al
- .text:00403D67 mov [esp+2Ch+var_1C], al
- .text:00403D6B push esi
- .text:00403D6C mov esi, [esp+30h+lpString]
- .text:00403D70 mov [esp+30h+var_7], ecx
- .text:00403D74 xor edx, edx
- .text:00403D76 xor eax, eax
- .text:00403D78 mov [esp+30h+var_3], cx
- .text:00403D7D mov dword ptr [esp+30h+Src+1], edx
- .text:00403D81 mov [esp+30h+var_1B], eax
- .text:00403D85 push esi ; lpString
- .text:00403D86 mov [esp+34h+var_1], cl
- .text:00403D8A mov [esp+34h+var_23], edx
- .text:00403D8E mov [esp+34h+var_17], eax
- .text:00403D92 call lstrlenA
- .text:00403D98 test eax, eax
- .text:00403D9A jz loc_403E3D
- .text:00403DA0 mov ecx, esi
- .text:00403DA2 mov edx, [ecx]
- .text:00403DA4 mov dword ptr [esp+30h+Src], edx
- .text:00403DA8 mov eax, [ecx+4]
- .text:00403DAB lea ecx, [esp+30h+var_1C]
- .text:00403DAF mov [esp+0Ch], eax
- .text:00403DB3 mov eax, 1
- .text:00403DB8 dec ecx
- .text:00403DB9 loc_403DB9:
- .text:00403DB9 mov dl, [esi+eax+8]
- .text:00403DBD mov [ecx+eax], dl
- .text:00403DC0 inc eax
- .text:00403DC1 cmp eax, 9
- .text:00403DC4 jl short loc_403DB9
- .text:00403DC6 mov esi, sscanf
- .text:00403DCC lea eax, [esp+30h+var_2C]
- .text:00403DD0 push eax
- .text:00403DD1 lea ecx, [esp+34h+Src]
- .text:00403DD5 push offset Format ; "%X"
- .text:00403DDA push ecx ; Src
- .text:00403DDB call esi ; sscanf
- .text:00403DDD add esp, 0Ch
- .text:00403DE0 lea edx, [esp+30h+lpString]
- .text:00403DE4 lea eax, [esp+30h+var_1C]
- .text:00403DE8 push edx
- .text:00403DE9 push offset Format ; "%X"
- .text:00403DEE push eax ; Src
- .text:00403DEF call esi ; sscanf
- .text:00403DF1 call sub_403AA0
- .text:00403DF6 lea ecx, [esp+3Ch+Src]
- .text:00403DFA push 9
- .text:00403DFC push ecx
- .text:00403DFD call sub_403AF0
- .text:00403E02 lea edx, [esp+44h+var_10]
- .text:00403E06 push 10h
- .text:00403E08 push edx
- .text:00403E09 call sub_403C20
- .text:00403E0E lea eax, [esp+4Ch+var_10]
- .text:00403E12 push 10h
- .text:00403E14 push eax
- .text:00403E15 call sub_403CA0
- .text:00403E1A push eax
- .text:00403E1B call sub_403CF0
- .text:00403E20 mov ecx, [esp+58h+lpString]
- .text:00403E24 add esp, 28h
- .text:00403E27 cmp cx, ax
- .text:00403E2A jnz short loc_403E3D
- .text:00403E2C xor eax, ecx
- .text:00403E2E pop esi
- .text:00403E2F and eax, 0FFFF0000h
- .text:00403E34 neg eax
- .text:00403E36 sbb eax, eax
- .text:00403E38 inc eax
- .text:00403E39 add esp, 2Ch
- .text:00403E3C retn
- .text:00403E3D ; -------------------------------
- .text:00403E3D loc_403E3D:
- .text:00403E3D xor eax, eax
- .text:00403E3F pop esi
- .text:00403E40 add esp, 2Ch
- .text:00403E43 retn
- .text:00403E43 sub_403D50 endp
Сохраняем сделанные изменения, запускаем программу. Сразу же заметно, что кнопка регистрации стала неактивной. То есть при отсутствии какого-либо серийника в пропатченном варианте программа прекрасно работает и ощущает себя зарегистрированной. А ведь именно этого мы и добивались, чтобы она стала портативной.
Программа успешно "зарегистрирована"
На всякий случай проверим, как обновленная Advanced FTP Password Recovery справляется со своей основной задачей. Тоже все работает как надо, в окне программы мы видим перехваченный логин и пароль. Цель достигнута. Точно так же можно сделать портативными и зарегистрированными остальные программы этой компании, среди которых, кстати, немало полезных. Иметь на дежурной флешке полный набор их инструментария не помешает.
Просмотров: 6209 | Комментариев: 6
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(21.10.2014 в 14:57):
Радость от выкладывания исходников стилера? Ну это да, в потрошках там реально интересно поковыряться :)
DimitarSerg
(21.10.2014 в 13:59):
Да я не путаю, статью читал и видел как работает. Это был скорее оффтоп с радости :)
ManHunter
(21.10.2014 в 08:55):
Не путай мягкое и теплое :) У стилеров и этой программы совершенно разные принципы работы.
DimitarSerg
(21.10.2014 в 03:35):
Web-архив никто не отменял, время поиска 3-4 минуты.
Вон UFR Stealer сделали опенсорсным, можно навостанавливать чего угодно и не только своё :D , так навеяло что-то, сорри
Maksovich
(19.10.2014 в 20:33):
Хорошая Программа!
user
(17.10.2014 в 04:01):
Описана версия 1.0.180.2006
Добавить комментарий
Заполните форму для добавления комментария