Web Analytics

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Kod polimorficzny - Wikipedia, wolna encyklopedia

Kod polimorficzny

Z Wikipedii

Kod polimorficzny w terminologii komputerowej, kod polimorficzny to kod, który zmienia się w czasie, nie zmieniając oryginalnego algorytmu w nim zawartego.

Przeważnie kod polimorficzny jest używany przez wszelkiego rodzaju wirusy i robaki komputerowe. Wynika to z samego działania programów antywirusowych, które szukają zainfekowanych plików poprzez znajdowanie w nich znanych łańcuchów. Wprowadzając modyfikacje kodu w każdej nowej kopii wirusa zadanie programów antywirusowych znacznie się komplikuje.

Do uzyskania kodu polimorficznego przeważnie używa się szyfrowania kodu. Rzeczywisty kod programu jest zaszyfrowany i za każdym uruchomieniem programu deszyfrowany. Niestety kod deszyfrujący nie może być zaszyfrowany, ponieważ byłby on bezużyteczny ("nieuruchamialny"). Właśnie deszyfrujący fragment kodu jest używany przez programy antywirusowe do stwierdzenia, czy program jest "podejrzany". Aby zmylić programy antywirusowe programiści próbują "zaciemnić" kod deszyfrujący.

Do pomocy w generowaniu zmian w kodzie deszyfrującym używa się następujących prostych akcji:

  • zamienia się instrukcje na ich odpowiedniki dające w rezultacie ten sam efekt - na przykład zamiast dzielić przez 2 ( x=x/2 ) można użyć przesunięcia bitowego w prawo o 1 bit ( x=x>>1 )
  • transpozycja, zamiana miejscami instrukcji, które nie mają wpływu na działanie sekwencji instrukcji
  • wprowadzanie instrukcji lub sekwencji instrukcji nic nie wnoszących do działania algorytmu (NOP), np. działających na lokalnych zmiennych

Dodatkowo modyfikacji ulec może również zaszyfrowany kod programu. Podczas replikacji program może użyć nowego klucza do zaszyfrowania własnego kodu.

[edytuj] Historia

Pierwszy znany wirus polimorficzny został napisany w przez Marka Washburn'a w 1990 roku i nazywał się 1260. Bardziej znany przykład wirusa polimorficznego został stworzony w 1992 przez bułgarskiego krakera, a znany jest pod nazwą Dark Avenger.

[edytuj] Przykład

W większości przypadków do szyfrowania kodu używa się prostej operacji XOR na wszystkich bajtach kodowanego fragmentu kodu.

    mov cx, code_length         ; do licznika cx wstaw długość zaszyfrowanego kodu
    mov si, offset begin_code   ; podstaw adres początku kodu zaszyfrowanego pod si
    mov al, xor_key             ; xor_key - klucz używany do rozszyfrowania kodu
 _loop:
    xor [si+cx], al             ; rozszyfruj bajt
    loop _loop                  ; pętla po następny bajt
    jmp si                      ; skok do odszyfrowanej części programu
    ;...
 begin_code:
    ; tu jest adres begin_code
    ; i zaczyna sie zaszyfrowany kod długości code_length

[edytuj] Zobacz też

W innych językach


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -