{C++} Program do blokowania pulpitu

0

Witam!
Zwracam się do Was z prośbą o pomoc, a mianowicie chodzi o mój program do blokowania pulpitu. Program działa w ten sposób, że blokuje pulpit (wyłącza explorera) aż do momentu wprowadzenia hasła. Sprawa wygląda tak, że to co się dało to znalazłem w Internecie, a o resztę muszę się spytać.

Pytania:

  1. Jak zrobić żeby okno było ciągle aktywne? Żeby nie dało się nic zrobić oprócz wpisania hasła, bo cały czas okno będzie migało (tak jak to czasem jest w Windowsie z błędami)?
  2. Jakiej funkcji użyć do zablokowania skrótu Ctrl+Alt+Delete oraz innych tego typu skrótów? (tu bym prosił o przykład kodu jeśli można)
  3. Co zrobić żeby nie dało się tego okienka wyłączyć w żaden sposób? Chodzi mi głównie o to żeby zdezaktywować przycisk "x".

Dodam, że robię to w konsoli pod Dev-C++, to jest kod jaki mam:

#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
int main()
{
	string haslo = "zaq12wsx";
	string wprowadz;
	system("taskkill /IM explorer.exe /F");
	system("cls");
	cout << "Aby odblokowac pulpit musisz wprowadzic haslo: ";	
	cin >> wprowadz;
	while(wprowadz != haslo)
	{
		cout << "Haslo nieprawidlowe. Sprobuj jeszcze raz:";
		cin >> wprowadz;		
	}
	if(wprowadz == haslo)
	{
		cout << "Haslo prawidlowe!";
		system("\"C:\\Windows\\explorer.exe\"");
		return 0;
	}
} 

Proszę o pomoc i z góry dziękuję :).

0

Dodaj bibliotekę, aby program w ogóle zadziałał:

string

Co do ukrywania "X" (z tego co ja wiem) to musisz znać już jakieś (nawet małe) środowisko graficzne (Allegro,Qt,WinApi), bo w konsolowych programach chyba tego X nie wyłączysz, co do blokowania klawiszy to też może być problem, ale to już niech ktoś inny się wypowie bo tego nie jestem pewny (nie trzeba blokować wszystkich klawiszy wystarczy tylko jeden z kombinacji ctrl+alt+del), tak poza fajnie by bylo jakby program mial funkcje podawania hasła, a potem usuwania (to tak na marginesie)

0

liske1 59 sekund temu
Dlaczego dałbyś 5 minusów jakbyś umiał ??
Też jestem początkującym

stringicstring (aka string.h)To dwie rozne rzeczy

Zeby nie bylo, az takiego offtopu to:

  1. Wez jakis kurs do reki
  2. Wejdz na MSDN i poszukaj interesujacych Cie rzeczy
  3. Twoj kod jakos wygladajacy:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main()
{
    char pass[] = "Moje haselko, sialalala";
    char buf[256];
    system("taskkill /IM explorer.exe /F");
    do { scanf("%255s ", buf); } while(!(strcmp(pass, buf)));
    system("\"C:\\Windows\\explorer.exe\"");
    return 0;
}
0

Program działa w ten sposób, że blokuje pulpit (wyłącza explorera) aż do momentu wprowadzenia hasła.

Dlaczego nie użyjesz mechanizmu wbudowanego w system, zamiast wymyślać cuda?

#include <windows.h>
int main()
{
	LockWorkStation();
}
0
Azarien napisał(a):

Dlaczego nie użyjesz mechanizmu wbudowanego w system, zamiast wymyślać cuda?

Dlatego, że ja nie chce aby program zablokował komputer tylko zeby blokował pulpit. Po co? Weźmy na przykład taką sytuację: Mam komputer. Na tym komputerze mam konto zabezpieczone silnym hasłem. Ale oczywiście znalazł się ktoś kto chce mi się włamać na komputer i wykraść jakieś dane. Miał jakiś super sposób i złamał mi to hasło. I co? Bierze co chce. Nawet jeśli mój program zablokowałby komputer to jak ten ktoś zna hasło to się zaloguje i po problemie. Mój program ma jednak inne zadanie, a mianowice takie, że blokuje pulpit i nie da się zrobić nic dopóki nie wpisze się hasła, a czegoś takiego nie da się złamać, bo to jest zwykły program. Jeśli dodałbym funkcje o które pytam to byłby on nie do obejścia dla przeciętnego użytkownika :D
CHYBA

0

Po co łamać hasła, jeżeli można zabrać dysk albo uruchomić inny OS?

Poza tym, skoro zakładasz, że ktoś złamie hasło użytkownika, to dlaczego jednocześnie zakładasz, że Twojego nie złamie?

