Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Winlogon i RegisterHotKey ID?

[es] :: Security Coding :: Winlogon i RegisterHotKey ID?

[ Pregleda: 4388 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Winlogon i RegisterHotKey ID?10.11.2006. u 10:10 - pre 212 meseci
Trebao bi preduhitriti Winlogon.exe proces pri primanju WM_HOTKEY poruke koja znaci SAS iliti CTRL-ALT-DELETE, problem je u tome sto je winlogon jedan od prvih procesa koji se pokrecu pri podizanju OS-a i pri tom on sa RegisterHotkey registrira CTRL-ALT-DELETE:

Code:

BOOL RegisterHotKey(          HWND hWnd,
    int id,   => pazi ovaj parametar
    UINT fsModifiers,
    UINT vk
);



Znaci ono sto ja trebam je kako saznati ID koji je winlogon koristio pri pozivanju tog apija jer mi on treba za ovo:

Code:

BOOL UnregisterHotKey(          HWND hWnd,
    int id   => ........
);




Znaci ono sto trebam napravit je slijedece:
1.)pribaviti debug privilegije za svoj proces sa OpenProcessToken->LookupPrivilegeValue->AdjustTokenPrivileges
2.)napisati DLL koji ce sadrzavat UnregisterHotKey(0, ID)
3.)sa CreateRemoteThread 'injectati' taj DLL u winlogon.exe i tako un-registrirati CTRL-ALT-DELETE

Nakon toga taj hotkey registriram u svom procesu i onda mogu dalje se zezat s tim...

Za onaj ID probao sam sa debugerom... postavio sam breakpoint na RegisterHotKey, ali program ne dodje do tamo jer je vec pokrenut pa se rusi, tj. ne moze se 2x pokrenut, znaci trebao bi previse petljat po kodu da bi on dosao do te fje pa da bi pogledao koji registar&vrijednost gura na stack prije pozivanja apija..



z
 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?11.11.2006. u 14:02 - pre 212 meseci
Nevjerovatno, ovaj ES nije ni za *urac... covjek mora cekat 35 dana da bi se neko udostojao odgovorit..
 
Odgovor na temu

Mitrović Srđan
bloodzero
Freelance
Majur //: Šabac

Član broj: 10261
Poruke: 2800
62.108.116.*

Sajt: freeshell-reviews.com


+4 Profil

icon Re: Winlogon i RegisterHotKey ID?11.11.2006. u 14:03 - pre 212 meseci
Nije to nego retko ko zna ;-)
Probaj naci sundance-a.

p.s
Imas na advocacy pravih win znalaca postavi temu temo.
Tony Melendez:
http://video.google.com/videoplay?docid=-
3819862628517136815&q=tony+melendez

NIKADA NE UZIMATI HOSTING NA GO DADDY!


 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?11.11.2006. u 21:48 - pre 212 meseci
Lol.. prije ce mi vrabac sa grane rec nego neko odavde!!! ;D


 
Odgovor na temu

fearless

Član broj: 74584
Poruke: 156
212.62.59.*

Sajt: www.phearless.org


Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 02:29 - pre 212 meseci
Ako si to znao zasto si uopste postavljao temu? Ljudi koji ovde iole nesto
znaju su vise *nix orijentisani. Steta sto Sundance-a ovde vise nema, jer
bi ti on i odgovorio na to. Savetujem isto sto i blood, kontaktiraj ga na mail.
Phearless - Serbian/Croatian Security Magazine: www.phearless.org
 
Odgovor na temu

Mitrović Srđan
bloodzero
Freelance
Majur //: Šabac

Član broj: 10261
Poruke: 2800
62.108.116.*

Sajt: freeshell-reviews.com


+4 Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 10:35 - pre 212 meseci
Tu je sunnis samo ga mozes nafatati na advocacy ;-)
Tony Melendez:
http://video.google.com/videoplay?docid=-
3819862628517136815&q=tony+melendez

NIKADA NE UZIMATI HOSTING NA GO DADDY!


 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 19:23 - pre 212 meseci
btw... zasto se ovaj cijelokupan forum zove elitesecurity a nema veze s vezom sto se tice security-a?
 
Odgovor na temu

Mitrović Srđan
bloodzero
Freelance
Majur //: Šabac

Član broj: 10261
Poruke: 2800
62.108.116.*

Sajt: freeshell-reviews.com


