Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Krystof Matejka:30.5.2018 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.5.2018 8:43
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Krystof Matejka
Petr Čech:30.5.2018 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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.5.2018 9:51
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Krystof Matejka
Petr Čech:30.5.2018 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.5.2018 9:55
the cake is a lie
Avatar
Fenrix
Člen
Avatar
Odpovídá na Petr Čech
Fenrix:30.5.2018 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.5.2018 10:23
Avatar
Ondrej Vlach
Člen
Avatar
Odpovídá na Fenrix
Ondrej Vlach:30.5.2018 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
30.5.2018 10:52
Avatar

Člen
Avatar
Odpovídá na Ondrej Vlach
:30.5.2018 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
30.5.2018 11:18
Avatar
Krystof Matejka:30.5.2018 14:36

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

 
Nahoru Odpovědět
30.5.2018 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.