Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Skrypt, który wygeneruje losowe znaki, doda je do URL i sprawdzi, co zwróci strona


Rekomendowane odpowiedzi

Opublikowano

Cześć. Na pewnej stronie WWW są poukrywane katalogi. Katalog macierzysty / zwraca pustą stronę. Dodanie po ukośniku czegokolwiek zwraca wtedy domyślny błąd 404

 

22102214411626024011.png

 

Dlatego stworzyłem ten temat. Potrzebuję skryptu, który wygeneruje losowe znaki (najlepiej, by one się nie powtórzyły), doda ja do adresu WWW i sprawdzi, co ta strona zwróci. Jeśli to, co jest powyżej na zdjęciu - wtedy skrypt wykona się jeszcze raz (While 1). Jeśli zwróci cokolwiek innego, wtedy poinformuje mnie o tym np. MsgBox'em, w którym będzie adres odkrytej strony.

 

Próbowałem samemu coś skleić poprzez generator znaków z internetu oraz InetGet + FileRead. Nie wiem dlaczego, ale nie działa InetGet, ponieważ nic nie chce pobrać. Ostatecznie zostawiłem sam generator i dodałem funkcję, która wrzuci stronkę do schowka.

While 1

$Adres = "http://jakisadresswww.pl/"

$pwd = ""
Dim $aSpace[3]
$digits = 4
For $i = 1 To $digits
    $aSpace[0] = Chr(Random(65, 90, 1)) ;A-Z
    $aSpace[1] = Chr(Random(97, 122, 1)) ;a-z
    $aSpace[2] = Chr(Random(48, 57, 1)) ;0-9
    $pwd &= $aSpace[Random(0, 2, 1)]
Next

ClipPut($Adres & $pwd)

WEnd

I po prostu Ctrl + V do adresu. Gdyby ich było kilka to jeszcze ujdzie. Tak naprawdę nie wiadomo, ile ta strona ma katalogów. Dlatego potrzebuję czegoś automatycznego bez InetGet, który nie chce działać (możliwe, że zapomniałem o ukośniku).

Opublikowano

Po co InetGet() jak wystarczy InetRead()?

$response = InetRead('http://www.mpcforum.pl/')
MsgBox(0, '', BinaryToString($response))

PS

Taki brutal force będzie strasznie długo trwał jeśli adresy są długie, nie wiem czy jesteś tego świadomy:

 

C = n!/(k!*(n-k)!)

gdzie:

C - kombinacje

n - możliwe znaki

k - długość łańcucha

 

Tyle mniej więcej może to trwać (wielkie i małe litery, cyfry oraz znaki "-", "."):

 

 

 

brutal_force.jpg

 

 

 

Może wystarczy wpisać w google (o ile podstrony są skatalogowane):

site:nazwastrony.xyz

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

 

Po co InetGet() jak wystarczy InetRead()?

$response = InetRead('http://www.mpcforum.pl/')
MsgBox(0, '', BinaryToString($response))

PS

Taki brutal force będzie strasznie długo trwał jeśli adresy są długie, nie wiem czy jesteś tego świadomy:

 

C = n!/(k!*(n-k)!)

gdzie:

C - kombinacje

n - możliwe znaki

k - długość łańcucha

 

Wariant optymistyczny (same litery):

 

 

kombinacje1.png

 

 

 

Wariant pesymistyczny (litery, cyfry i znaki - . )

 

 

kombinacje2.png

 

 

 

Może wystarczy wpisać w google (o ile podstrony są skatalogowane):

site:nazwastrony.xyz

 

Jestem świadomy, jednak z tego co widzę to foldery liczą po tylko 4 znaki. Potwierdziło się to już 2 razy - pierwszy, gdy wstukałem jakieś znaki, a drugi - poprzez użycie google i site:. Na nazwę folderu składają się litery i cyfry.

 

Potrzebuję tylko odpowiedniego skryptu:

 - wygeneruje znaki, zaczynając od 1 literowych, a kończąc na 4 literowych (wygeneruje litery i cyfry, litery mogą być duże i małe). najlepiej w ten sposób: a, A, b, B... aa, Aa, aA, AA, ab, aB itd.

 - powiadomi mnie, gdy zostanie odkryty nowy katalog

 - nie będzie powtarzać wygenerowanego wcześniej ciągu

 - zapisze ostatnią próbę (komputer zazwyczaj chodzi 24/7, jednak przyda się opcja by zapamiętał co ostatnio sprawdzał)

 

Przy pomocy InetRead skleiłem coś takiego:

$strona = "http://jakasstronkaadd.pl/"

While 1

$pwd = ""
Dim $aSpace[3]
$digits = 4
For $i = 1 To $digits
    $aSpace[0] = Chr(Random(65, 90, 1)) ;A-Z
    $aSpace[1] = Chr(Random(97, 122, 1)) ;a-z
    $aSpace[2] = Chr(Random(48, 57, 1)) ;0-9
    $pwd &= $aSpace[Random(0, 2, 1)]
Next

$czytaj_strone = InetRead($strona & $pwd)
$przetw_strone = BinaryToString($czytaj_strone)

If $przetw_strone = "" Then ; Jeśli zwróci pustą (np. błąd 404) to...
	ConsoleWrite("Sprawdziłem ciąg " & $pwd & ". Nie ma takiego katalogu :d" & @CRLF)
		Else
	MsgBox(0, "Info", "Odnalazłem nowy katalog: " & $pwd)
	ConsoleWrite ("Odnalazłem nowy katalog: " & $pwd & @CRLF)
