Jump to content

Декодер вектора трассировки

Декодер вектора трассировки ( TVD ) — это компьютерное программное обеспечение , которое использует возможности трассировки своего базового микропроцессора инструкций для декодирования зашифрованных опкодов непосредственно перед выполнением и, возможно, их последующего повторного кодирования. Его можно использовать для предотвращения обратного проектирования при попытке предотвратить взлом программного обеспечения в рамках общей стратегии защиты от копирования .

Трассировка микропроцессора

[ редактировать ]

Некоторые семейства микропроцессоров (например, 680x0, x86) обеспечивают возможность отслеживания инструкций, что помогает в разработке программ. Отладчик . может использовать эту возможность для пошагового выполнения программы, предоставляя программисту возможность контролировать выполнение тестируемой программы

Установив собственный обработчик трассировки исключения , можно получить контроль над микропроцессором между выполнением обычных инструкций потока программы. Типичный обработчик исключений декодера вектора трассировки декодирует предстоящую команду, расположенную за пределами исключения, а также перекодирует ранее декодированную инструкцию.

Реализации

[ редактировать ]

Моторола 680x0

[ редактировать ]

Motorola 68000 имеет функцию отслеживания инструкций. [ 1 ] Когда его состояние трассировки включено, процессор автоматически вызывает исключение трассировки после выполнения каждой инструкции (не-исключения). Следующий фрагмент ассемблерного кода представляет собой пример программы, инициализирующей обработчик исключений трассировки в системе 68000.

InstallHandler:	MOVE.L	#$4E730000,-(SP)       ; Push trace exception handler on to stack
                MOVE.L	#$00000010,-(SP)
                MOVE.L	#$0004DDB9,-(SP)
                MOVE.L	#$BD96BDAE,-(SP)
                MOVE.L	#$B386B586,-(SP)
                MOVE.L	#$D046D246,-(SP)
                MOVE.L	#$0246A71F,-(SP)
                MOVE.L	#$00023C17,-(SP)
                MOVE.W	#$2C6F,-(SP)
                MOVE.L	SP,($24).W             ; Set trace exception handler vector
                ORI.W	#$A71F,SR              ; Enable trace state
                NOP                            ; CPU generates a trace exception after executing this NOP
                ;------------------------
                ...                            ; Code from this line would be encrypted

Ниже приведена дизассемблирование вышеуказанного обработчика исключений трассировки, загруженного в стек. Целью этого обработчика является запутывание любого отслеживаемого зашифрованного кода. На процесс его расшифровки влияет содержимое регистра кода состояния (CCR). Например, арифметическая операция в основной программе, имеющая в результате число 0 , приведет к установке нулевого бита флага в CCR. Это приведет к изменению значения в (SP) в обработчике исключений трассировки.

TraceHandler:   MOVE.L	(2,SP),A6              ; Load return address from supervisor stack
                MOVE.W	(SP),D6                ; Load condition codes of the main program
                AND.W	#$A71F,D6
                ADD.W	D6,D0
                ADD.W	D6,D1
                EOR.L	D1,D6
                EOR.L	D2,D6
                EOR.L	D6,(A6)                ; Decode 8 bytes ahead in main
                EOR.L	D6,(4,A6)
                RTE                            ; Return from exception

Интел х86

[ редактировать ]

Процессоры x86 предоставляют флаг трассировки, который генерирует прерывание после выполнения каждой инструкции. Следующий ассемблерный код является примером того, как это можно реализовать в системе 8086.

; Start by setting a trace handler
InstallHandler: xor     bx, bx                 ; clear bx (faster than mov 0 into it)
                mov     es, bx                 ; now ES start is at 0x00000
                mov     word ptr es:[1*4], offset TraceHandler   ; write handler's address offset to IVT entry 1
                mov     word ptr es:[1*4 + 2], cs                ; write current code segment to IVT entry 1

; Turn on the trace trap
                pushf                          ; push FLAGS onto stack
                pop     ax                     ; pop previously read FLAGS into AX
                or      ah, 1                  ; set bit 0 by ORing with 1
                push    ax                     ; push modified flags back onto stack 
                popf                           ; now we have set trace flag in FLAGS

                nop
                ;------------------------
                ...                            ; Code from this line would be encrypted

Ниже приводится дизассемблирование связанного обработчика прерываний трассировки.

TraceHandler:   push    bp
                mov     bp, sp                 ; Gain access to return address
                push    bx
                push    ds                     ; Return address in DS:BX

                lds     bx, 2[bp]              ; Pointer to opcode of next instruction
                mov     bx, [bx]               ; Get current instruction's opcode

                ...                            ; Decode the opcode

                pop     ds
                pop     bx 
                pop     bp
                iret                           ; Return from interrupt

Система Rob Northen Copylock, реализованная на Amiga , [ 2 ] Атари СТ [ 3 ] и IBM ПК [ 4 ] платформы включает в себя TVD. В дополнение к общему программному шифрованию Copylock TVD запутывает код, который осуществляет доступ к защищенной от копирования дискете и проверяет ее .

Демосцена

[ редактировать ]

TVD был включен в демо-версию Voyage , написанную для Commodore Amiga на базе 680x0 компанией Razor 1911 . [ 5 ]

  1. ^ «Дополнительная информация о 16-битном микропроцессоре MC68000» (PDF) . Моторола Инк.
  2. ^ Севаллиу, Патрик. «Радужные острова» . Компьютерная археология .
  3. ^ Керр, Уэйн (май 2004 г.). «Взлом Amiga – взгляд на базовые TVD» . Флештро .
  4. ^ Отпуск, Fabulous (6 августа 2008 г.). «Копилок Роба Нортена» . Моя жизнь за патчем .
  5. ^ Различный. «Демо-версия Вогеджа» . Пуэт .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d9b38ee7e5845f18e0e7489211c19e1e__1645015260
URL1:https://arc.ask3.ru/arc/aa/d9/1e/d9b38ee7e5845f18e0e7489211c19e1e.html
Заголовок, (Title) документа по адресу, URL1:
Trace vector decoder - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)