llvm-obfuscation
Expertise in LLVM-based code obfuscation techniques including OLLVM, control flow flattening, string encryption, virtualization, and anti-analysis methods. Use this skill when working on code protection, anti-reverse engineering, or implementing custom obfuscation passes.
Installation
Pick a client and clone the repository into its skills directory.
Installation
About this skill
Expertise in LLVM-based code obfuscation techniques including OLLVM, control flow flattening, string encryption, virtualization, and anti-analysis methods. Use this skill when working on code protection, anti-reverse engineering, or implementing custom obfuscation passes.
How to use
Zapoznaj się z głównymi technikami obfuskacji dostępnymi w LLVM: spłaszczaniem przepływu sterowania (CFF), fałszywym przepływem sterowania (BCF), szyfrowaniem stringów i podstawianiem instrukcji. Każda technika służy innym celom – CFF utrudnia śledzenie logiki programu, BCF dodaje fałszywe ścieżki, a szyfrowanie stringów chroni dane tekstowe.
Wybierz odpowiedni framework OLLVM w zależności od potrzeb: klasyczny OLLVM do podstawowych transformacji, Hikari do zaawansowanej ochrony funkcji, Pluto-Obfuscator do mieszanych wyrażeń boolowsko-arytmetycznych (MBA), lub o-mvll jeśli obfuskujesz aplikacje mobilne (iOS/Android).
Zdefiniuj cele ochrony – czy chcesz utrudnić analizę statyczną, dynamiczną, czy obie. Na tej podstawie dobierz kombinację technik: obfuskacja przepływu sterowania chroni logikę, obfuskacja danych chroni wartości, a wirtualizacja kodu (VMP) zapewnia najwyższą ochronę kosztem wydajności.
Implementuj wybrane przejścia obfuskacji w pipeline'u kompilacji LLVM. Możesz użyć istniejących implementacji z frameworków (np. BCF z klasycznego OLLVM) lub dostosować je do swoich wymagań poprzez modyfikację przebiegu na poziomie pośredniego kodu (IR).
Testuj obfuskowany kod pod kątem poprawności funkcjonalnej i wydajności. Obfuskacja zwiększa rozmiar kodu i czas wykonania – zweryfikuj, czy wpływ jest akceptowalny dla Twojego przypadku użycia.
Rozważ łączenie wielu technik dla głębszej ochrony: na przykład spłaszczanie przepływu sterowania w połączeniu z szyfrowaniem stringów i podstawianiem instrukcji. Jednak pamiętaj, że każda dodatkowa warstwa obfuskacji pogarsza wydajność i utrudnia debugowanie.