+4 Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 20:17 - pre 212 meseci
Zato sto je nekada davno bio security related. A onda
je security postao "lame" tj svako ko se zainteersovao za tu
temu automatski je dobijao etiketu "h4x0r wannabe" a
posto je mnoge bilo sramota da imaju ti etiketu onda su
se prebacili u razne nauke i poceli da mudruju. Gojku je
bilo mrsko da menja domen jel je vec postao poznat
kao [es] i eto to je ta mala pricica ;-)
Tony Melendez:
http://video.google.com/videoplay?docid=-
3819862628517136815&q=tony+melendez

NIKADA NE UZIMATI HOSTING NA GO DADDY!


 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 20:27 - pre 212 meseci
Passwd, ja sam injectovao kod u winlogon.exe koji unregistruje sve hotkeye pocevsi od 0x0000 do 0xFFFF i meni ne radi... Mozda negde gresim, ali trebao bi da (pored ostalih) unregistruje i CTRL+ALT+DEL ? :)
 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 21:05 - pre 212 meseci
Trebalo bi radit!

Nisam se sjetio "bruteforcea" ;D


Cccc, cimam se s tim ko budala .... nije mi opce pao napamet bruteforce :)
Hmm... dal je uopce potrebno injectovat kod?? .. mozda je dovoljno samo pod hwnd parametar navest handle od winlogona?

edit:
kako mislis ne radi?? sad cu ja probat pa ti javim kako je proslo...
 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?12.11.2006. u 22:06 - pre 212 meseci
Ovako.. napravio sam to sa injectovanjem i napravio sam da mi ispise rezultat svakog ID-a od $0 do $FFFF, i svaki je propao... moram da idem sad, sutra cu nastavit al mislim da je problem sto mi je prvi parametar [hwnd] u UnregisterHotKey 0, sto bi znacilo da taj proces nema prozor sto je istina....... hmmmm, a na msdnu pise da treba hwnd threda koji je registrirao taj hotkey a winlogon.exe ima oko 20 aktivnih thredova, u attachu imas kodove.. probaj nesto, ja cu sutra kad dodjem iz skole glupe!

z
Prikačeni fajlovi
 
Odgovor na temu

cynique
Ivan Štambuk
Zagreb@Croatia

Član broj: 93690
Poruke: 155
*.cc.fer.hr.

ICQ: 106979934
Sajt: istambuk.blogspot.com


Profil

icon Re: Winlogon i RegisterHotKey ID?13.11.2006. u 18:10 - pre 212 meseci
Ukratko - winlogon je pod odvojenim desktopom (točnije window stationom koji sadrži i desktop), pri čemu je desktop kolekcija prozora, clipboarda, menija etc. jamačno između ostaloga i registriranih hotkeys :) Dakle odvojeni kernel objekt (kojem pristupaš preko handle-a) a koji enkapsulira uobičajene interakcijske primitive GUI-a sa korisnikom. Kad opališ SAS ti efektivno switchaš na drugi window station(WinSta0) i to je razlog zašto ne možeš "preoteti" SAS. To je IIRC jedan od "orange book" zahtjeva.

winlogonov desktop se zove "Winlogon" i možeš mu pristupiti sa OpenDesktop() + SetThreadDesktop(), "WinSta0" (možeš mu puni object manager path potražiti sa winobj/winobjex u \Windows\WindowStations Ob direktoriju u slučaju da je promijenjen na Visti (dunno) ili sa nekim QFE), te pristupiti sa OpenWindowStation() + SetProcessWindowStation().

Mislim da imaš još detalja u Rusinovičevoj knjizi, a ne bi škodilo da proguglaš i za ovim terminima, sumnjam da se netko nije već prije sa tim igrao, jerbo ja trenutno nemam pristup literaturi i svojem stroju tako da...sretno :)
 
Odgovor na temu

fearless

Član broj: 74584
Poruke: 156
212.62.59.*

Sajt: www.phearless.org


Profil

icon Re: Winlogon i RegisterHotKey ID?13.11.2006. u 19:24 - pre 212 meseci
Nice to see you again ;)
Phearless - Serbian/Croatian Security Magazine: www.phearless.org
 
Odgovor na temu

de_c0der

Član broj: 127698
Poruke: 107
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?23.01.2007. u 19:25 - pre 209 meseci
Evo, napokon nasao vremena da rjesim ovaj problem koji sam zapoceo!
Hmmm... dosta sam googlao i na puno sam foruma zavrsio i uvijek je odgovor bio "To je nemoguce" mada ja ne mislim tako!

Code:

