Hotkeys - Vista

dział ogólny

Hotkeys - Vista

Nowy postprzez Gazunio » czwartek, 16 lipca 2009, 10:26

Witam. Poprzedni temat można zamknąć, gdyż już problem rozwiązany. Skompilowany program chciałem przetestować na systemie Windows Vista. Dodałem w pliku manifestu odpowiedni kod, by program uruchamiał się jako admistrator, i tak się dzieje. Ale problem pojawia się z hotkeys'ami. Kod hotkeysów stworzyłem edytując kod keyloggera. I na Windows XP działa dobrze. Na Viscie żaden hotkey's nie działa. Co może być nie tak. Mam jeszcze jeden problem - z kopiowaniem folderów z zawartością. Tak więc nie za każdym razem kopiowanie działa poprawnie. Dla pewności dodałem message'a z katalogiem który ma być kopiowany, ale mimo to niekiedy pojawia się błąd, że nie może odczytać z dysku źródłowego. Raz działa, a raz nie.
Avatar użytkownika
Gazunio
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): środa, 13 maja 2009, 18:40
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2009
Gadu Gadu: 5147883
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Cyfrowy Baron » czwartek, 16 lipca 2009, 11:54

Vista ma większy stopień bezpieczeństwa on XP i pewnie nie pozwala zamontować haka systemowego dlatego Hotkey nie działa.
Zastanawiam się czy zamiast haka systemowego nie lepiej byłoby utworzyć Hotkey dla programu i go zarejestrować, powinno działać.
Co do kopiowania katalogów to nie wiem jakiej metody kopiowania używasz, jeżeli za pomocą "latających folderów", to czasami nawet XP ma z tym problemy. Sugerowałbym wykorzystać funkcję FindFirst i połączyć ją z kopiowaniem plików i tworzeniem katalogu. W ten sposób, że program najpierw odczytuje nazwę katalogu źródłowego i jego zawartość następnie tworzy w innej lokalizacji taki sam katalog, kopiuje do niego pliki. Można by do tego celu przerobić poradę: ► patrz serwis: Cyfrowy Baron dział: porady -> różne 2 -> Usuwanie katalogu z całą zawartością.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Gazunio » piątek, 17 lipca 2009, 15:24

Stworzyłem taki kod:
//---------------------------------------------------------------------------
void __fastcall CopyDir(String Dir)
{
Dir = (Dir.SubString(Dir.Length(), 1) != "\\") ? Dir + "\\" : Dir;
TSearchRec sr;

if(FindFirst(Dir + "*.*", faAnyFile, sr) == 0)
{
do
{
if(((sr.Attr & faDirectory) > 0) & (sr.Name != ".") & (sr.Name != ".."))
{
CopyDir(Dir + sr.Name + "\\");
}
CopyFile((Dir + sr.Name).c_str(), ("c:\\" + sr.Name).c_str(), true);
}
while(FindNext(sr) == 0);
FindClose(sr);
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Screen->Cursor = crHourGlass; // zmiana kursora na zajęty
CopyDir("C:\\flags");
Screen->Cursor = crDefault; // przywrócenie domyślnego kursora
}


Po krótkich testach jest on działający, ale nie wiem czy on będzie działać cały czas poprawnie. Bo mi na XP te latające foldery też nie zawsze działają.

EDIT:
Zmodyfikowałem jeszcze ten kod, by przy wywoływaniu podawało się katalog skąd się kopiuje i dokąd:
void __fastcall CopyDir(String Dir, String dokad)
{
Dir = (Dir.SubString(Dir.Length(), 1) != "\\") ? Dir + "\\" : Dir;
dokad = (dokad.SubString(Dir.Length(), 1) != "\\") ? dokad + "\\" : dokad;
TSearchRec sr;

if(FindFirst(Dir + "*.*", faAnyFile, sr) == 0)
{
do
{
if(((sr.Attr & faDirectory) > 0) & (sr.Name != ".") & (sr.Name != ".."))
{
CopyDir(Dir + sr.Name + "\\", dokad);
}
CopyFile((Dir + sr.Name).c_str(), (dokad + sr.Name).c_str(), true);
}
while(FindNext(sr) == 0);
FindClose(sr);
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Screen->Cursor = crHourGlass; // zmiana kursora na zajęty
CopyDir("C:\\flags", "C:\\JM");
Screen->Cursor = crDefault; // przywrócenie domyślnego kursora
}
//---------------------------------------------------------------------------

Co do hotkeysów, to nie wiem jak się rejestruje hotkeysy. W serwisie jest tylko o rejestrowaniu rozszerzenia pliku, ale nie wiem jak to przerobić.
Avatar użytkownika
Gazunio
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): środa, 13 maja 2009, 18:40
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2009
Gadu Gadu: 5147883
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Gazunio » czwartek, 13 sierpnia 2009, 19:33

Tamten kod mi dobrze działa. Udało mi sie również stworzyć te hotkeysy, tzn. je zarejestrować. Ale mam pewien problem z nimi. Otóż one działają prawie wszędzie, ale nie działają tam gdzie miały- w grze FIFA 09. Podczas gry gra chodzi, hotkeysy nie reagują w ogóle... Nie wiem co może być nie tak

Sprawdzałem to na Viscie 64bit
Avatar użytkownika
Gazunio
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): środa, 13 maja 2009, 18:40
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2009
Gadu Gadu: 5147883
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Cyfrowy Baron » piątek, 14 sierpnia 2009, 09:38

Hotkey jest rejestrowany w API, podczas gdy gry działają w DirectX - nie zadziała.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Gazunio » piątek, 14 sierpnia 2009, 10:33

