JLang은 Java를 LLVM IR로 변환하는 리프팅 도구이며, APK 내 class 코드를 Java로 변환한 후 생성된 Java 파일을 JLang을 이용해 IR로 변환하여 대상 함수에 대한 IR 소스코드를 바탕으로 LibFuzzer을 이용하여 퍼징 테스트를 도와줄 수 있다.

 

[환경]

- 우분투 18.04

 

- JLang 
$ git clone https://github.com/polyglot-compiler/JLang.git

- JDK 이전버전 제거
$ sudo apt-get remove openjdk*
$ sudo apt-get remove oracle*
$ sudo apt-get autoremove --purge
$ sudo apt-get autoclean

- JDK 7 설치
$ sudo mkdir -p /usr/local/java
$ sudo cp -r jdk-7u80-linux-x64.tar.gz /usr/local/java/
$ cd /usr/local/java
$ sudo tar xvzf jdk-7u80-linux-x64.tar.gz
$ sudo vim /etc/profile
==========================================
맨 밑에 추가
==========================================
JDK7=/usr/local/java/jdk1.7.0_80
JRE_HOME=/usr/local/java/jdk1.7.0_80
PATH=$PATH:$JDK7_HOME/bin:$JDK7_HOME/bin
export JDK7
export JDK7_HOME
export PATH
==========================================
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.7.0_80/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.7.0_80/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.7.0_80/bin/javaws" 1
$ sudo update-alternatives --set java /usr/local/java/jdk1.7.0_80/bin/java
$ sudo update-alternatives --set javac /usr/local/java/jdk1.7.0_80/bin/javac
$ sudo update-alternatives --set javaws /usr/local/java/jdk1.7.0_80/bin/javaws
$ source /etc/profile

- JDK 8 설치
$ sudo mkdir -p /usr/local/java
$ sudo cp -r jdk-8u231-linux-x64.tar.gz /usr/local/java/
$ cd /usr/local/java
$ sudo tar xvzf jdk-8u231-linux-x64.tar.gz
$ sudo vim /etc/profile
==========================================
맨 밑에 추가
==========================================
JDK8=/usr/local/java/jdk1.8.0_231
JDK_HOME=/usr/local/java/jdk1.8.0_231
PATH=$PATH:$JDK_HOME/bin:$JDK_HOME/bin
export JDK
export JDK_HOME
export PATH
==========================================
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_231/bin/java" 2
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_231/bin/javac" 2
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_231/bin/javaws" 2
$ sudo update-alternatives --set java /usr/local/java/jdk1.8.0_231/bin/java
$ sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_231/bin/javac
$ sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_231/bin/javaws
$ source /etc/profile

- LLVM 5.0, Clang 5.0 설치 설치
버전 체크 : llc --version, clang++ --version
$ sudo apt-get install clang-5.0 llvm-5.0
$ sudo ln -s /usr/bin/clang++-5.0 /usr/bin/clang++
$ sudo ln -s /usr/bin/llc-5.0 /usr/bin/llc

- gc-7.6.4 설치
$ wget https://www.hboehm.info/gc/gc_source/gc-7.6.4.tar.gz
$ tar -xvf gc-7.6.4.tar.gz
$ cd gc-7.6.4/
$ git clone https://github.com/ivmai/libatomic_ops.git
$ brew install boehmgc
$ ./configure; make; sudo make install

- Git LFS 설치
$ sudo apt-get install curl
$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
$ sudo apt-get install git-lfs

- ANT 설치
$ sudo apt-get install ant

- Boehm-Demers-Weiser garbase collector 설치
$ sudo apt-get install libgc-dev

 

- 빌드

$ make

'Android' 카테고리의 다른 글

Samsung Firmware Reference  (0) 2021.02.02
scrcpy 명령어  (0) 2021.01.05
Android Network Capture with ADB  (0) 2020.05.25
Android AOSP Build  (0) 2019.12.19
JLang Build  (0) 2019.12.02
VMware에서 Android X86 설치  (2) 2019.11.23