EndIf

WEnd

Skrypt działać działa, jednak może on powtórzyć wygenerowany wcześniej ciąg, nie robi tego pokolei oraz tym samym nie można zapisać ostatniej próby. Dodatkowo mogę ustawić, by wygenerował ciąg o określonej ilości znaków, a nie jak planowałem - by leciał sobie od jednoznakowych, aż do 4 znakowych. Z tym sobie już nie poradzę i tym samym potrzebuję pomocy

Opublikowano

Jak chcesz przeszukać metodycznie, po kolei to nie używaj random tylko przeleć po wybranych znakach w pętli.

 

 

W tym dziale pomagamy, nie robimy za kogoś - jak chcesz to zlecić to pisz w dziale zleceń lub do mnie na pw ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Jak chcesz przeszukać metodycznie, po kolei to nie używaj random tylko przeleć po wybranych znakach w pętli.

 

 

W tym dziale pomagamy, nie robimy za kogoś - jak chcesz to zlecić to pisz w dziale zleceń lub do mnie na pw ;)

 

Potrzebuję pomocy nie gotowca. Poprawiony skrypt (ten z mojego poprzedniego postu) włączyłem na ostatnią noc + do teraz i sprawdził w sumie 215712 kombinacji. Nie wszystkie sprawdził i do tego część już wcześniej wygenerowanych powtórzył.

 

Potrzebuję tylko pomocy do stworzenia funkcji, która będzie generować znaki zaczynając od a, A, b, B... aa, aA, Aa, bb itd. Nie będzie ich powtarzać oraz zapisze ostatnio wykonaną, by po restarcie komputera wiedział, co ostatnio sprawdził. Nie mam żadnego pomysłu, jak zaplanować budowę i działanie tej funkcji. Random nie przyda się, gdyż generuje dowolne coś. A może tu będzie dobry słownik? Random będzie generować różne stringi, a inna funkcja zapisze je do pliku i będzie sprawdzać, czy już gdzieś nie została powtórzona. I jak nie będzie więcej kombinacji to wyskoczy np. MsgBox(0, "Info", "4 literowy słownik już pełny"). Dodatkowo przerobić wtedy główny skrypt, który przy generowaniu stringa będzie pokolei lecieć z tego, co jest w tym pliku. Przy znanej ilości różnych kombinacji + czas wykonania jednego można w prosty sposób wyliczyć, ile zajmie całość ;) Pomysł jakiś już jest, tylko trzeba to przenieść na skrypt. Jakaś pętla, filereadline, fileopen, filewrite i może coś by z tego wyszło

Opublikowano

Powtarzam jeszcze raz - nie ma sensu robić  tym przypadku funkcji generującej znaki randomowo, gdyż i tak wszystko sprowadza się do sprawdzenia każdej możliwej kombinacji. Zapisywanie już wykorzystanych wyrazów i sprawdzanie czy nie zostały użyte to też zły pomysł - ciągłę przeszukiwanie coraz dłuższego pliku to marnowanie czasu i zasobów. O wiele lepiej po prostu do takich powtórzeń nie dopuścić.

 

Zrób sobie po prostu tablicę ze znakami (pseudokod):

znaki = ['a', 'A', ...]

Dla 4-znakowego stringa zrób zagnieżdżoną pętlę (pseudokod):

// załadowanie ustawień początkowych
startI = odczytajPolozenieStartowe(i)
startJ = odczytajPolozenieStartowe(j)
startK = odczytajPolozenieStartowe(k)
startL = odczytajPolozenieStartowe(l)

// główna pętla dla 4-znakowego stringa
// do sprawdzania krótszych i dłuższych stringów stwórz analogiczne pętle
for(i=startI; i<dlugosc(znaki); i++)
{
    for(j=startJ; j<dlugosc(znaki); j++)
    {
        for(k=startK; k<dlugosc(znaki); k++)
        {
            for(l=startL; l<dlugosc(znaki); l++)
            {
                wzorzec = znaki[i]+znaki[j]+znaki[k]+znaki[l]
                wynik = sprawdz(wzorzec)
                if(wynik == true)
                    zapiszWzorzecDoPliku(wzorzec)
                nadpiszBiezacePolozonie(i, j, k, l)
            } 
        } 
    } 
}

// funkcja sprawdza czy strona z końcówką określoną w parametrze 'wzorzec' istnieje
// jeśli tak to zwraca true, jeśli nie to zwraca false
function sprawdz(wzorzec)
{
    ...
}

// funkcja odczytuje i zwraca zmienną zapisaną w pliku
// jeśli plik lub zmienna nie istnieje to zwraca 0
function odczytajPolozenieStartowe(n)
{
    ...
}

// funkcja tworzy lub nadpisuje plik w którym zapisywane są zmienne startowe (ostatnio szukane elementy)
function nadpiszBiezacePolozonie(i, j, k, l)
{
    ...
}

// funkcja tworzy plik z wynikami i dopisuje kolejne wiersze z działającymi adresami na jego końcu
function zapiszWzorzecDoPliku(wzorzec)
{
    ...
} 

Oczywiście można napisać uogólnioną funkcję dla n-znakowego stringa, ale nie chce mi się z tym męczyć - to co masz powyżej jest mniej eleganckie, ale wystarczy.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...