Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem hadanka c.4 - najdi heslo

tak a znova ma hackli. 3-[ chcel som byt poriadny geek a urobil som si autentifikaciu v jazyku C. myslel som, ze som zvolil celkom dobre heslo:

if (strcmp(buffer, "123") == 0)

, ale asi moc dobre nebolo. :-( ok, vsak som nejaky geek, tak som si dal total brutal neprelomitelne heslo a napisal som si na stranku: teraz ma hacknite vy loseri! a tesil som sa, ako som im to nandal. 8-) na druhy den som bol znovu hacknuty a napisali mi: you are lamer!. este mi napisali cosi ako BFU alebo BOF alebo BAF, uz si presne napamatam, tak ma to rozrusilo. takze, ak by ste mi mohli pomoct, ako sa im to podarilo, bol by som velmi vdacny.;-) tu je kod:

#include <string.h>
#include <stdio.h>

char testuj_udaje(char* heslo)
{
//  char* hash="_y66v!**";
  char je_heslo_OK = 'N';
  char buffer[15];

  strcpy(buffer, heslo);
  if (strcmp(buffer, "*******************") == 0) 
    je_heslo_OK = 'A';
return je_heslo_OK;
}

int main(int argc, char* argv[])
{
 if (argc<2)  { 
   printf("musis zadat heslo, sklerotik!\n"); 
   return 1; 
 }
 if (testuj_udaje(argv[1]) == 'A')  
   printf("OK, vstup pane\n"); 
 else
   printf("koho chces hackovat, loser?\n");
return 0;
}

otestovat heslo si mozte tu: level4.php
a binarka na testovanie je tu: heslo.zip
hall of fame je tu: halloffame.php

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Zrejme to nie je multiplatformové?;-)
msx. 21.05.2006 22:12
msx.
tato hadanka nemoze byt multiplatformova a ani pre jednu platformu nemusi mat rovnake vysledky, takz…
IgorK 21.05.2006 22:17
IgorK
Veď ani nemá, spustil som to a o chvíľu sa mi zrútil Windows.:-D Alebo to zariadil TDX.EXE, ktorý od…
msx. 21.05.2006 22:29
msx.
zrejme tato hadanka je pre teba prilis tazka. :-D
IgorK 21.05.2006 22:32
IgorK
Princíp som už pochopil, len neviem ako to tam dostať.
msx. 21.05.2006 23:06
msx.
Ak si pochopil princip tak dalsi hint je: alignment ;-) On ten svina alignment :-D vie narobit probl…
MM.. 22.05.2006 02:54
MM..
Áno už som sa tým začal zaoberať. Ešte som nad tým v robote rozmýšľal a zaplo mi, že toto je konzolo…
msx. 22.05.2006 17:30
msx.
zkus se v tom kodu zamerit na radek if (strcmp(buffer, "*******************") == 0) a deklarace pr…
Jan Fiala 23.05.2006 06:34
Jan Fiala
Veď ja viem, o čo tam ide. Len neviem, ako to je uložené. Pre mňa za mňa tu napíšem presný popis a p…
msx. 23.05.2006 17:49
msx.
Pre mňa za mňa tu napíšem presný popis a potom to bude vedieť už pomaly každý alebo to ešte predtým…
MaSo 23.05.2006 19:12
MaSo
Tu je teda popis (ak moderátori chcú nech to vymažú): Pri kopírovaní reťazca dojde k pretečeniu cez…
msx. 23.05.2006 23:00
msx.
da sa povedat, ze je ti to jasne ale k ziadnemu presmerovaniu smernikov nedojde a ani neviem, ako si…
IgorK 23.05.2006 23:05
IgorK
Veď to je to, že nemôžem. Teda môžem. Asi rozchodím ten Turbo Debugger s nejakým skúšobným programom…
msx. 23.05.2006 23:11
msx.
zmeni sa obsah smernikov, ale ziadne presmerovanie. ]:) //edit: tak si urob jednoduduchy program v p…
IgorK 23.05.2006 23:13
IgorK
Moje chyby: 1. To pvé som považoval za znak a druhé za reťazec. Reťazec som považoval vlastne za sm…
msx. 23.05.2006 23:33
msx.
1. ani jedno nie je smernik 2. Znak (char) nema dlzku 2byty :!: Je to posunute kvoli tomu co som ti…
MM.. 27.05.2006 14:35
MM..
1. To mi po čase došlo, lebo smerníky nemusia mať svoj obsah za sebou. 2. Aj toto mi došlo potom, al…
msx. 08.06.2006 17:56
msx.
/0 není za každým znakem, ale až na konci řetězce (null terminated string). poslední
Mečislav Kozel 10.06.2006 20:11
Mečislav Kozel

