Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde
Avatar
Krystof Matejka:30. května 8:43

Ahoj,
snažím se vytvořit takový jednoduchý login hack, který z určitého listu zkusí dosadit všechny možnosti do hesla na internetové stránce. Pro bližší představu: Když se chci přihlásit do googlu, tak tam se vyplňuje email, ten tam potřebuju dosadit (ten je ale konstantní) a heslo, které se po každém pokusu změní.

Zkusil jsem: Vytvořil jsem program, který pomocí eventů dokáže psát do kolonek, ale nedokáže si je nakliknout

            int iHandle = NativeWin32.FindWindow(null, ListBox.Text);

            NativeWin32.SetForegroundWindow(iHandle);
            SendKeys.Send("hi");
class NativeWin32
    {
        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_CLOSE = 0xF060;

        [DllImport("user32.dll")]
        public static extern int FindWindow(
            string lpClassName, // class name
            string lpWindowName // window name
        );

        [DllImport("user32.dll")]
        public static extern int SendMessage(
            int hWnd, // handle to destination window
            uint Msg, // message
            int wParam, // first message parameter
            int lParam // second message parameter
        );

        [DllImport("user32.dll")]
        public static extern int SetForegroundWindow(
            int hWnd // handle to window
            );

        private const int GWL_EXSTYLE = (-20);
        private const int WS_EX_TOOLWINDOW = 0x80;
        private const int WS_EX_APPWINDOW = 0x40000;

        public const int GW_HWNDFIRST = 0;
        public const int GW_HWNDLAST = 1;
        public const int GW_HWNDNEXT = 2;
        public const int GW_HWNDPREV = 3;
        public const int GW_OWNER = 4;
        public const int GW_CHILD = 5;

        public delegate int EnumWindowsProcDelegate(int hWnd, int lParam);

        [DllImport("user32")]
        public static extern int EnumWindows(EnumWindowsProcDelegate lpEnumFunc, int lParam);

        [DllImport("User32.Dll")]
        public static extern void GetWindowText(int h, StringBuilder s, int nMaxCount);

        [DllImport("user32", EntryPoint = "GetWindowLongA")]
        public static extern int GetWindowLongPtr(int hwnd, int nIndex);

        [DllImport("user32")]
        public static extern int GetParent(int hwnd);

        [DllImport("user32")]
        public static extern int GetWindow(int hwnd, int wCmd);

        [DllImport("user32")]
        public static extern int IsWindowVisible(int hwnd);

        [DllImport("user32")]
        public static extern int GetDesktopWindow();
    }

Celou tu třídu jsem zkopíroval z internetu a moc jí nerozumím

Chci docílit: Snažím se vytvořit kód, který naklikne, napíše a pokud bude přihlášení úspěšné (což také nevím jak udělat) tak si zapamatuje heslo. Tento původní plán má však spoustu chyb, mimo jiné i to, že pokud se stránka načítá program jede "naprázdno" a heslo může být mezi vynechanými. Když jsem to pořádně hledal, něked jsem našel, že www stránka komunikuje s webovým prohlížečem pomocí příkazů/souborů, nevím jak tomu říkat, a tak mě napadlo, jestli by nešlo přeskočit bod, kdy předávám informace webovýmu prohlížeči, ale rovnou bych je posílal. (viz obrázek)
Doufám že jsem to napsal správně, kdyžtak klidně otázku upravím a že to nejsou úplný blbosti, v programování jsem nový a moc to pořádně nechápu, hlavně ty eventy jak tam jsou ty flagy a delegát...
Děkuju všem za pomoc a kdybyste náhodou věděli o nějakých dalších dobrých stránkách tak mi klidně napište

 
Odpovědět 30. května 8:43
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Krystof Matejka
Petr Čech:30. května 9:51

Budu upřímný, pokud začínáš, tohle není moc dobrá úloha.
Pokud budeš chtít použít prohlížeč, je to takové vyšší dívčí - to dělají ty public static extern funkce - ty komunikují přímo s operačním systémem. Vzhledem k tomu, že tohle to je jedna z nejkomplikova­nějších věcí, o které se v C# můžeš pokoušet (a ještě mnohem horší, pokud neumíš C), tohle bych zavrhl.

někde jsem našel, že www stránka komunikuje s webovým prohlížečem pomocí příkazů/souborů, nevím jak tomu říkat, a tak mě napadlo, jestli by nešlo přeskočit bod, kdy předávám informace webovýmu prohlížeči, ale rovnou bych je posílal. (viz obrázek)

Skutečně to tak je, počítač se serverem komunikuje přes HTTP protokol, což je pořád jen nějaký speciálně formátovaný text. C# má toto naimplementované ve třídě HttpClient . A dá se celkem dobře použít.
Jenže... abys mohl doufat, že to uděláš správně, musíš poměrně dost přesně vědět, jak weby fungují (ne, můj komentář nestačí :D ) - to znamená vědět, co jsou třeba cookies, session, POST, GET atd. To je ale něco, co si skutečně osaháš zkušenostmi s tvorbou webů.

A poslední z problémů je samotná časová náročnost tohoto způsobu nabourání se. Předpokládejme úplně nejjednodušší heslo - 8 znaků složené jen ze znaků anglické abecedy - to je 208827064576 kombinací. Pro všechny tyto kombinace se musí poslat požadavek serveru, ten to nějakou dobu zpracuje a pošle hodně dat zpět.
Stačí si spočítat, jak dlouho by to trvalo...
Jenže tohle je úplně ten nejhloupější způsob, jak něco hacknout, a všichni s tím počítají, takže tě snad každý server po čase vyhodí a třeba i zablokuje IP adresu, protože to je jako kdybys dělal DOS útok.

TL;DR pokud jsi začátečník, vzdej to a vymysli si jednodušší úlohu.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +4 30. května 9:51
the cake is a lie
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Krystof Matejka
Petr Čech:30. května 9:55

A ještě další poznámka - pokud nevíš, co jsou delegáti, události a flagy, je dobré si o tom něco přečíst. Tady jsou k tomu články:
https://www.itnetwork.cz/…y-enum-flagy
https://www.itnetwork.cz/…ambda-vyrazy
jsou placené, ale mohu je vřele doporučit, pokud nenajdeš nic lepšího.
Každopádně minimálně flagy jsou velice užitečné a měl bys je určitě znát, delegáti a události jsou třeba spíš u okenních aplikací (ale i u konzole si najdou uplatnění).

Nahoru Odpovědět 30. května 9:55
the cake is a lie
Avatar
Fenrix
Člen
Avatar
Odpovídá na Petr Čech
Fenrix:30. května 10:23

Časovou náročnost bych neřešil, píše, že chce použít nějakej list. Takže očekávám, že si prostě stáhl list pár set tisíc nejpoužívanějších hesel (ono to většinou bohatě stačí, pokud jde o hesla běžných uživatelů) a ty natvrdo vyzkouší, takže ta doba na vykonání bude v řádu sekund :)

 
Nahoru Odpovědět 30. května 10:23
Avatar
Ondrej Vlach
Člen
Avatar
Odpovídá na Fenrix
Ondrej Vlach:30. května 10:52

Pár set tisíc hesel a pár sekund? Když vezmete že Vám stránka odpoví za 500ms což bych řekl že patří k těm lepším, tak vám 100 000 hesel zabere cca. 13 hodin. Což je čistě teoretické, protože fail2ban či jiná adekvátní technologie vás zablokuje tak do 15minut při takovém počtu requestů. Nehledě na to, většina webů vám začne zobrazovat nějakou implementaci captchi po x neúspěšných přihlášeních.

 
Nahoru Odpovědět  +1 30. května 10:52
Avatar
Odpovídá na Ondrej Vlach
Vladislav Ladicky:30. května 11:18

Paradoxne by login stránka s pomalou odozvou patrila k tým lepším. Je to zámer, že z poslaného hesla vyrátavaš hash náročne a pomaly, práve z dôvodu aby nešlo programovo skúšať 200 hesiel za sekundu, či podobne. A podľa mňa normálna stránka s odozvou 500ms už by patrila k tým horším. Na webe je dnes útok na heslo hrubou silou čistý nezmysel, to dnes funguje len pri vyložene amatérskych weboch nejakých jednotlivcov ktorý toho ešte moc nevedia. A taky web ani nestojí za útok.

 
Nahoru Odpovědět  +1 30. května 11:18
Avatar
Krystof Matejka:30. května 14:36

Dobře, děkuju za radu, zkusím začít s něčím jednoduším.

 
Nahoru Odpovědět 30. května 14:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.