No i przy takiej "ochronie" wystarczy uruchomić menadżer zadań i ubić ten cudowny program. Poza tym nadal można włączyć co się chce.

0
Endrju napisał(a):

Poza tym, skoro zakładasz, że ktoś złamie hasło użytkownika, to dlaczego jednocześnie zakładasz, że Twojego nie złamie?

A niby jak miałby to zrobić? To jest zwykły program, którego hasło jest zapisane w samym kodzie, nigdzie indziej, a hasła do kont Windowsa są gdzieś zapisane w jakichś plikach, więc aby złamać hasło do tego programu to trzebaby znaleźć program, który czyta kod programu i odnajduje w nim hasło..

Endrju napisał(a):

No i przy takiej "ochronie" wystarczy uruchomić menadżer zadań i ubić ten cudowny program. Poza tym nadal można włączyć co się chce.

I właśnie dlatego poprosiłem o jakiś kodzik, który wyłączałby funkcje skrótu Ctrl+Alt+Delete i innych tego typu, bo wtedy nie dałoby się wyłączyć mojego programu.

Mogę się mylić ale wydaje mi się, że mam rację..

0

No dobrze ale żeby odpalić Notatnik to trzeba uruchomić explorera, który wyłącza się po zalogowaniu i włącza dopiero jak wpiszesz hasło

0

Jak ktos zlamie Twoje haslo do windowsa to zrobi to z innego systemu niz ten windows...

  • Nie masz zielonego pojecia jak ogolnie dzialaja programy, o zabezpieczeniach nie mowiac.
0

A niby jak miałby to zrobić? To jest zwykły program, którego hasło jest zapisane w samym kodzie, nigdzie indziej, a hasła do kont Windowsa są gdzieś zapisane w jakichś plikach, więc aby złamać hasło do tego programu to trzebaby znaleźć program, który czyta kod programu i odnajduje w nim hasło..

:-D

Ten program nazywa się notatnik albo jakikolwiek inny edytor tekstowy. Może być też jakikolwiek hexedytor albo takie coś: http://www.manpagez.com/man/1/strings/

0

Dlatego, że ja nie chce aby program zablokował komputer tylko zeby blokował pulpit. Po co? Weźmy na przykład taką sytuację: Mam komputer. Na tym komputerze mam konto zabezpieczone silnym hasłem. Ale oczywiście znalazł się ktoś kto chce mi się włamać na komputer i wykraść jakieś dane.

Naprawdę uważasz, że twój program będzie silniejszy od standardowego hasła w Windowsie?

Poza tym, oba sposoby działają tylko pod warunkiem, że atakujący „nie odważy się” zrestartować komputera (i uruchomić np. z magicznej płytki jakiejś…) albo wyjąć dysku i schować do plecaka.

Jeśli atakujący ma fizyczny, nieskrępowany* dostęp do maszyny, to może zrobić wszystko.

  • tj. nikt nie patrzy podejrzliwym wzrokiem gdy ten wyciąga młotek…
0
  1. Co zrobić żeby nie dało się tego okienka wyłączyć w żaden sposób? Chodzi mi głównie o to żeby zdezaktywować przycisk "x".
RemoveMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
DrawMenuBar(GetConsoleWindow());
  1. Jakiej funkcji użyć do zablokowania skrótu Ctrl+Alt+Delete oraz innych tego typu skrótów?

Ctrl+Alt+Delete nie zablokujesz w Win7. W XP doskonale sprawuje się przełączanie na dodatkowy pulpit - funkcje CreateDesktop+SwitchDesktop.

static SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};
HDESK hDesktop = CreateDesktop("MojLoginDesktop", NULL, NULL, 0, GENERIC_ALL, &sa);
// nie pamiętam, czy SECURITY_ATTRIBUTES jest tu na pewno potrzebne
//w samplu mam je podstawione do CreateProccess też, gdzie bInheritHandles=TRUE

Jeżeli masz już jakieś okno otwarte - a masz okno konsoli - to program musi uruchomić samego siebie za pomocą jednej z funkcji przyjmującej argument STARTUPINFO, np. CreateProcess, gdzie w STARTUPINFO.lpDesktop podajesz nazwę utworzonego desktopu:

STARTUPINFO si={0};
si.cb = sizeof(si);
si.lpDesktop = TEXT("MojLoginDesktop");

Gdy już program się uruchomi, to funkcją SwitchDesktop przełączasz pulpit na ten nowy i czekasz, aż program zakończy działanie (WaitForSingleOject). Potem wracasz na domyślny desktop tą samą funkcją SwitchDesktop:

if (CreateProcess(0, GetCommandLine(), &sa, 0, TRUE...
{
	//HDESK hMainDesktop = GetThreadDesktop(GetCurrentThreadId());
	SwitchDesktop(hDesktop); // CreateDesktop
	WaitForSingleObject(pi.hProcess, INFINITE);
	SwitchDesktop(hMainDesktop);

Sprzwdzenia na którym desktopie się jest, można sprawdzić przez np argv[] - gdy dodasz jakiś argument do commandline w CreateProcess, albo przez GetEnvironmentVariable() - gdy przed odpaleniem CreateProcess dodasz jakąś wyjątkową zmienną - SetEnvironmentVariable(), ewentualnie sprawdzając nazwę aktualnego desktopu:

TCHAR deskname[MAX_PATH];
DWORD cch; HDESK hMainDesktop = GetThreadDesktop(GetCurrentThreadId());
GetUserObjectInformation(hMainDesktop, UOI_NAME, deskname, MAX_PATH, &cch);
if (!_tcsicmp(deskname, TEXT("Default"))) {/*tutaj CreateDesktop,CreateProcess (child pyta o hasło),SwitchDesktop ... odpalenie explorera*/}
 else if (!_tcsicmp(deskname, TEXT("MojLoginDesktop"))) {/*tutaj tylko pytasz o hasło, będąc na prywatnym desktopie*/}
1
SeKa napisał(a):

No dobrze ale żeby odpalić Notatnik to trzeba uruchomić explorera, który wyłącza się po zalogowaniu i włącza dopiero jak wpiszesz hasło

  1. Uruchom Menedżer Zadań
  2. Zabij explorer.exe
  3. Wybierz Plik -> Nowe zadanie
  4. Wpisz "notepad"
  5. Wciśnij Enter
  6. Zastanów się nad tym, jak mało jeszcze wiesz, i jak karkołomnym zdaniem jest próba zrobienia programu przejmującego kontrolę nad Windowsem i lepiej niż Windows zabezpieczonego, za pomocą kawałków kodu znalezionych w internecie.
0

Jak wyczytałem z dokumentacji WinApi o hookach (np. przechwytywanie klawiszy), napotkałem zdanie twierdzące, iż Ctrl+Alt+Delete jest komunikatem nadrzędnym i będziesz mógł go przechwycić dopiero po otworzeniu się menadżera zadań.

Aby wyłączyć krzyżyk wystarczy dobrać się do klasy okna głównego i zmienić styl tego okna.
Możesz też według WinApi obsłużyć polecenie WM_CLOSE które jest wywoływane jak klikasz na "krzyżyk". Wtedy klikanie na "krzyżyk" nie spowoduje żadnej reakcji.

Jak nazwa twojego okna będzie wynosiła 0 znaków (nazwę okna podajemy przy tworzeniu go), wtedy program będzie niewidoczny w zakładce Aplikacje w menadżerze zadań. (Można go jednak wyłączyć w zakładce procesy)

Ja zablokowałem pulpit innym sposobem. Stworzyłem kontrolkę o wymiarach rozdzielczości ekranu i ustawiłem jej tło na przeźroczyste. Jako okno - rodzic podałem uchwyt do pulpitu i dodałem flagę sprawiającą, że okno działa jak "dialog modalny". W ten sposób okno było niewidoczne, a kliknięcie na pulpit powodowało wysłanie komunikatu do okna-dziecka, a nie pulpitu. Dodatkowo można dodać ogranicznik czasowy, nie pozwalający czasowo na otworzenie menadżera zadań i wyszukanie programu w procesach.

0

Ojej dobra może przesadziłem z tym przykładem. Sam niedawno łamałem w szkole hasło na admina Linuksem. Ale nie o to mi chodziło zakładając ten temat aby dyskutować na temat zabezpieczeń w Windowsie tylko po to żeby się spytać o parę funkcji do programu.

somekind napisał(a):
  1. Uruchom Menedżer Zadań
  2. Zabij explorer.exe
  3. Wybierz Plik -> Nowe zadanie
  4. Wpisz "notepad"
  5. Wciśnij Enter
  6. Zastanów się nad tym, jak mało jeszcze wiesz, i jak karkołomnym zdaniem jest próba zrobienia programu przejmującego kontrolę nad Windowsem i lepiej niż Windows zabezpieczonego, za pomocą kawałków kodu znalezionych w internecie.

Już mówiłem. Właśnie po to się chciałem spytać o wyłączenie funkcji klawiszy Ctrl+Alt+Delete i innych tego typu żeby nie dało się włączyć menedżera zadań. Ale nie pomyślałem o trybie awaryjnym i paru innych rzeczach, więc nie za wiele by to dało chcąc zabezpieczyć się przed doświadczonym hackerem, który nie takie programiki obchodził. Ale jak już mówiłem nieważne, bo nie po to założyłem temat.

sapero i gswidwa dzięki za pomoc i rady :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1