다형성 코드
From Wikipedia, the free encyclopedia
컴퓨터 용어로 다형성 코드(영어: polymorphic code)는 원래의 알고리즘을 건드리지 않고 그대로 유지하면서 뮤테이트(mutate)를 수행하기 위한 다형성 엔진을 사용하는 코드이다. 즉, 실행할 때마다 코드는 스스로 변화되지만 코드의 기능(시맨틱)은 전혀 변하지 않는다. 이를테면 1+3과 6-2는 각기 다른 값과 동작을 사용하지만 둘 다 같은 결과를 수행한다. 이 기법은 컴퓨터 바이러스, 셸코드, 웜이 자신의 존재를 숨기기 위해 사용되곤 한다.[1]
암호화는 코드를 숨기는 가장 흔한 방식이다. 암호화와 함께 코드의 주요 본체(페이로드라고도 함)는 암호화되며 의미없는 것으로 나타난다. 이전처럼 코드가 기능하려면 복호화 함수를 코드에 추가해야 한다. 코드가 실행될 때 이 함수는 페이로드를 일고 실행 전에 복호화를 수행한다.
암호화 그 자체는 다형성이 아니다. 다형성 행위를 수행하려면 암호화/복호화 쌍이 코드의 각 사본과 함께 뮤테이트(mutate) 처리되어야 한다. 이로써 일부 코드가 버전이 다르더라도 모든 것이 동일하게 기능하게 된다.[2]