SQLi.py

2016.11.02 14:02

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

LLVM -3

System 2016.08.24 16:48

지난번 설치까지 끝을 냈다. 그럼 사용을 하는걸로 넘어가 보도록 하자.


1. clang? clang!


처음 설치하고 llvm을 실행해보려고 llvm 파일을 찾았더니 아무리 찾아도 없어서 상당히 당황했다.


여기저기 찾아본 결과, 실행파일명은 llvm이 아니라 clang 이라는걸 알기까지 다소 시간이 걸렸다.


우선 테스트 해볼 소스코드는 아래와 같이 간단하다



쓰이지도 않을 c라는 변수와 함께 HIHIHIHIIH를 출력하고 종료하는 단순한 프로그램이다.


이 프로그램을 각각 gcc와 clang(llvm)으로 컴파일 해 볼 예정이다.


우선 clang을 통해서 컴파일 한 것은 test,

gcc를 통해서 컴파일 한것을 test2으로 지정한 후, 두 파일의 opcodes 를 비교하는걸로 시작하자.


먼저 test ( clang )의 결과물이다.



60 라인( 실제로는 라인 수가 아니지만) 이 출력된 것을 볼 수 있다. 


이제 test2 (gcc)를 보도록 하자.


47 라인으로 끝나는 것을 볼 수 있다. 실제로 아래쪽의 코드가 c언어와 매칭하기 더욱 편한것을 느꼈다.


clang을 통해서 쓰는것이 좀더 쓸데없는? 코드를 더 넣는것 같다.



2. 난독화


llvm을 접하게 되면서 가장 관심이 깊었던건 역시 난독화 분야이다. 이 난독화를 테스트 해보기위해 여기저기 뒤진결과 공식 페이지에 사용방법이 나와있는것을 발견했다.



해당 옵션들을 사용해서 두 파일의 난독화 정도를 비교하기 위해 소스코드를 조금만 더 복잡하게 짜서 테스트 해 보기로 하였다.



코드는 55809와 xor 한 결과값을 두고 문구를 출력하는 간단한 프로그램이다. 분기문이 있어야 될것 같아서 몇가지의 분기문을 추가하고 이 것을 컴파일 해 보았다.


우선 일반적으로 clang을 통해 컴파일 한 결과의 그래프는 아래와 같다



마지막 네모 4개를 보아서 저 부근이 switch 문으로 확인할 수 있다. 크게 복잡하지 않은 구조임을 한눈에 확인 할 수 있다.


이제 모든 옵션을 가미한 결과물의 그래프를 보자.



보기만해도 상당히 암이 걸린다. 위에서 적었다 시피 코드가 크게 복잡하지 않음에도 불구하고 이렇게 암걸리는 코드를 생성해 낼 수 있다.


이걸 NDK에 적용하려고 생각하니 벌써부터 신이 난다


3. 일단 마무리


NDK 설정을 해줘야 하기도하고, 이것을 따로 적용시켜주기도 해야하고.. 다음 포스팅까지는 아마 시간이 길게 걸릴것 같다.



----------------------------------------------------------------------------------------------------------------------------------------------

Reference


NOP


'System' 카테고리의 다른 글

How 2 heap - fastbin_dup.c  (0) 2017.05.16
How 2 heap - first_fit.c  (0) 2017.05.15
LLVM -3  (2) 2016.08.24
LLVM - 2  (0) 2016.08.17
LLVM - 1  (0) 2016.08.12
프로그램에서 일어날수 있는 레이스컨디션의 예제  (8) 2015.04.01
Posted by Maid:: IzayoiSakuya

댓글을 달아 주세요

  1. 김태인 2017.01.14 21:50  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 잘 보고 가요 ^^

LLVM - 2

System 2016.08.17 10:35

LLVM 이 무엇인지 알았으니 간략히 설치를 해 보려 한다.


자세한 설치법은.. 역시 공식 사이트를 참조 하는게 가장 좋지만, 그게 귀찮고 힘든 사람들을 위해서 따로 적는것도 나쁘지 않다고 생각한다.


1. LLVM Source Download


16년 8월 17일 현재시간을 기준으로 가장 최근에 올라와 있는 버전은 3.8.1 이다. 하지만 여기서는 Android Obfuscate 를 목적으로 LLVM을 설치하고 있으므로..


3.6.1 버전을 기준으로 설치를 시작한다. 물론, 다른 버전도 설치 방법은 여타 동일하다.


우선은 다운로드 페이지 로 이동해서 3.6.1 버전의 llvm 소스와 clang 소스를 받자.



다른버전을 사용하실 분들께서는 다른버전의 Clang과 LLVM을 받아주시면 된다. 중요한것은, 해당 버전에 맞게 받아 주어야 한다는 것이다.


llvm을 받아서 커스터마이징을 해보고 싶은 분들은 위의 방법과 같이 소스를 받으시면 되고,


난독화를 위해 이미 만들어진 llvm을 사용하시고 싶은 분들은  GIT으로 그 소스가 제공되고 있으며, git clone -b llvm-3.6.1 https://github.com/obfuscator-llvm/obfuscator.git 명령어 입력으로 다운로드 받을 수 있다.


설치방법은 이하 동일하기 때문에 큰 상관이 없다!


2. 설치하기


일단 LLVM의 소스코드를 적절한 디렉토리에 풀고 나면 해당 경로 내부에 tools 라는 폴더가 있다.


이 폴더 안에 Clang의 소스코드를 풀도록 하자.


LLVM

   - Tools

       -Clang

           -Clang의 내용물


의 형태가 되도록 풀어 주어야 한다.

tar 형식으로 되어 있으니 tar -xvf 명령어 등을 사용하여 풀면 된다.


3. 컴파일 시작! 전에


설치 가이드 에서는 cmake를 사용하고 있다. cmake 버전 또한 높은 버전을 요구하므로 cmake의 소스를 받아서 컴파일을 먼저 해 주도록 하자.


여기에서 그 소스들을 다운 받을수 있으며, 간단하게 ./configure 와  make를 실행하는것으로 cmake의 컴파일이 끝난다.


4. 본격적인 컴파일


모든 준비가 되었으면 LLVM 소스코드 폴더 바깥에 임의의 폴더를 하나 만들자. 설치 가이드 에서는 build 라는 폴더로 만들었으니 우리도 친절하게 mkdir build 라고 적어주자.

이제 이 경로에서 cmake -G "Unix Makefiles" ../llvm코드경로 를 입력해 주면 여러 메세지가 나오면서 마지막에 Configure가 완료 되었다고 뜬다.

이후 make 명령어를 입력하여 최종 컴파일에 돌입하자.



컴파일이 쭉쭉 진행되고 있다. 덧붙여서 해당 컴파일은 시간이 상당히 오래 걸리므로 충분히 쉬다가 오셔도 상관 없을것 같다.


-----------------------------------------------

Referer : http://cd80.tistory.com/97

'System' 카테고리의 다른 글

How 2 heap - fastbin_dup.c  (0) 2017.05.16
How 2 heap - first_fit.c  (0) 2017.05.15
LLVM -3  (2) 2016.08.24
LLVM - 2  (0) 2016.08.17
LLVM - 1  (0) 2016.08.12
프로그램에서 일어날수 있는 레이스컨디션의 예제  (8) 2015.04.01
Posted by Maid:: IzayoiSakuya

댓글을 달아 주세요