
Create Anti-Copy DRM Malware
이 저장소는 프로그램의 Import Address Table(IAT)에서 가져온 함수 이름을 해당 서수(ordinal)로 대체하여, 오직 서수를 통해서만 함수를 가져오는 바이너리를 생성하는 기술을 사용합니다.
이 기술은 시스템마다 서수 값이 일치하지 않기 때문에 샌드박스 시스템이 바이너리를 성공적으로 분석할 가능성을 줄여줍니다. 이러한 불일치로 인해 Windows 로더가 올바른 함수 주소를 찾지 못하거나 잘못된 함수를 가져오게 되어, 샌드박스 환경에서 바이너리가 손상됩니다. 마지막으로, 이 기술은 바이너리를 리버스 엔지니어링하기 더 어렵게 만듭니다.
이 저장소에는 두 개의 프로젝트가 포함되어 있습니다:
디스크에서 PE 파일을 읽고 이름으로 가져온 함수들을 해당 서수 값으로 덮어씁니다. 생성된 프로그램은 가져온 함수들이 생성된 시스템과 동일한 서수 값을 가진 시스템에서만 실행됩니다.
TechTestBuilder.exe 프로그램을 사용하여 mimikatz.exe에서 서수 가져오기 함수로 변환된 mimikatzDRM.exe를 생성합니다.

mimikatzDRM.exe를 실행하면 다음 오류가 발생합니다.

이 프로젝트는 처음 실행될 때 DRM 기술 자체를 적용합니다. 즉, 이 바이너리는 다른 머신에서 쉽게 실행될 수 없습니다. OrdinalDRMBin.exe는 다음 단계를 수행합니다:
로컬 프로그램에 이름으로 가져온 함수가 있는지 확인하고, 없으면 IAT 패치 적용을 건너뜁니다.
디스크에서 자신을 읽어 모든 이름 가져오기 함수를 서수 가져오기로 변환합니다.
디스크에서 자신을 삭제합니다.
모든 함수가 서수로 가져와진 새 이미지를 작성합니다.
OrdinalDRMBin.exe를 보여줍니다. 함수들이 이름으로 가져와진 것을 확인할 수 있습니다.

OrdinalDRMBin.exe를 보여줍니다. 함수들이 이제 서수로 가져와진 것을 확인할 수 있습니다.

앞서 언급했듯이, 생성된 구현의 모든 가져온 함수에 대해 정확히 동일한 서수 값을 가진 시스템만 보호된 바이너리를 실행할 수 있습니다. 그러나 서로 다른 DLL에서 함수를 가져옴으로써 이러한 상황이 발생할 확률을 줄일 수 있습니다. IAT Camouflage 모듈에서 사용된 것과 동일한 접근 방식을 이 목적으로 사용할 수 있습니다.