[모각코][2회차결과] OLLVM 실행 및 옵션 정리
1. 지난 회차에 마치지 못한 OLLVM 설치 마치기
클라우드에 ubuntu 인스턴스를 하나 개설하고, OLLVM 테스트환경으로 사용하기로 했다.
메모리가 16GB 였는데, 수월하게 OLLVM을 설치할 수 있었다. 위의 그림이 빌드 후의 결과물들이다.
2. 간단한 OLLVM 테스트
OLLVM 사용방법
OLLVM은 c 소스코드를 난독화한다. 그래서 먼저 target이 되는 c 파일이 필요하다. 실험을 위해 origin.c라는 이름의 파일을 생성하고, 다음 그림과 같이 간단한 코드를 작성하였다.
OLLVM으로 난독화하는 방법은 다음과 같다.:
$ 경로/build/bin/clang target.c -o target.o -mllvm -options...
OLLVM이 현재 제공하는 옵션은 3가지이다.
- fla
- sub
- bcf
test
다음과 같이 실행하였다.
난독화 전의 원본과 난독화 후의 프로그램을 GDB를 이용하여 확인하고 비교해보았다.
난독화 전 assembly code
fla 옵션 난독화 후
그냥 보기에도 훨씬 복잡해진 어셈블리코드를 확인할 수 있었다.
3. OLLVM의 옵션 확인
OLLVM이 제공하는 세가지 옵션을 자세히 보고자 한다.
1. fla (Control Flow Flattenig)
control flow를 난독화하는 옵션이다. 원래의 블럭외에 여러 블럭을 추가하여 난독화한다. split 옵션은 블럭을 나누는 옵션이다.
난독화한 결과
2. sub (Instructions Substitution)
instruction을 바꿔서 난독화하는 옵션이다. 더하기, 빼기, and, or, xor을 각각 난독화하는 방법들이 위의 링크에 자세히 적혀있다.
-sub_loop=n
은 n번 중첩하여 난독화하는 것 같다.
난독화한 결과
3. bcf (Bogus Control Flow)
원래의 블럭 이전에 opaque predicate를 포함하는 다른 블럭을 추가하여 난독화한다.
난독화한 결과