[모각코][2회차결과] OLLVM 실행 및 옵션 정리

less than 1 minute read

OLLVM

1. 지난 회차에 마치지 못한 OLLVM 설치 마치기

클라우드에 ubuntu 인스턴스를 하나 개설하고, OLLVM 테스트환경으로 사용하기로 했다.

image

메모리가 16GB 였는데, 수월하게 OLLVM을 설치할 수 있었다. 위의 그림이 빌드 후의 결과물들이다.

2. 간단한 OLLVM 테스트

OLLVM 사용방법

OLLVM은 c 소스코드를 난독화한다. 그래서 먼저 target이 되는 c 파일이 필요하다. 실험을 위해 origin.c라는 이름의 파일을 생성하고, 다음 그림과 같이 간단한 코드를 작성하였다.

image

OLLVM으로 난독화하는 방법은 다음과 같다.:

$ 경로/build/bin/clang target.c -o target.o -mllvm -options...

OLLVM이 현재 제공하는 옵션은 3가지이다.

  1. fla
  2. sub
  3. bcf

test

다음과 같이 실행하였다. image

난독화 전의 원본과 난독화 후의 프로그램을 GDB를 이용하여 확인하고 비교해보았다.

난독화 전 assembly code

origin

fla 옵션 난독화 후

fla

그냥 보기에도 훨씬 복잡해진 어셈블리코드를 확인할 수 있었다.

3. OLLVM의 옵션 확인

OLLVM이 제공하는 세가지 옵션을 자세히 보고자 한다.

1. fla (Control Flow Flattenig)

자세히

control flow를 난독화하는 옵션이다. 원래의 블럭외에 여러 블럭을 추가하여 난독화한다. split 옵션은 블럭을 나누는 옵션이다.

난독화한 결과

fla

2. sub (Instructions Substitution)

자세히

instruction을 바꿔서 난독화하는 옵션이다. 더하기, 빼기, and, or, xor을 각각 난독화하는 방법들이 위의 링크에 자세히 적혀있다.

-sub_loop=n 은 n번 중첩하여 난독화하는 것 같다.

난독화한 결과

sub

3. bcf (Bogus Control Flow)

자세히

원래의 블럭 이전에 opaque predicate를 포함하는 다른 블럭을 추가하여 난독화한다.

난독화한 결과

bcf

Categories:

Updated: