Свой системный загрузчик с блекджеком и шлюхами

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Gar|k, 17 Mar 2010.

  1. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    В то время, когда у меня еще в помине не было компьютера у моего одноклассника он был, но его старший брат программист чтобы мы не игрались запароливал систему DOS тремя паролями и в случаи не верного ввода одного из них компьютер тупо вырубался. Прошло время у меня появился компьютер, а мечта стать умней его брата осталась )

    Проверка пароля учетной записи в windows меня никогда не радовала да и в unix тоже. А что до загрузки систмы? системный загрузчик так почему бы нам его не модифицировать?

    Опираясь на статью Криса Касперски MBR своими руками я немного модифицировал загрузчик windows XP добавив туда проверку пароля (проверяется каждый символ - нужно ввести все сразу правильно, а если ошибся начинай заново) и написал установщик.

    [​IMG]

    СКАЧАТЬ
    Программа установки загрузчика
    изначально предлагает создать аварийную загрузочную флешку (которая запускает систему в обход mbr на жестком диске), а затем выбрать номер физического диска куда следует установить загрузчик.

    Часть кода программы, функция записи в первый сектор физического диска
    Code:
    #define sPD "\\\\.\\PhysicalDrive%d"
    
    int wr_disk(BYTE disks,unsigned char *data,size_t szdata) {
    	unsigned char buf[1024],name[100],ndump[30];
    	HANDLE hFile;
    	HFILE f;
    	//------
    	DISK_GEOMETRY_EX dg; // структура геометрии диска
    	DWORD junk;
    	//------
    
    	sprintf((LPSTR)name,sPD,disks);
    
    	hFile=CreateFile((LPCSTR)name,GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0);
    	if(hFile!=INVALID_HANDLE_VALUE)
    	{
    		if(DeviceIoControl(hFile,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,NULL,0,&dg,sizeof(DISK_GEOMETRY_EX),&junk,NULL))
    		{
    			if(szdata>dg.Geometry.BytesPerSector){CloseHandle(hFile); return -1;}
    
    			SetFilePointer(hFile,0,0,FILE_BEGIN);
    			ReadFile(hFile,&buf[0],dg.Geometry.BytesPerSector,&junk,NULL);
    			CloseHandle(hFile);
    
    
    			sprintf((LPSTR)ndump,"dump_mbr.%6d",rand());
    			f=_lcreat((LPCSTR)ndump, 0);
    			_lwrite(f,(LPCCH)&buf[0],dg.Geometry.BytesPerSector);
    			_lclose(f);
    
    			memcpy(&buf[0],&data[0],szdata);
    
    			hFile=CreateFile((LPCSTR)name,GENERIC_WRITE, FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
    			SetFilePointer(hFile,0,0,FILE_BEGIN);
    			WriteFile(hFile,&buf[0],dg.Geometry.BytesPerSector,&junk,NULL);
    			if(junk!=dg.Geometry.BytesPerSector){printf("Error write\n");}else{printf("%s write\tOK\n",name);}
    			CloseHandle(hFile);
    
    		}
    	}
    }
    
    Ради теста загрузчик можно записать на флешку и поставить в BIOS загрузку с USB (если ваша материнка это поддерживет). В принципе так можно и оставить. Я уверен ваши близкие будут в шоке и больше не подойдут к компьютеру пока вас нет дома :D

    З.Ы: я не рекомендую ставить свой загрузчик как основной. Работает он и тестировал я его только под winXP (под win7 пишет boot error т.к там совершенно другая система загрузки)
    В общем на свой страх и риск! После записи загрузчика оригинальный сохраняется в папке с программой как dump_mbr.*
     
    _________________________
    #1 Gar|k, 17 Mar 2010
    Last edited: 17 Mar 2010
    5 people like this.
Loading...