amdx1254 / capstone-design1-llvm-obfuscation

llvm pass를 이용한 return instruction 난독화

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MIT License

Table of Contents

About The Project

최근 다양한 IoT 디바이스의 사용이 증가되고 있고, 그로 인한 보안 위협도 증가되고 있다. 베어메탈(BareMetal) IoT 디바이스의 펌웨어는 펌웨어 업데이트 파일 및 Flash De-soldering 등으로 추출이 가능 하며, 이를 역공학(Reverse Engineering) 툴을 이용한 정적 분석을 통해 실행 흐름을 분석하여 취약점을 찾을 수 있다. 이를 해결하기 위해 일반적인 컴퓨팅 시스템에는 정적 분석을 어렵게 하기 위한 다양한 소스코드 기반의 난독화 방법이 존재한다.그러나, 기존 바이너리 코드 난독화에 대한 연구는 다양하게 전개된 사례는 있으나, 베어메탈 기반의 IoT 디바이스를 타겟으로 하는 난독화 기법의 연구 전개는 미비한 상황이다. 이를 해결하기 위해 LLVM Pass를 이용한 난독화된 바이 너리 코드를 실행하는 코드의 삽입을 통해 베어메탈 IoT 디바이스 펌웨어의 바이너리 코드를 난독화 하는 방안을 제안한다.

Build

  1. Clone the repo
git clone http://khuhub.khu.ac.kr/2020-1-capstone-design1/JJS_Project1.git
  1. Install cmake
brew install cmake
  1. Create Build folder
mkdir ./JJS_Project1/src/build
  1. Change directory
cd ./JJS_Project1/src/build
  1. Create LLVM Clang build file
cmake -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm
  1. Build
make

Usage

JJS_Project1/src/build/bin/clang -emit-llvm -c -S source.c -o source.ll
JJS_Project1/src/build/bin/opt -load JJS_Project1/src/build/lib/LLVMObfuscation.so -preprocess source.ll -o source.ll
JJS_Project1/src/build/bin/opt -load JJS_Project1/src/build/lib/LLVMObfuscation.so -rof source.ll -o source.ll

License

LLVM(https://github.com/llvm-mirror/llvm)

Contact

2015104175 박우진 - amdx1254@khu.ac.kr
2017110275 이한솔 - mardi@khu.ac.kr

About

llvm pass를 이용한 return instruction 난독화


Languages

Language:C++ 46.5%Language:LLVM 27.8%Language:Assembly 10.8%Language:C 10.8%Language:Python 1.4%Language:Objective-C 0.7%Language:HTML 0.4%Language:CMake 0.3%Language:MLIR 0.3%Language:Objective-C++ 0.2%Language:Shell 0.2%Language:Cuda 0.1%Language:Go 0.1%Language:OCaml 0.1%Language:Perl 0.1%Language:Makefile 0.1%Language:Awk 0.0%Language:M4 0.0%Language:JavaScript 0.0%Language:TeX 0.0%Language:CSS 0.0%Language:MATLAB 0.0%Language:Roff 0.0%Language:Emacs Lisp 0.0%Language:Batchfile 0.0%Language:Smalltalk 0.0%Language:TypeScript 0.0%Language:Cool 0.0%Language:C# 0.0%Language:Pawn 0.0%Language:Vim Script 0.0%Language:Fortran 0.0%Language:PHP 0.0%Language:Dockerfile 0.0%Language:Mathematica 0.0%Language:NASL 0.0%Language:M 0.0%Language:SWIG 0.0%Language:SuperCollider 0.0%Language:Common Lisp 0.0%Language:AppleScript 0.0%Language:Mercury 0.0%Language:Pascal 0.0%Language:Forth 0.0%Language:GDB 0.0%Language:RenderScript 0.0%Language:Starlark 0.0%Language:R 0.0%Language:DTrace 0.0%Language:Swift 0.0%Language:Rust 0.0%Language:Lua 0.0%Language:Logos 0.0%