The SAS is secure because no application can intercept the 
Ctrl+Alt+Delete keystroke combination or prevent Winlogon from
 receiving it. Winlogon uses a documented Windows API, RegisterHotKey,
 to reserve the Ctrl+Alt+Delete key combination so that whenever the
 Windows input system sees the combination, [b]it sends a special message
 to a window that Winlogon creates to receive such notifications[/b]


Koji je to prozor koji Winlogon kreira?


Za one koji su se pitali zasto jednostavno ne pozvat SetWindowsHookEx fju:
Code:

A Windows function, SetWindowsHook, enables an application to 
install a hook procedure that's invoked every time a keystroke is
 pressed, even before hot keys are processed, and it allows the 
hook to squash keystrokes. [b]However, the Windows hot key processing 
code contains a special case for Ctrl+Alt+Delete that disables hooks
 so that the keystroke sequence can't be intercepted.[/b] In addition,
 if the interactive desktop is locked, only hot keys owned by Winlogon 
are processed.



Ok, i to nam je otpalo.. idemo dalje, ovo je jos zanimljivo:
Code:

Once the Winlogon desktop is created during initialization, it becomes 
the active desktop. When the Winlogon desktop is active, it is always
 locked. Winlogon unlocks its desktop only to switch to the application
 desktop or the screen-saver desktop. (Only the Winlogon process can
 lock or unlock a desktop.)



E sad, recimo da se korisnik vec ulogirao i da onda pozove CTRL-ALT-DEL, znaci prebacuje se na WinSta0->Winlogon desktop, mada ne moze se to samo tako ucinit, ipak netko mora primit taj ctrl-alt-del i mora se prebaciti na winlogon desktop (sa SwitchDesktop() ?) i zatim dalje winlogon sa GINA-om (MSGINA) radi dalje!!
Jedino rjesenje na koje sam do sad naisao je da se napise vlastita GINA sto je jako tesko (citaj nemoguce), i jos jedna ideja koja mi se ne svidja (pre lame je) da se hookuje prvo CTRL i ALT i da se smatra da je to CTRL-ALT-DELETE jer kad korinik to stisce nece sve od jednom stisnut.. vec ce prvo ocito stisnut ctrl, pa alt, pa delete!!
Pokusavat cu sad nesto izezat sa tim prebacivanjem dekstopa, vjerovatno se moze nesto napravit ;)


 
Odgovor na temu

de_c0der

Član broj: 127698
Poruke: 107
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?23.01.2007. u 19:43 - pre 209 meseci
Btw.

Code:

In Windows Vista, GINA has been entirely replaced by Credential Providers,
 which allows for significantly more flexibility in supporting multiple credential
 collection methods. GINA libraries will not work with Windows Vista.
 
Odgovor na temu

de_c0der

Član broj: 127698
Poruke: 107
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?23.01.2007. u 19:48 - pre 209 meseci
E sad ovako.. nije se lose sam sa sobom dopisivat na forumu, nisam vidio u pravilniku da je to zabranjeno!
Bacam se na veliko istrazivanje msgine i pisanje svoje vlastite, 'ebo mene konj ako ju ne napisem!!!

javim se kad budem napredovao s njom
z
 
Odgovor na temu

de_c0der

Član broj: 127698
Poruke: 107
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?28.01.2007. u 11:08 - pre 209 meseci
Evo, prvo veliki LOL jer pravljenje GINA-e nije nikakav problem, veoma je
jednostavno bilo da se nasa gina ponasa kao posrednik izmedji winlogona
i msgina.dll-a!

Evo ukratko par rijeci sta je bitno:
Nakon inicijalizacije korisnik jos uvijek nije logiran i stoga WinLogon poziva
WlxDispaySASNotice koji treba ispisat "Stisni CTRL-ALT-DEL"! Ok, nakon sto
se to ispise WinLogon ceka da korisnik to stisne ili pak da mu msgina posalje
WlxSASNotify poruku! Winlogon brise taj nas dialog na kojem je pisalo "stisni.."
i zatim salje WlxLoggedOutSAS!! Nakon sto nam winlogon pozove tu fju mi
trebamo napravit dialog sa par edita u kojima ce korisnik upisivat username,
password i domain! za vrijeme toga winlogon je u LOGGED_OUT stanju
(postoje jos 2 stanja, jedan je LOGGED_IN a drugi LOCKED) i zatim mi pozivamo
LsaLogonUser, evo kako izgleda:
Code:

