Did you know that you can navigate the posts by swiping left and right?
본 글은 이승원이 집필한 「리버싱 핵심원리」 를 읽고 공부(정리)한 내용을 바탕으로 쓰여졌습니다.
데이터를 더 적은 저장 공간에 효율적으로 기록하기 위한 기술, 또는 그 기술의 실제 적용
모든 파일 또는 데이터는 Binary(0과 1)로 구성되어 있다. 그러므로, 적절한 압축 알고리즘을 통해서 크기를 줄일 수 있다. 압축된 파일을 100% 원래대로 복원할 수 있다면 비손실 압축(Lossless Data Compression), 원래대로 복원할 수 없다면 손실 압축(Loss Data Compression)이라고 한다.
원본의 데이터를 조금도 훼손하지 않고 용량을 줄이는 것을 비손실(또는 무손실) 압축이라 한다.
파일(데이터)의 크기를 줄여서 보관 및 이동에 용이하도록 하려는 목적으로 사용된다. 파일 사용시에는 압축을 해제해서 사용한다. 일반적으로 우리가 사용하는 알집이나 반디집 같은 압축 프로그램으로 압축/압축풀기 하는 것이 비손실 압축의 예에 해당한다. 대표적인 비손실 압축 알고리즘은 Run-Length, Lempel-Ziv, Huffman 등이 있다. 그 외에도 수많은 알고리즘이 있지만, 저 3개의 알고리즘이 기반되어 있으므로 저것들을 잘 아는 것이 중요하다.
파일(데이터)에 의도적으로 손상을 주어 압축률을 높이는 것을 손실 압축이라고 한다.
주로 멀티미디어 파일들에서 인간이 지각하기 힘든 범위의 데이터를 버리고 압축하는 방법을 사용한다. 압축을 하는 과정에서 원본 데이터가 손실되기 때문에 원본으로 되돌릴 수 없다. 분명히 데이터 측면에서 볼 때, 차이가 발생한다. 그러나 사람이 보기에는 그 차이가 거의 구분할 수 없는 수준이기 때문에 많이들 사용되는 압축 방법이다.
실행 파일(PE, Portable Executable)을 대상으로 파일 내부에 압축 해제 코드가 있어 실행되는 순간에 메모리에서 압축을 해제시킨 후, 실행시키는 기술
압축된 파일 역시 PE 파일이다. 그래야 실행이 되고, 메모리에서 압축을 해제하겠지. 내부에 원본 PE 파일과 Decoding Routine이 있다. PE File을 Compressed Executable File로 만들어주는 Utility를 Packer 라고 한다. 그 중에서도 Anti-Reversing 기법에 특화된 Packer를 Protector라 한다.
실행 파일 압축기. 정식 명칭은 Run-Time Packer로 PE File 전문 압축기이다.
패커를 사용하는 이유는 2가지가 있는데 하나는 크기가 줄어든다는 장점 때문이다. 용량이 줄어드니 리소스적인 측면에서 효율적이다. 두 번째 이유는 PE File의 코드와 리소스를 감추기 위함이다. 압축된 데이터는 난잡한(?) Binary 형태로 저장되므로 파일 자체로 볼 때 내부 코드와 리소스를 감추는 효과가 있다. (어짜피 압축이 해제된 메모리 덤프에서 감춰진 것들을 볼 수 있다.) 방법을 찾을 것이다. 언제나 그랬듯이
최근 실행 압축은 Utility, Patch File, 일반 프로그램 등에 널리 사용되고 있다. 옛날에는 CPU 속도가 겁나게 느려서 실행 할때마다 압축을 해제하는데 시간이 많이 걸렸지만, 요즘은 그런거 없다. 빛의 속도로 압축 해제 및 실행을 한다.
PE File을 Reversing으로부터 보호하기 위한 Utility.
프로텍터는 크래킹을 방지하고, 코드 및 리소스를 보호하기 위한 보안의 목적에서 사용된다. 일반적인 패커처럼 실행 압축을 해주는 것뿐만 아니라 리버싱을 막기 위한 다양한 기법이 추가된다. 프로텍터들로 압축된 PE File의 크기는 원본 PE File보다 커진다. 수많은 Decoding header가 붙기 때문이 아닐까 그리고 디버깅하기는 매-우 어렵다. 상세 분석을 하기 위해서는 많은 경험이 요구된다.
보안 프로그램에서 주로 많이 사용한다. 게임 보안 프로그램이라던가 미친놈의 Dev Cat 새끼 결제 보안 시스템 등에서도 사용된다. 시스템 크랙을 방지하는 역할로 주로 사용된다. 반면에, 일반적인 악성코드(Trojan, Worm)에서도 많이 사용된다. 그 이유는 Anti-Virus 제품의 진단을 막기 위해서이다. 일부 프로텍터는 다형성 코드를 제공하기 때문에 매번 코드의 모양이 바뀌므로 Anti-Virus 제품에서 진단하기 어려워지는 경향이 있다.