autoryzacja pluginów w komunikatorze tlen.pl (c)2007 andrzej kaczmarek ostatnia aktualizacja: 21-07-2007 --------------------------------------------------------------------------- 1. sprawdzanie autoryzacji autoryzacja dokonywana jest na podstawie porównania wartości funkcji skrótu (SHA-1) obliczonej dla pliku .tpl, z wartością zaszyfrowaną zapisaną w danych dopisanych na końcu pliku. obecność tych danych identyfikowana jest za pomocą dwóch 4-bajtowych liczb typu unsigned long umieszczonych na końcu pliku. pierwsza z nich (patrząc od końca) zawiera stałą wartość 1A2B3C4Dh, natomiast druga określa rozmiar danych, w których znajduje się zaszyfrowana wartość funkcji skrótu. w przypadku pluginów firmowanych przez o2.pl jest to aktualnie zawsze 000001C0h. a zatem całkowita długość dodatkowych danych to wartość tej liczby powiększona o 8. dodatkowe dane umieszczone na końcu pliku są w większości losowe. istotne jest 8 końcowych bajtów, opisanych powyżej, oraz 64 początkowych, w których jest zaszyfrowana wartość funkcji skrótu. pożądaną wartość funkcji skrótu można odszyfrować korzystając ze stałęgo klucza publicznego (hex): e = 10001 pq = 807cef99098604b50cdf71e7e4ad7be882c04cec2511423a78da9abdea91cf86 1b0695955d980ba5cbf77759d1780eb0a8912bce30d69215234782d25a8f8199 wartość funkcji skrótu zawiera się w ostatnich 20 bajtach odszyfrowanego bloku. jeżeli wartość obliczona i odszyfrowana są identyczne, plugin uważany jest za autoryzowany. 2. sygnatura jeżeli 4 bajty (interpretowane jako liczba unsigned long) poprzedzające dane autoryzacyjne mają wartość 0000004Ch, to bezpośrednio przed nimi zapisana jest sygnatura pluginu o długości 76 bajtów. sygnatura zapisana jest w postaci poniższej struktury: struct PluginSignatureStruct { int structSize; // rozmiar struktury = sizeof(PluginSignatureStruct) = 76 int kind; // rodzaj pluginu int flags; // flagi char name[64]; // nazwa pluginu }; sygnatura jest opcjonalna, a jej obecność sprawdzana jest tylko w wypadku pomyślnej autoryzacji pluginu. jest również częścią pliku, dla której obliczana jest funkcja skrótu, a więc nie jest możliwa modyfikacja sygnatury bez utraty autoryzacji pluginu. aktualnie używany jest jeden rodzaj pluginu: #define PLUGIN_SIGNATURE_KIND_MEDIAONE 0x00000020 flagi w sygnaturze określają niestandardowe "zachowanie" pluginu. aktualnie używane: #define PLUGIN_SIGNATURE_FLAG_LOADWHENUSEDFIRSTTIME 0x00000001 plugin zostanie załadowany automatycznie przy pierwszym "użyciu" #define PLUGIN_SIGNATURE_FLAG_PERSISTENPLUGIN 0x00000002 plugin jest automatycznie ładowany i nie da się go wyłączyć