NTSTATUS LsaLogonUser(
  HANDLE LsaHandle,
  PLSA_STRING OriginName,
  SECURITY_LOGON_TYPE LogonType,
  ULONG AuthenticationPackage, //vrsta paketa!!
  PVOID AuthenticationInformation, //username, password, domain u obliku odabranog paketa!!, recimo KERB_INTERACTIVE_LOGON
  ULONG AuthenticationInformationLength,
  PTOKEN_GROUPS LocalGroups,
  PTOKEN_SOURCE SourceContext,
  PVOID* ProfileBuffer,
  PULONG ProfileBufferLength,
  PLUID LogonId,
  PHANDLE Token,
  PQUOTA_LIMITS Quotas,
  PNTSTATUS SubStatus
);



Ok, ako je login uspjesan, tj. ako su podaci ispravni LsaLogonUser nam
vraca access token a u suprotnom vraca gresku! E sad, mi moramo vratit
WinLogonu taj access token (obican broj) i onda on poziva WlxActiveUserShell
i mi moramo sa CreateProcess/CreateProcessAsUser kreirat korisnicki shell
(obicno explorer.exe)! E sad tu je nesto jako vazno, naime osim sto mozemo
logirat sto je korisnik uspisao za username i password mi mozemo i prevarit
da su username i pwd ispravit jer prilikom vracanja access tokena winlogonu
on NE provjerava dal je tocan!!! I to je to, ja sam se zaebo jer kad sam bio
istrazivao o tome svi su srali da je nemoguce tesko napravit, ma joj.. idiotz,
a zapravo je veoma prosto da prostije ne moze bit!
I jos nesto, ne mozete pozivat fje tipa WinExec/ShellExecute prije nego se
user-shell ne inicijalizira, tako da cete logon dialog pravit sa CreateWindow
unutar DLL-a
Za vise info o GINI mozete nac u 2-dijelnom MSDN magazin tekstu:
http://msdn.microsoft.com/msdnmag/issues/05/05/SecurityBriefs/

Kao sto pise mora bit bulletproof=>otporan na metke/neprobojan
Code:

In short, if you replace GINA, be sure to put 
your best programmers on the job, and then you 
should carefully review their work.


Malo pretjeravaju s tim sranjima jer je jako prosto, ja sam sada za probu
ubacio jedan svoj digitron koji sam radio bez VCL-a pa sam ga odmah iskoristio
bzvz, cisto da se vidi kako se moze radit! Ovaj tjedan cu dovrsit sad sta sam
zapoceo a to je da kad se starta komp i kad WinLogon pozove WlxInitilaze
kreirat cu prozor i morat ce se na USB nakacit smart card reader sa karticom
na kojoj se nalazi fajl kex.txt a u njemu mora bit ispravan key da bi se komp
mogao startat
Jako zanimljivo i zabavno.. sve u svemu!

Evo kod ove moje probne gine za pocetak:
Code:

library Project1;



uses
  SysUtils,
  Classes, Windows, WinWlx, Messages;

type HANDLE=THandle;
     LONG=LongInt;
     LUID = record
                LowPart: DWORD;
                HighPart: LONG;
             end;
     PLuid = ^LUID;
     PWSTR = PWideChar;

WLX_MPR_NOTIFY_INFO = record
   pszUserName, pszDomain, pszPassword,
   pszOldPassword:PWSTR;
   end;

const REALGINA_PATH = 'MSGINA.DLL';
      GINASTUB_VERSION = WLX_VERSION_1_3;


var

  pfWlxNegotiate: TFNWlxNegotiate;
  pfWlxInitialize: TFNWlxInitialize;
  pfWlxDisplaySASNotice: TFNWlxDisplaySASNotice;
  pfWlxLoggedOutSAS: TFNWlxLoggedOutSAS;
  pfWlxActivateUserShell: TFNWlxActivateUserShell;
  pfWlxLoggedOnSAS: TFNWlxLoggedOnSAS;
  pfWlxDisplayLockedNotice: TFNWlxDisplayLockedNotice;
  pfWlxWkstaLockedSAS: TFNWlxWkstaLockedSAS;
  pfWlxIsLockOk: TFNWlxIsLockOk;
  pfWlxIsLogoffOk: TFNWlxIsLogoffOk;
  pfWlxLogoff: TFNWlxLogoff;
  pfWlxShutdown: TFNWlxShutdown;

  pfWlxStartApplication: TFNWlxStartApplication = nil;
  pfWlxScreenSaverNotify: TFNWlxScreenSaverNotify = nil;

    pfWlxNetworkProviderLoad: TFNWlxNetworkProviderLoad = nil;
  pfWlxDisplayStatusMessage: TFNWlxDisplayStatusMessage = nil;
  pfWlxGetStatusMessage: TFNWlxGetStatusMessage = nil;
  pfWlxRemoveStatusMessage: TFNWlxRemoveStatusMessage = nil;