Ak si pochopil princip tak dalsi hint je: alignment ;-)
On ten svina alignment :-D vie narobit problemy aj v beznom zivote, napr. ak naivny programator (ako ja ked som studoval :-)) uklada obsah struktury o viac premennych do suboru tak ako je (binarne), vsetko funguje len dovtedy kym si niekto tie zdrojaky prelozi napr. 64bit prekladacom na 64bit masine (vtedy to bola u mna DEC Alpha), tak ma ten program zrazu problem precitat datove subory, ktore ten isty program (len prelozeny inym prekladacom) vytvoril u mna doma na 32bit PC :-)

Áno už som sa tým začal zaoberať. Ešte som nad tým v robote rozmýšľal a zaplo mi, že toto je konzolová aplikácia pre Windows, takže to bude trochu inak. Stále som to prepočítaval podľa DOSu. Ale toto mi tiež veľmi nepomohlo (toto moje zistenie), nakoľko netuším ako si to rozhadzuje Windows, takže ešte musím porozmýšľať.

Veď ja viem, o čo tam ide. Len neviem, ako to je uložené. Pre mňa za mňa tu napíšem presný popis a potom to bude vedieť už pomaly každý alebo to ešte predtým nejaký moderátor vymaže, aby to nebol hint pre ostatných.

Edit: V krátkosti len toľko, že keby podporoval jazyk C direktívu $S z Turbo Pascalu, tak pri zadaní hesla by sme skončili s hlásením Runtime errror 202 (to je akože z Turbo Pascalu).

Tu je teda popis (ak moderátori chcú nech to vymažú):

Pri kopírovaní reťazca dojde k pretečeniu cez pole znakov, teda vlastne pretečie zásobník a prepíšu sa obsahy smerníkov. Tým dojde k "presmerovaniu smerníkov" a teda vlastne už bude v premennej, ktorá má obsahovať "N" zmenený obsah na "A". Len dočerta neviem ako to poprehadzovať, aby som prepísal správne smerník.

Veď to je to, že nemôžem. Teda môžem. Asi rozchodím ten Turbo Debugger s nejakým skúšobným programom v Pascale. V Delphi ešte natoľko CPU window nepoznám, ale skúsim aj to. Teraz si ma doplietol. Chceš povedať, že smerníky ostanú nezmenené?::) Moja teória padla.3-[

Moje chyby:

1. To pvé som považoval za znak a druhé za reťazec. Reťazec som považoval vlastne za smerník na reťazec a znak som považoval za konkretny znak. Lenže ešte aj to som sa pomýlil a bral som to naopak a preto som si myslel, že za znakmi reťazca bude nasledovať smerník na znak (totiž som si to v tej rýchlosti pomýlil a presne naopak som to bral) a tesa som myslel, že sa bude prepisovať hodnota smerníka a tým pádom ten smerník ukáže na reťazec "A".

2. Potom som to skúšal tak, že som napísal surovo za heslo písmeno "A". Problém bol v tom, že som všetko urobil dobre, ale zabudol som na to, že v C má znak dĺžku dva bajty. Tak som potom konečne jeden znak pridal (konečne som sa zobudil).

Takže sa chcem poďakovať Igorovi, že toľko som nad tým špekuloval, že som sa opäť voľačo zaujímavé naučil.

1. To mi po čase došlo, lebo smerníky nemusia mať svoj obsah za sebou.
2. Aj toto mi došlo potom, ale niekde som tuším čítal, že nejakom C má znak dĺžku dva byte. Alebo to je tak, že za každým znakom je \0? Pretože inak by to prepísalo niečo v zásobníku a už by ten program nebežal.;-)

Zpět do poradny Odpovědět na původní otázku Nahoru