[ glupi @ 29.03.2005. 19:46 ] @
Dali postoji neka metoda izgradnje stringa neke dužine sa nekoliko željenih bajtova na određenim mjestima(ako može text ili tutorial), ili se treba oslonit na bruteforce? Problem je ovaj, imam
Code:
if((hi = crc32(0, argv[1], strlen(argv[1]))) == 0xe1ca95ee)

i sada bih ja trebao napraviti string koji bi imao 0xe1ca95ee checksum ali bi trebao 4 bajta na 78 mjestu u tom bufferu bi trebala biti moja proizvoljna.
[ Riste Pejov @ 15.04.2005. 12:28 ] @
Pa i tih 4 bajta ne mogu biti bas proizvoljni.

Ako uzmemo da tvoj string izgleda ovako nekako:
Code:

0x1A 0x2B 0x3C 0x4E 0x5D 0x6E 0x7F 0x81

i recimo zelis promeniti vrednost 4-tog bajta (t.j. 0x4E)

Onda dobijes:
Code:

newCrc = (( oldCrc) >> 8 )^ crcTablVal

gde oldCrc je crc32(0x1A 0x2B 0x3C)

Sto znaci moras prema CRCTabeli da presmetas koja vrednost crcTabVal
Code:

crcTabVal = CRCTabela[( 0x4E )^(( oldCrc) & 0x000000FF )]

crcTabela je deklarirana ovako: DWORD crcTAbela[256] i se inicijalizira uz pomoc init vektora, koji moze da bude apsolutno svasta, ali je neko nekada rekao da je najbolje koristiti init vektor kao 0x04c11db7 koji uzput koriste sve zip, rar aplikacije.

Sto znaci, da novi bajt koji treba da zauzme mesto bajta 4E mora producirati isti index u crc tabeli kao i 4E. Onda mozes samo brute force sa sledecim uslovom:
Code:

( 0x4E )^(( oldCrc) & 0x000000FF ) ==  ( newByteVal )^(( oldCrc) & 0x000000FF ) 

Potrazi malo po netu ... valjda ces uspeti pronaci nekoliko bajta sa kojim mozes zameniti tvoje 4 bajte, a li verovatnost da ces uspeti da promenis vrednost tih 4 bajt bas po tvojoj volji je 0.
[ glupi @ 15.04.2005. 21:43 ] @
Hvala na odgovoru, u medjuvremenu sam rijesio problem, napravio sam brutforce algoritam koji je za 2 sata nasao string duljine 80 znakova sa moja 4 bajta ;)