Cześć, moja koncepcja jest taka, że lwia część aplikacji znajduje się w zaszyfrowanym assembly, szyfrowanie kluczem innym dla każdego użytkownika. Program się loguje do serwera podając parę nazwa użytkownika/hasło, a przez HTTPS dostaje klucz deszyfrujący przypisany dla danego użytkownika/hasła. Assembly jest deszyfrowane w pamięci do tablicy bajtów i stamtąd ładowane przez Assembly.Load(byte[])
. Łączność z internetem oczywiście jest wymagana przy każdym uruchomieniu programu.
Powiedzcie, czy ta koncepcja ma jakikolwiek sens w obronie przed niezbyt zdeterminowanym atakującym?
Bo na tych minimalnie bardziej zdeterminowanych to ja rozumiem, że potrzebny jest MITM (?) żeby zdeszyfrować ruch HTTPS, a potem już analiza tylko jak robi się deszyfrację biblioteki i odpowiednia podmiana kodu IL, żeby nie łączył się z serwerem, ale deszyfrował wyciągniętym wcześniej kluczem. Żeby zabezpieczyć się przez podsłuchaniem HTTPS muszę zrobić sprawdzanie certyfikatu serwera, ale to też jedna linijka do zmiany w kodzie IL i sprawa z głowy, mam rację?
Oczywiście żeby już dostać klucz deszyfrujący wymagane jest przynajmniej jedno uruchomienie aplikacji i podsłuchanie komunikacji, czyli musi być kupiona choć raz, aby ktoś ją zdeszyfrował, ale to słaba pociecha :-)
No i gorsza kwestia, czyli co to zrobić, jeżeli chcemy zrezygnować z wymogu dostępu do Internetu? Zapisywać tymczasowo klucz gdzieś? Toż to od razu ktoś znajdzie...