Tak więc czy istnieje możliwość w C++ Builderze stworzenia hotkeysów działających w grach z DirectX? Tak teraz szukałem to jedynie ktoś coś pisał o użyciu do tego foobara2000, lub by pozostawić program "stay on top". Czy któreś z tych rozwiązań może zadziałać?
Avatar użytkownika
Gazunio
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): środa, 13 maja 2009, 18:40
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2009
Gadu Gadu: 5147883
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Cyfrowy Baron » piątek, 14 sierpnia 2009, 11:22

Możesz zamontować hak systemowy, który będzie przechwytywał wciśnięcia klawiszy. ► patrz serwis: Cyfrowy Baron -> keyloger.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Gazunio » piątek, 14 sierpnia 2009, 12:41

Przepraszam za tyle niepotrzebnych postów. Ale co w przypadku systemu Windows Vista. Sam pisałeś, że Vista ma większy stopień bezpieczeństwa i nie da się używać tego haka systemowego. Już z przerobionym kodem keyloggera próbowałem i na XP działa ok, ale Vista kompletnie nic.
Avatar użytkownika
Gazunio
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): środa, 13 maja 2009, 18:40
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2009
Gadu Gadu: 5147883
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Cyfrowy Baron » piątek, 14 sierpnia 2009, 13:42

Haki systemowe działają również w systemie Vista, to tylko kwestia uzyskania odpowiednich uprawnień. Niestety nie korzystałem i nie korzystam z tego systemu, więc nie wiem jak to obejść. Nie wydaje mi się również by było mi to kiedykolwiek potrzebne dla sytemu Vista, już raczej dla Windows 7, ale to problem na najbliższą przyszłość.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez GoldWolf » sobota, 15 sierpnia 2009, 11:27

Na forum znajduje się mój programik, który używa manifestu by obejść zabezpieczenia VISTY. Ja używam W7 i tam go testowałem.
O tym jak dodać taki manifest pisałem tutaj.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Gazunio » czwartek, 20 sierpnia 2009, 18:55

Z manifestem nie mam problemu, bo do każdej wersji programu go dodaję. Ale mimo uprawnień administratora, na systemie Windows Vista żadne hotkeysy nie działają niestety... A na XP ładnie.
Skorzystałem z kodu zamieszczonego na innym forum przez Cyfrowego Barona, i zmodyfikowane tylko działanie po użyciu hotkeysa:
Kod: Zaznacz cały
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unitaa1.h"
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

HHOOK g_hLogHook       = NULL;
HWND g_hLastFocus      = NULL;
const int KeyPressMask = 0x80000000;
//---------------------------------------------------------------------------
HOOKPROC ConnectHook(int iCode, WPARAM wParam, LPARAM lParam)
{
if(iCode < 0) return (HOOKPROC)CallNextHookEx(g_hLogHook, iCode, wParam, lParam);

EVENTMSG *pEvt = (EVENTMSG *)lParam;


if(pEvt->message == WM_KEYDOWN)
{
  int vKey = LOBYTE(pEvt->paramL);
  char ch;
  char str[10];


  int iShift   = GetKeyState(VK_SHIFT);
  int iAlt     = GetKeyState(VK_MENU);
  int iControl = GetKeyState(VK_CONTROL);

  bool bShift   = (iShift & KeyPressMask) == KeyPressMask;
  bool bAlt     = (iAlt & KeyPressMask) == KeyPressMask;;
  bool bControl = (iControl & KeyPressMask) == KeyPressMask;



   if(bShift && bAlt && bControl && vKey == 81)
   {
    Application->Restore();
    ShowWindow(Application->Handle, SW_SHOW);
   }
  }

  return (HOOKPROC)CallNextHookEx (g_hLogHook, iCode, wParam, lParam);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(g_hLogHook == NULL)
{
  g_hLogHook = SetWindowsHookEx(WH_JOURNALRECORD, (HOOKPROC)ConnectHook, HInstance,0);
  ShowMessage("Hak podłączony");
}
else
{
  UnhookWindowsHookEx(g_hLogHook);
  g_hLogHook = NULL;
  ShowMessage("Hak nie został podłączony");
}         
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(g_hLogHook != NULL)
{
  UnhookWindowsHookEx(g_hLogHook);
  g_hLogHook = NULL;
}
}
//---------------------------------------------------------------------------


I niestety to nie działa... Chyba zrezygnuję z pełnego działania na Viscie.
Avatar użytkownika
Gazunio
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): środa, 13 maja 2009, 18:40
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2009
Gadu Gadu: 5147883
    NieznanyNieznana

Re: Hotkeys - Vista

Nowy postprzez Cyfrowy Baron » piątek, 21 sierpnia 2009, 08:42

Więcej o hakach systemowych przeczytasz tutaj: http://darkcult.gamedev.pl/kursy/apihook.html

Co do Visty to ten system Vista jest reklamowany jako RootkitProof, co w wolnym tłumaczeniu oznacza rootkitoodporny. Jak wiadomo rootkity wykorzystują haki systemowe, wiadome jest również że Vista nie jest rootkitoodporny.

"Wiedza potrzebna do stworzenia rootkita działającego w systemie Windows Vista jest znacznie większa niż ta, która trzeba było mieć, aby tworzyć rootkity w starym systemie. Takie rootkity, jak BleuPill czy BootKit, działają na innych zasadach niż te znane obecnie. Ale czy możliwe jest zainstalowanie w Viscie rootkita „standardowego”? Odpowiedź na to pytanie brzmi: niestety, tak. Pokażę to na przykładzie lekko zmodyfikowanego rootkita FuTO."
fragment zaczerpnięty ze strony: windowshosting.pl

Poczytaj sobie tutaj:

http://social.msdn.microsoft.com/Forums ... de89769322
http://social.msdn.microsoft.com/Forums ... 6947f1155a
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron