일단 공식 홈페이지에서 .tar 을 받는다. 다운로드
pin 과 pin tool은 다르다. pin의 자세한 매커니즘은 잘 모르겠지만 intermediate representation(IR) 을 이용해서 각각의 인스트럭쳐가 해석된다. 이 때 각각 해석되는 변수들은 SSA-based(Static Single Assignment) 형태로 다뤄진다고 한다. SSA=based는 만약 a=3; a += 34; 라는 코드가 있다면 첫번째 a와 두번 째 a를 다르게 취급하는 형태 이다. 유사한 툴로는 Valgrind가 있다.
pin tool은 사용자가 공유라이브러리의 형태로 만들수 있고, pin에서 각각 인스트럭쳐를 fetch 하기 전, execute 한 후 , 라이브러리 로딩등의 상황에서 사용자가 원하는 행위들을 하도록 하게 해준다.
따라서 각각 상황에서 메모리 Status나 레지스터 값 등을 확인 할 수 있다.
이를 보안적 관점에서 바라보면, 만약 간단한 크랙미같은 것이 있다고 한다면, 각 if 문 전에 사용자 입력 값들이 어떻게 들어가는지 확인하고, 각각 값들을 심볼로 설정해 smt_solver 등과 함께 if문에 조건에 맞는 input값을 찾아내어 풀수있다. (이에 대한 것들은 구글링이나 http://shell-storm.org/blog/Taint-analysis-and-pattern-matching-with-Pin/ 여기를 참고하자) 더 발전해선 AEG(auto exploit generation) 등이나 제네릭한 퍼져도 만들 수 있을 것 같다.
아무튼, 일단 설치를 완료하면 pin을 컴파일 해야 할 것 같은데, 압푹을 풀면 바이너리가 있고 다양한 소스코드 예제들이 많다.. 메뉴얼과 튜토리얼 등을 참고해서 분석해 봐야겠다.
일단 pin 의 위치경로를 /etc/environment 에 설정하자. 그 다음 여기를 한번 보자.
다양한 소스들이 많다.. MyPinTool, ManualExamples... 등에 들어가서 makefile을 보면 makefile.rules을 인클루드 하고 있고 룰을 보면 다음과 같다
컴파일 방법은 다음과 같다.
$ cd source/tools/ManualExamples $ make obj-intel64/inscount0.so TARGET=intel64
$ cd source/tools/ManualExamples $ make obj-ia32/inscount0.so TARGET=ia32
이 때 자기가 직접 만든 코드를 컴파일 하려고 하면 makefile.rules 에서 TEST_TOOL_ROOTS에 자기가 만든 파일명을 더 추가하고 위의 방법으로 컴파일 하면 된다. 실행은 다음과 같다.
$ ../../../pin -t obj-intel64/inscount0.so -- /bin/ls Makefile atrace.o imageload.out itrace proccount Makefile.example imageload inscount0 itrace.o proccount.o atrace imageload.o inscount0.o itrace.out $ cat inscount.out Count 422838 $
'Analysis' 카테고리의 다른 글
PinTool을 이용한 Instruction 추적하기, 간단한 ctf 풀이 (0) | 2016.01.30 |
---|---|
Pin 기본 API살펴보기 (0) | 2015.08.07 |
[smt solver]z3py 튜토리얼 (0) | 2015.08.06 |