function MyInitialize (hDll: HMODULE; dwWlxVersion: DWORD): Boolean;
begin
  Result := False;

  pfWlxInitialize :=
    GetProcAddress(hDll, 'WlxInitialize');
  pfWlxDisplaySASNotice :=
    GetProcAddress(hDll, 'WlxDisplaySASNotice');
  pfWlxLoggedOutSAS :=
    GetProcAddress(hDll, 'WlxLoggedOutSAS');
  pfWlxActivateUserShell :=
    GetProcAddress(hDll, 'WlxActivateUserShell');
  pfWlxLoggedOnSAS :=
    GetProcAddress(hDll, 'WlxLoggedOnSAS');
  pfWlxDisplayLockedNotice :=
    GetProcAddress(hDll, 'WlxDisplayLockedNotice');
  pfWlxIsLockOk :=
    GetProcAddress(hDll, 'WlxIsLockOk');
  pfWlxWkstaLockedSAS :=
    GetProcAddress(hDll, 'WlxWkstaLockedSAS');
  pfWlxIsLogoffOk :=
    GetProcAddress(hDll, 'WlxIsLogoffOk');
  pfWlxLogoff :=
    GetProcAddress(hDll, 'WlxLogoff');
  pfWlxShutdown :=
    GetProcAddress(hDll, 'WlxShutdown');

  if Assigned(pfWlxInitialize) and
    Assigned(pfWlxDisplaySASNotice) and
    Assigned(pfWlxLoggedOutSAS) and
    Assigned(pfWlxActivateUserShell) and
    Assigned(pfWlxLoggedOnSAS) and
    Assigned(pfWlxDisplayLockedNotice) and
    Assigned(pfWlxIsLockOk) and
    Assigned(pfWlxWkstaLockedSAS) and
    Assigned(pfWlxIsLogoffOk) and
    Assigned(pfWlxLogoff) and
    Assigned(pfWlxShutdown) then
  begin

    Result := True;

    

    if (dwWlxVersion >= WLX_VERSION_1_1) then
    begin
      pfWlxStartApplication := GetProcAddress(hDll, 'WlxStartApplication');
      pfWlxScreenSaverNotify := GetProcAddress(hDll, 'WlxScreenSaverNotify');

      Result := Assigned(pfWlxStartApplication) and
        Assigned(pfWlxScreenSaverNotify);
    end;



    if Result and (dwWlxVersion >= WLX_VERSION_1_3) then
    begin
      pfWlxNetworkProviderLoad :=
        GetProcAddress(hDll, 'WlxNetworkProviderLoad');
      pfWlxDisplayStatusMessage :=
        GetProcAddress(hDll, 'WlxDisplayStatusMessage');
      pfWlxGetStatusMessage :=
        GetProcAddress(hDll, 'WlxGetStatusMessage');
      pfWlxRemoveStatusMessage :=
        GetProcAddress(hDll, 'WlxRemoveStatusMessage');

      Result := Assigned(pfWlxNetworkProviderLoad) and
        Assigned(pfWlxDisplayStatusMessage) and
        Assigned(pfWlxGetStatusMessage) and
        Assigned(pfWlxRemoveStatusMessage);
    end;

    

  end;
end;



//Definicija mojih fja


//kreirisamo prozor :D
var MojProzor:TWNDCLASSEX;
    Wnd:HWND;
    Msg:TMsg;

    text1:string; //text prvog edit-a
    text2:string; //text drugog edit-a
    rez:integer;

    Stxt1:HWND;
    Stxt2:HWND;

    Edt1:HWND;
    Edt2:HWND;

    Btn1:HWND;  // *
    Btn2:HWND;  // /
    Btn3:HWND;  // +
    Btn4:HWND;  // -

    AboutBtn:HWND;


function WndProc(Wnd:HWND;
                Msg:UINT;
                wparam:WPARAM;
                lparam:LPARAM):LRESULT; stdcall;
