Dekoder wektora śledzenia
Dekoder wektorów śledzenia ( TVD ) to oprogramowanie komputerowe , które wykorzystuje funkcję śledzenia swojego podstawowego mikroprocesora do dekodowania zaszyfrowanych rozkazów instrukcji dokładnie na czas przed wykonaniem i ewentualnie ponownego kodowania ich później. Może być używany do utrudniania inżynierii wstecznej podczas próby zapobiegania pękaniu oprogramowania w ramach ogólnej strategii ochrony przed kopiowaniem .
Śledzenie mikroprocesora
Niektóre rodziny mikroprocesorów (np. 680x0, x86) zapewniają możliwość śledzenia instrukcji w celu ułatwienia rozwoju programu. Debuger może wykorzystać tę możliwość do pojedynczego przejścia przez program, zapewniając programiście środki do monitorowania wykonywania testowanego programu .
Instalując niestandardową procedurę obsługi wyjątku śledzenia , można uzyskać kontrolę nad mikroprocesorem między wykonywaniem normalnych instrukcji przepływu programu. Typowa procedura obsługi wyjątków dekodera wektora śledzenia dekoduje nadchodzącą instrukcję znajdującą się poza wyjątkiem, jak również ponownie koduje poprzednio zdekodowaną instrukcję.
Implementacje
Motorola 680x0
Motorola 68000 ma funkcję śledzenia instrukcja po instrukcji. Kiedy jego stan śledzenia jest włączony, procesor automatycznie wymusza wyjątek śledzenia po wykonaniu każdej instrukcji (nie będącej wyjątkiem). Poniższy asemblera jest przykładem programu inicjującego procedurę obsługi wyjątków śledzenia w systemie 68000.
InstallHandler: MOVE.L # $ 4 E730000 , - ( SP ) ; Przenieś program obsługi wyjątków śledzenia na stos MOVE.L # $ 00000010 , - ( SP ) MOVE.L # $ 0004 DDB9 , - ( SP ) MOVE.L # $ BD96BDAE , - ( SP ) MOVE.L # $ B386B586
, - ( SP ) MOVE.L # $ D046D246 , - ( SP ) MOVE.L # $ 0246 A71F , - ( SP ) MOVE.L # $ 00023 C17 , - ( SP ) MOVE.W # $ 2 C6F , - ( SP ) MOVE.L SP ,( $ 24
) .W ; Ustaw wektor obsługi wyjątków śledzenia ORI.W # $ A71F , SR ; Włącz stan śledzenia NOP ; CPU generuje wyjątek śledzenia po wykonaniu tego NOP ;--------------------------------------- ... ; Kod z tej linii zostałby zaszyfrowany
0 Poniżej przedstawiono demontaż powyższej procedury obsługi wyjątków śledzenia załadowanej na stosie. Celem tej procedury obsługi jest zaciemnianie każdego śledzonego zaszyfrowanego kodu. Na jego proces deszyfrowania ma wpływ zawartość rejestru kodu stanu (CCR). Na przykład operacja arytmetyczna w programie głównym, której wynikiem jest liczba, spowoduje ustawienie bitu flagi zerowej w CCR. Spowoduje to zmianę wartości w (SP) w programie obsługi wyjątków śledzenia.
TraceHandler: MOVE.L ( 2 , SP ), A6 ; Załaduj adres zwrotny ze stosu nadzorcy MOVE.W ( SP ), D6 ; Kody stanu obciążenia programu głównego AND.W # $ A71F , D6 ADD.W D6 , D0 ADD.W D6 , D1 EOR.L D1 , D6 EOR.L D2 , D6 EOR.L D6 ,( A6 )
; Dekoduj 8 bajtów do przodu w głównym EOR.L D6 ,( 4 , A6 ) RTE ; Powrót z wyjątku
Intel x86
Procesory x86 zapewniają flagę śledzenia, która generuje przerwanie po wykonaniu każdej instrukcji. Poniższy asemblera jest przykładem tego, jak można to zaimplementować w systemie 8086.
; Zacznij od ustawienia procedury obsługi śledzenia InstallHandler: xor bx , bx ; wyczyść bx (szybciej niż mov 0 do niego) mov es , bx ; teraz ES start to 0x00000 mov word ptr es :[ 1 * 4 ], offset TraceHandler ; przesunięcie adresu modułu obsługi do wpisu IVT 1 mov słowo ptr es :[ 1 * 4 + 2 ], cs
; zapisz bieżący segment kodu do wpisu IVT 1 ; Włącz pułapkę śledzenia pushf ; wepchnij FLAGI na stos pop topór ; pop wcześniej wczytaj FLAGI do AX lub ah , 1 ; ustawić bit 0 przez ORing z 1 pchającym toporem ; wepchnij zmodyfikowane flagi z powrotem na stos popf ; teraz ustawiliśmy flagę śledzenia we FLAGS nop ;-------------------------------------- ... ; Kod z tej linii zostałby zaszyfrowany
Poniżej przedstawiono demontaż powiązanej procedury obsługi przerwań śledzenia.
TraceHandler: push bp mov bp , sp ; Uzyskaj dostęp do adresu zwrotnego push bx push ds ; Adres zwrotny w DS:BX lds bx , 2 [ bp ] ; Wskaźnik do kodu operacji następnej instrukcji mov bx , [ bx ] ; Uzyskaj kod operacji bieżącej instrukcji ... ; Dekoduj opcode pop ds pop bx pop bp iret ; Powrót z przerwania
Przykłady
Blokada kopiowania
Rob Northen Copylock zaimplementowany na platformach Amiga , Atari ST i IBM PC zawiera TVD. Oprócz ogólnego szyfrowania programowego, Copylock TVD zaciemnia kod dostępu i sprawdza poprawność dyskietki chronionej przed kopiowaniem .
Demoscena
TVD był zawarty w demo Voyage, napisanym przez Razor 1911 dla Commodore Amiga opartego na 680x0 .