Andrzej P. Wozniak <uszer@poczta.onet.pl.invalid> napisał(a):
Tylko z czego są liczone te CRC? Bezpośrednio z nazwy
użytkownika raczej nie.
Z nazwy użytkownika.
Jak zapisanej? Przecież ktoś może mieć ogonki w nazwie i wtedy jest
różnica w kodowaniu.
W okienku wpisuje się z ogonkami, a program konwertuje nazwę
użytkownika do UTF-16.
Ale jaki dokładnie ciąg jest generowany? UTF-16 z BOM czy bez BOM na
początku ciągu? Ciąg jest zakończony przez 0x00 czy nie?
Pomyliłem się, tekst wpisany przez użytkownika jest konwertowany z UTF-16 na
lokalną stronę kodową. Stąd była prośba żeby nie używać polskich liter na
systemach z niepolską stroną kodową.
Czym to liczyłeś?
Nie muszę liczyć. Program sam generuje klucz i porównuje z wpisanym.
Trzeba tylko ten wygenerowany klucz podejrzeć i już wiadomo co
wpisać. Czy algorytm wykorzystuje CRC to nie wiem, to wymaga głębszej
analizy. W każdym razie finalna postać klucza jest generowana według
formatu "%u-%u", a więc jako liczby dziesiętne, nie szesnastkowe.
Czyli nie liczyłeś CRC i wycofujesz się z tego, że to CRC.
Z niczego nie się wycofywałem. Napisałem tylko, że dopóki nie znam dokładnie
algorytmu, to nie mogę potwierdzić czy jest liczone CRC. W każdym razie
dostałeś działający klucz.
Napisałem, że nie liczyłem, bo wykorzystałem gotowe obliczenia Gżegżółki.
A ja twierdziłem, że jeśli to CRC, to nie jest używany BEZPOŚREDNIO do
nazwy użytkownika.
Aleś się uniósł. Ja sobie spokojnie rozkminiałem jak to działa i na bieżąco
pisałem na grupie o swoich odkryciach. Nawet wygenerowałem Ci działający
klucz, co zupełnie pominąłeś.
Widać to w przywróconym cytacie.
Może nazwa jest zapisana wspak, może jest XOR z jakimś ciągiem, może
jakaś inna funkcja, ale nie bezpośrednio CRC. Jeśli wątpisz, wejdź na
stronę https://crccalc.com i pokombinuj z nazwą użytkownika w UTF-16
dla liczenia różnych sum. Podpowiadam, że Total Commander liczy sumę
opisaną jako CRC-32/ISO-HDLC.
Nie trzeba gdybać, w tej chwili już wiem jak wygląda algorytm:
1. Zmień nazwę użytkownika z UTF-16 na stronę lokalną.
2. Z nazwy oblicz CRC32.
3. Do obliczonej wartości dodaj sól.
4. Wynik dodawania zapisz jako ciąg znaków.
5. Oblicz CRC32 z tego ciągu.
6. Zwróć wynik jako liczbę dziesiętną z dodanym znakiem minus i solą.
Podałeś ciąg Źęć Żąśnół. CRC32 dla niego to liczba 0xfc2505d5. Za sól
przyjmuję sobie 123. Po dodaniu mam 0xFC250650. Program konwertuje to do
ciągu zawierającego liczbę dziesiętną 4230284880. Z ciągu "4230284880"
liczone jest CRC32 i dostajemy liczbę 0x9de051c4, czyli dziesiętnie
2648723908. Dorzucamy minus i powtarzamy sól, dostajemy klucz:
2648723908-123.
--
Grzegorz Niemirowski
https://www.grzegorz.net/
|