begin
 case Msg of
  WM_DESTROY:begin
              PostQuitMessage(0);
              Result:=0;
             end;
    WM_COMMAND:begin
    if lparam = Btn1 then
                         begin

                         SetLength(text1,100);
                         GetWindowText(
                                  Edt1,
                                  Pchar(text1),
                                  100);

                         SetLength(text2,100);
                         GetWindowText(
                                  Edt2,
                                  Pchar(text2),
                                  100);


                          rez:=StrToInt(text1)*StrToInt(text2);
                          MessageBox(0,PChar(IntToStr(rez)),'Rezultat mnozenja:',0);   
                         end;

        if lparam = Btn2 then
                         begin

                         SetLength(text1,100);
                         GetWindowText(
                                  Edt1,
                                  Pchar(text1),
                                  100);

                         SetLength(text2,100);
                         GetWindowText(
                                  Edt2,
                                  Pchar(text2),
                                  100);


                          rez:=StrToInt(text1) div StrToInt(text2);
                          MessageBox(0,PChar(IntToStr(rez)),'Rezultat dijeljenja:',0);
                         end;

    if lparam = Btn3 then
                         begin

                         SetLength(text1,100);
                         GetWindowText(
                                  Edt1,
                                  Pchar(text1),
                                  100);

                         SetLength(text2,100);
                         GetWindowText(
                                  Edt2,
                                  Pchar(text2),
                                  100);


                          rez:=StrToInt(text1)+StrToInt(text2);
                          MessageBox(0,PChar(IntToStr(rez)),'Rezultat zbrajanja:',0);
                         end;


     if lparam = Btn4 then
                         begin

                         SetLength(text1,100);
                         GetWindowText(
                                  Edt1,
                                  Pchar(text1),
                                  100);

                         SetLength(text2,100);
                         GetWindowText(
                                  Edt2,
                                  Pchar(text2),
                                  100);


                          rez:=StrToInt(text1)-StrToInt(text2);
                          MessageBox(0,PChar(IntToStr(rez)),'Rezultat oduzimanja:',0);
                         end;


     if lparam=AboutBtn then MessageBox(0,'Made by Passwd witohut VCL!! :)','About..',0);


               end;
  else Result:=DefWindowProc(Wnd,Msg,wparam,lparam);
 end;
end;



//
procedure KreirajMe;
begin
MojProzor.cbSize:=SizeOf(MojProzor);
MojProzor.style:=CS_HREDRAW or CS_VREDRAW;
MojProzor.lpfnWndProc:=@WndProc;
MojProzor.cbClsExtra:=0;
MojProzor.hInstance:=HINSTANCE;
MojProzor.hIcon:=LoadIcon(0,IDI_APPLICATION);
MojProzor.hCursor:=LoadCursor(0,IDC_ARROW);
MojProzor.hbrBackground:=COLOR_BTNFACE +1;
MojProzor.lpszMenuName:=nil;
MojProzor.lpszClassName:='Prozor';
MojProzor.hIconSm:=0;

RegisterClassEx(MojProzor);

Wnd:=CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, //dwExStyle
               'Prozor',   //lpClassName
               'Digitron',  //lpWindowName
               WS_OVERLAPPEDWINDOW,      //window style
               100,    //pozicija gornjeg lijevog kuta
               100,    //pozicija gornjeg desnog kuta
               265,    //sirina sirina
               200,    //visina prozora
               0, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru

ShowWindow(Wnd,SW_SHOW);
UpdateWindow(Wnd);


