Do nového roku jako lepší programátoři? Znovu otevíráme večerní školu programování. Nette framework, návrhové vzory, testování nebo vůbec poprvé kurzy ASP.NET dostupné odkudkoli v republice.

Generování hesel

C++ Základní konstrukce C Zdrojákoviště Generování hesel

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Zdravím. Dnes si ukážeme, jak si vygenerovat wordlist s heslama v jazyce C.

Co je to wordlist?

Wordlist je nějaký soubor, plný třeba hesel, který se používá pomocí nějakého software k prolomení hesla. Možná už jste viděli nějaký wordlist, v kterém jsou všemožné kombinace hesel pod sebou, aby je mohl nějaký ten software načíst a zkoušet je. Teď si ukážeme, jak jednoduše si takový wordlist můžeme udělat sami v jazyce C.

Co k tomu budeme potřebovat?

Bude nám bohatě stačit knihovna stdio, stdlib pro vstup/výstup a ukládání do souboru + jedna proměnná! :)

Jak jistě víte, mnoho lidí používá čtyřmístná hesla, nehledě na to, že třeba i na platební kartu máte čtyřmístný PIN kód. Takovýto wordlist se v jazyce C dá napsat na pár řádků.

#include <stdio.h>
#include <stdlib.h>

int main(int i)
{
    FILE *soubor;
    soubor = fopen("Hesla.txt","a+");
    for(i = 0; i < 10000; i++)
    {
        fprintf(soubor,"%04d\n",i);
    }
    return 0;
}

Vytvoříme si nějaký soubor, v našem případě je to soubor Hesla.txt. A poté pomocí cyklu zapisujeme čísla do souboru. "%04d%\n" znamená, že to bude psát čísla ve formátu čtyř míst, například : 0001,9951 a odřádkuje. V souboru poté vidíme opravdu všechny možné kombinace čísel 0 až 9999. Vualá a máme všechna čtyřmístná hesla na světě. Asi si říkáte, "ale co když chci osmimístná hesla?" Odpověď je jednoduchá, místo "%04d\n" napíšeme "%08d\n" a místo 10000 v našem cyklu dáme největší možné osmimístné číslo tedy 100 000 000 tedy :

#include <stdio.h>
#include <stdlib.h>

int main(int i)
{
    FILE *soubor;
    soubor = fopen("Hesla.txt","a+");
    for(i = 0; i < 100000000; i++)
    {
        fprintf(soubor,"%08d\n",i);
    }
    return 0;
}

A vypíší se nám všechny možné kombinace do souboru Hesla.txt. Ovšem to už je trošičku drastické, protože ten soubor už bude mít nějaký ten MB :D možná i GB O:-). No a výsledný wordlist už můžeme hodit do našeho software pro zkoušení hesel, třeba Brutus :) nebo si napsat vlastní aplikaci pro přihlašování se na nějaký server. :)


 

  Aktivity (2)

Článek pro vás napsal Зайчик
Avatar
Коммунизм для нашего будущего!

Jak se ti líbí článek?
Celkem (2 hlasů) :
4.54.54.54.54.5


 


Miniatura
Předchozí článek
Rámeček

 

 

Komentáře

Avatar
melda23hokej
Člen
Avatar
melda23hokej:

Jak by to šlo udělat i s písmenama ?

 
Odpovědět 1.6.2013 23:12
Avatar
Jozef
Člen
Avatar
Odpovídá na melda23hokej
Jozef:

Pre prípad, že by to niekoho zaujímalo, tak pripájam svoj kód, ktorý robí toto isté s písmenami. V

n = 100000;

, si dosaďte aké číslo chcete, vypíše to všetky možnosti až po pozíciu, ktorú zvolíte. Ak chcete napr. od 3 miestnych znakov, tak si za k dosadíte namiesto 0 číslo 703(pozícia prvého trojmiestneho reťazca) atď...

int main()
{
  FILE*fa;
  fa = fopen("Hesla.txt","a+");
  uint64_t i,zad_cisloint,cis_pism,j = 0,k,n;
  double zad_cislor;
  char znak[26];
  char *zn;
  for(i = 0; i < 26;i++)
      znak[i] = (65+i);
  n = 100000;
  char **retazec;
  retazec = (char **) malloc(n * sizeof(char *));
  for(i = 0; i < n; i++)
      retazec[i] = (char *) malloc(26 * sizeof(char));
  for(k = 0; k < n; k++){
  zad_cisloint = k+1;
  zad_cislor = zad_cisloint;
  while((zad_cislor / 26) > 0){
        i = j++;
        zad_cisloint = (uint64_t)zad_cislor;
        cis_pism = zad_cisloint % 26;
        if(cis_pism == 0)
            cis_pism = 26;
        retazec[k][i] = znak[cis_pism-1];
        zad_cislor = (zad_cisloint-cis_pism) / 26;
  }
        retazec[k][j] = '\0';
        j = 0;
  }
  for(k = 0; k < n; k++){
      for(i = strlen(retazec[k]); i > 0; i--)
            fprintf(fa,"%c",retazec[k][i-1]);
      fprintf(fa,"\n");
  }

  return 0;
}
Odpovědět 17.3.2015 14:21
I'm not afraid to die on a treadmill
Avatar
neutr
Člen
Avatar
Odpovídá na melda23hokej
neutr:

Je to sice starší téma ale odpovím. Nejsnadnějí jsou 4 vnořené cykly FOR - píšu schematicky pro StarBasic.
deklarovat a(3) as string. Rozsah iterací je dán od znaku 33 (tuším vykřičník) až 254 - 255 se asi nepoužívá i tak jsou tam nečeské znaky.
For a 33 To 254
For b 33 To 254
For c 33 To 254
For d 33 To 254
a(0) = Char(a)
a(1) = Char(b)
a(2) = Char(c)
a(3) = Char(d)
Next d
Next c
Next b
Next a

Jinak bych doporučil spíš načítat z array kde se vynechají některé znaky dle uvážení. Takže pak do zdrojové array zadat například UTF-8 - tipuji cca 200 znaků a cykly nastavit od 0 do 200.
Má to výhodu v tom, že nepotřebuješ přímo wordlist - nanejvýš zabudovat zápis posledního testovaného cyklu pro případy přerušení práce.

 
Odpovědět 27.12.2016 18:23
Avatar
neutr
Člen
Avatar
Odpovídá na neutr
neutr:

Ještě jsem zapoměl - když bys chtěl WordList tak potom pomocí dvojrozměrného pole a(i,3) Kde inkrementuješ "i" a když by mělo přetéct tak vytvořít jiný seznam od i = 0. Navázat se musí jen čísla na cyklech a, b, c, d. Má to výhodu že nemusíš nic extra jiného sledovat jen aby počet výrazů nepřetekl. Nanejvýš tam vložit nějakou hlášku, že je to u konce.

 
Odpovědět 27.12.2016 18:46
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 4 zpráv z 4.