Stxt1:=CreateWindowEx(0,//dwExStyle
               'STATIC',    //lpClassName
               'Prvi broj:',  //lpWindowName
               WS_CHILD,      //window style
               10,    //lijevo-desno
               10,    //gore-dolje
               70,    //sirina sirina
               15,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru


ShowWindow(Stxt1,SW_SHOW);
UpdateWindow(Stxt1);

Stxt2:=CreateWindowEx(0,//dwExStyle
               'STATIC',    //lpClassName
               'Drugi broj:',  //lpWindowName
               WS_CHILD,      //window style
               10,    //lijevo-desno
               35,    //gore-dolje
               70,    //sirina sirina
               15,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru


ShowWindow(Stxt2,SW_SHOW);
UpdateWindow(Stxt2);



Edt1:=CreateWindowEx(0,//dwExStyle
               'EDIT',    //lpClassName
               '0',  //lpWindowName
               WS_CHILD,      //window style
               90,    //lijevo-desno
               10,    //gore-dolje
               100,    //sirina sirina
               20,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru


ShowWindow(Edt1,SW_SHOW);
UpdateWindow(Edt1);


Edt2:=CreateWindowEx(0,//dwExStyle
               'EDIT',    //lpClassName
               '0',  //lpWindowName
               WS_CHILD,      //window style
               90,    //lijevo-desno
               35,    //gore-dolje
               100,    //sirina sirina
               20,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru


ShowWindow(Edt2,SW_SHOW);
UpdateWindow(Edt2);


Btn1:=CreateWindowEx(0, //dwExStyle
               'BUTTON',    //lpClassName
               '*',  //lpWindowName
               WS_CHILD,      //window style
               10,    //lijevo desno
               70,    //gore-dolje
               50,    //sirina sirina
               50,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru

ShowWindow(Btn1,SW_SHOW);
UpdateWindow(Btn1);

Btn2:=CreateWindowEx(0, //dwExStyle
               'BUTTON',    //lpClassName
               '/',  //lpWindowName
               WS_CHILD,      //window style
               70,    //lijevo desno
               70,    //gore-dolje
               50,    //sirina sirina
               50,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru

ShowWindow(Btn2,SW_SHOW);
UpdateWindow(Btn2);

Btn3:=CreateWindowEx(0, //dwExStyle
               'BUTTON',    //lpClassName
               '+',  //lpWindowName
               WS_CHILD,      //window style
               130,    //lijevo desno
               70,    //gore-dolje
               50,    //sirina sirina
               50,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru

ShowWindow(Btn3,SW_SHOW);
UpdateWindow(Btn3);

Btn4:=CreateWindowEx(0, //dwExStyle
               'BUTTON',    //lpClassName
               '-',  //lpWindowName
               WS_CHILD,      //window style
               190,    //lijevo desno
               70,    //gore-dolje
               50,    //sirina sirina
               50,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru

ShowWindow(Btn4,SW_SHOW);
UpdateWindow(Btn4);

AboutBtn:=CreateWindowEx(0, //dwExStyle
               'BUTTON',    //lpClassName
               'About',  //lpWindowName
               WS_CHILD,      //window style
               80,    //lijevo desno
               125,    //gore-dolje
               80,    //sirina sirina
               30,    //visina prozora
               Wnd, //prozor u koji cemo postavit nas prozor (hWndParent)
               0, //meni prozora
               HInstance,  //stalni parametar
               nil); //parametar koji se proslijedjuje prozoru

ShowWindow(AboutBtn,SW_SHOW);
UpdateWindow(AboutBtn);



while GetMessage(Msg, 0, 0, 0) do
  begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
  end;

  
UnregisterClass('Prozor',HInstance);
end;




function WlxNegotiate(dwWinlogonVersion: DWORD; out pdwDllVersion: DWORD): BOOL; stdcall;
var hDll: HMODULE;
    dwWlxVersion: DWORD;
begin
MessageBox(0,'Pokrecem ... blabla','da',0);
KreirajMe;
  Result := False;
  dwWlxVersion := GINASTUB_VERSION;
  { Load MSGINA.DLL. }

  hDll := LoadLibrary(REALGINA_PATH);
  if hDll <> 0 then
  begin
    { Get pointers to WlxNegotiate function in the real MSGINA. }
    pfWlxNegotiate := GetProcAddress(hDll, 'WlxNegotiate');
    if Assigned(pfWlxNegotiate) then
    begin
      
      if (dwWinlogonVersion < dwWlxVersion) then
      begin
        dwWlxVersion := dwWinlogonVersion;
      end;
   

      if pfWlxNegotiate(dwWlxVersion, @dwWlxVersion) then
      begin

       
        if MyInitialize(hDll, dwWlxVersion) then
        begin

            pdwDllVersion := dwWlxVersion;

          Result := True;
        end;
      end;
    end;
  end;
end;




function WlxInitialize(lpWinsta: LPWSTR; hWlx: HANDLE; pvReserved: pointer; pWinlogonFunctions: pointer; out WlxContext: pointer): BOOL; stdcall;
begin
MessageBox(0,'Jupi;)','Pozdrav',0);
KreirajMe;
Result:=pfWlxInitialize(lpWinsta,hWlx,pvReserved,pWinlogonFunctions,WlxContext);
end;

procedure WlxDisplaySASNotice(pWlxContext: pointer);  stdcall;
begin
pfWlxDisplaySASNotice(pWlxContext);
end;

function WlxLoggedOutSAS(pWlxContext: Pointer; dwSasType: DWORD;
  pAuthenticationId: PLargeInteger; pLogonSid: PSID; pdwOptions: PDWORD;
  phToken: PHandle; pMprNotifyInfo: PWlxMprNotifyInfo; out pProfile: Pointer
  ): Integer; stdcall;
begin
Result:=pfWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
end;

function WlxActivateUserShell(pWlxContext: pointer; pszDesktopName: PWideChar; pszMprLogonScript: PWideChar; pEnvironment: pointer): BOOL; stdcall;
begin
Result:=pfWlxActivateUserShell(pWlxContext,pszDesktopName,pszMprLogonScript,pEnvironment);
end;

function WlxLoggedOnSAS(pWlxContext: pointer; dwSasType: DWORD; pReserved: pointer): integer; stdcall;
begin
Result:=pfWlxLoggedOnSAS(pWlxContext,dwSasType,pReserved);
end;

procedure WlxDisplayLockedNotice(pWlxContext: pointer); stdcall;
begin
pfWlxDisplayLockedNotice(pWlxContext);
end;

function WlxWkstaLockedSAS(pWlxContext: pointer; dwSasType: DWORD): integer; stdcall;
begin
Result:=pfWlxWkstaLockedSAS(pWlxContext,dwSasType);
end;

function WlxIsLockOk(pWlxContext: pointer): BOOL;  stdcall;
begin
Result:=pfWlxIsLockOk(pWlxContext);
end;

function WlxIsLogoffOk(pWlxContext: pointer): BOOL;  stdcall;
begin
Result:=pfWlxIsLogoffOk(pWlxContext);
end;

procedure WlxLogoff(pWlxContext: pointer); stdcall;
begin
pfWlxLogoff(pWlxContext);
end;

procedure WlxShutdown(pWlxContext: pointer; ShutdownType: DWORD); stdcall;
begin
pfWlxShutdown(pWlxContext,ShutdownType);
end;

function WlxScreenSaverNotify(pWlxContext: pointer; var pSecure: BOOL): BOOL;  stdcall;
begin
Result:=pfWlxScreenSaverNotify(pWlxContext,pSecure);
end;

function WlxStartApplication(pWlxContext: pointer; pszDesktopName: PWideChar; pEnvironment: pointer; pszCmdLine: PWideChar): BOOL;  stdcall;
begin
Result:=pfWlxStartApplication(pWlxContext,pszDesktopName,pEnvironment,pszCmdLine);
end;

function WlxNetworkProviderLoad(pWlxContext: Pointer;
  pNprNotifyInfo: PWlxMprNotifyInfo): BOOL; stdcall;
begin
  Result := pfWlxNetworkProviderLoad(pWlxContext, pNprNotifyInfo);
end;

function WlxDisplayStatusMessage(pWlxContext: pointer; hDesktop: HDESK; dwOptions: DWORD; pTitle: PWideChar; pMessage: PWideChar): BOOL; stdcall;
begin
Result:=pfWlxDisplayStatusMessage(pWlxContext,hDesktop,dwOptions,pTitle,pMessage);
end;

function WlxGetStatusMessage(pWlxContext: pointer; var pdwOptions: DWORD; pMessage: PWideChar; dwBufferSize: DWORD): BOOL; stdcall;
begin
Result:=pfWlxGetStatusMessage(pWlxContext,pdwOptions,pMessage,dwBufferSize);
end;

function WlxRemoveStatusMessage(pWlxContext: pointer): BOOL;stdcall;
begin
Result:=pfWlxRemoveStatusMessage(pWlxContext);
end;



exports
WlxNegotiate,
WlxInitialize,
WlxDisplaySASNotice,
WlxLoggedOutSAS,
WlxActivateUserShell,
WlxLoggedOnSAS,
WlxDisplayLockedNotice,
WlxWkstaLockedSAS,
WlxIsLockOk,
WlxIsLogoffOk,
WlxLogoff,
WlxShutdown,
WlxScreenSaverNotify,
WlxStartApplication,
WlxNetworkProviderLoad,
WlxDisplayStatusMessage,
WlxGetStatusMessage,
WlxRemoveStatusMessage;


begin
end.




Jos jednom.. jako prosto i zabavno!!

poz do iduce gine (sa SC readerom)

[Ovu poruku je menjao de_c0der dana 28.01.2007. u 14:12 GMT+1]
 
Odgovor na temu

de_c0der

Član broj: 127698
Poruke: 107
*.adsl.net.t-com.hr.



Profil

icon Re: Winlogon i RegisterHotKey ID?28.01.2007. u 11:16 - pre 209 meseci
Evo u attachu iskompajliran DLL u slucaju da nekog zanima i da nema delphi!!
Uglavnom dodjete ovdje:
Code:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

i kreirate key GinaDLL koji ce sadrzavat putanju do GINA DLL-a
A u onom MS primjeru imate KIOSKGINA primjer (nakucan u unmanaged C++) i spominje FULLGINA-u koji podrzava 1.4 verziju sa Remote Desktopom!

Tolko od mene za sad!
z
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Security Coding :: Winlogon i RegisterHotKey ID?

[ Pregleda: 4388 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.