본문 바로가기

My Study/Reversing

OllyDbg v1.10 기능과 v2.00에 추가된 기능 하나

직접 써보고 메뉴얼을 읽어보던 중 이런 기능은 정말 괜찮다..! 라고 생각한 것 일단 3가지 정도만 설명해볼까합니다.
일단 디스어셈블링 능력은 v1.10보다 v2.00으로 오면서 훨씬 좋아졌습니다. 아마 직접 1.10과 2.0으로 비교하면서 분석하시면 조금이나마 체감하실수 있을 것입니다. comment부분도 전 버전보다 훨씬 자세히 알려줍니다.

일단 소개하고자 하는 기능 3가지를 말해보겠습니다.
1. Trace into                ( v1.10에 있음 )
2. Hit trace                   ( v1.10에 있음 )
3. Condition BreakPoint ( Software BP만 v1.10에 있음 )

( 제가 v1.10에 있는 모든 기능을 다 쓰고 있진 안더군요. 
   Hit trace와 Software BP에 Condition걸 수 있다는 기능을 문서 쓰면서 알게됬습니다. )

1. Trace into
이것은 제가 뒷북일지 몰라도 v1.10에서는 사용못했던걸로 기억해서 소개해봅니다.
Trace into라는 기능은 v1.10에서도 있는 기능입니다. 하지만 같은 Trace into이지만 조금 다른점이 있더군요.

일단 테스트를 위해 프로그램을 만들겠습니다. 코드 또한 간단합니다. 코드를 보시겠습니다.

코드는 간단하게 짰습니다. 하나의 API함수를 사용하고 있고 sum이라는 함수 하나 만들었습니다.
컴파일은 Release (/MT)(/Od) 로 했습니다. 
( Od는 컴파일시 최적화를 시켜버리면 제가 원하는 코드가 안나옵니다.. ^^; )

일단 Olly v1.10을 열어서 해당 부분을 보겠습니다.

문자열 다음에 나오는 함수들은 printf라는 것을 아실태고.. 빨간색 네모친 함수는 제가 만든 함수인 sum함수입니다.
그 사이에 sleep이라는 API함수도 잘 보이는군요. 이제 Trace into를 0x401000~0x401060 까지 해보겠습니다.

쭉 Trace 결과가 나오는데 나머지는 다 볼필요없고 Sleep 함수 부분만 보도록 하겠습니다.

Trace into 하면 원래 함수 내부까지 들어와서 트레이스를 하게됩니다. 
여기서 보니 API함수인 Sleep함수 내부까지도 들어와서 트레이스하고 있는 것을 볼수 있습니다.

이번에는 Olly v2.00버전에서 Trace into를 해보도록 하겠습니다.

( v2.0은 이렇게 검은색으로 바꿔서 쓰고있습니다. 이유는.... 더 분석하는데 멋있고.. 눈이 덜아프네요. )
일단 분석 결과를 보시겠습니다. 가장 위에 Sleep 함수가 보입니다.
하지만 CALL만 할 뿐 API함수 내부로 들어오고 있진 않습니다.
그 아래 0x401070 함수를 CALL하고 있습니다. 해당 함수는 제가 만든 sum함수 입니다.
하지만 API함수처럼 건너뛰는게 아니라 옆 주소를 보니 함수 내부로 들어왔습니다.

확실히 똑같은 Trace into 이지만 기능에 차이가 있습니다.
v2.00에서의 Trace into 정리입니다.
API함수를 만나면 내부로 들어가지 않고 일반 함수를 만나면 내부까지 들어와서 분석을 한다.

정말 제가 원하던 기능이었습니다. 혹시 v1.10에서도 어떠한 설정으로 이렇게 할수있다면.. 가르침을 주십시오 ^^;

그리고 위 Trace into 결과를 보면 [LOCAL.4], [ARG.1] 이런식으로 있는 것을 볼수 있는데요. 아마.. 올디좀 쓰신분들은 바로 눈치채셨겠지요. 바로 [EBP-8] -> [LOCAL.1] , [EBP+8] -> [ARG.1]  이런식으로 바뀌었습니다.
v2.00의 능력이지요. -_-;; 하핫.. 

그 다음날.. 스스로 발견했습니다 ㅜ ㅜ.. 해당 기능은 역시나 v2.00에서만 있던게 아니었습니다.

Trace 옵션에서 빨간색 네모친 부분에 체크를 해주게되면 시스템 DLL의 함수는 넘어가게 됩니다..^^;;
하나하나 알아가야겠군요. 
결론은 v1.10과 v2.00과 다른점이 없군요. 그냥 기능 소개차 글 쓴걸로봐주세요 -_ㅠ

2. Hit trace
이 기능은 지금 있는 지점부터 멈추는 지점까지 트레이스된 흔적을 나타내는 것입니다.
바로 보여드리겠습니다.
일단 프로그램 소스입니다.

달라진점은 a가 2가 아니라면 sum을 하지않고 종료되는 프로그램입니다.

올디로 보겠습니다.

0x401000~0x40106D 까지 Hit Trace를 하겠습니다.


어셈블리 코드 옆에 빨간색 점이 보이시나요?? ^^
Hit Trace결과 생긴 점들입니다. 바로 멈추는 지점까지 트레이스 흔적을 빨간색 점으로 나타내주는 기능입니다.
훨씬 분석을 빨리 할 수 있을것 같습니다. 
참고로 Hit Trace를 하면 트레이스과정중 거쳤던 함수 내부까지도 빨간색 점을 찍어주게 됩니다. 직접 확인해보세요~!

제 생각인데 Hit trace기능은 비쥬얼만 v2.0이 좋고 Hit trace 원 기능은 v1.10이 더 나은거 같습니다.

3. Condition BreakPoint
말 그대로 조건부 브레이크 포인트를 거는 것입니다. 이 기능은 정말 유용하게 사용될 기능같습니다. 위 기능도 많이 사용할꺼지만요~! 일단 이 기능을 테스트할 프로그램 하나 만들겠습니다.

입력되는 밀리초에 따라 Sleep되는 시간이 달라지는 프로그램입니다.

올디에서 보도록 하겠습니다.

Sleep함수를 호출하면서 인자로 ECX를 PUSH하고 있습니다.
저기 PUSH ECX부분에 Software BP를 걸어보도록 하겠습니다.


해당 코드에 마우스를 대고 우클릭 하고 위와 같이 하면 Software BP가 걸리게 됩니다.

하지만 여기선 그냥 BP를 거는게 목표가 아니기 때문에 그 아래있는 Conditional log... 를 클릭합니다.

Condition에는 조건을 적어줍니다.
그리고 그 아래 Pause program에는 On condition으로 바꿔줍니다.

위와 같이 브포를 설정하게 되면 주소부분이 보라색으로 나타납니다.

이건.. 색 지정옵션에서 바꿀수 있구요.

일단 테스트를 해보면 ECX가 100일 경우 멈추고 아닐 경우는 해당 브포를 안멈출 것입니다.

그리고 v2.00에서는 Hardware BP도 조건을 걸수 있게끔 추가가됬습니다.

사용법이야 Software BP랑 똑같으니 설명은 필요없을것 같군요.


지금까지 3가지 기능을 알아보았는데 위 기능들을 잘 쓰면 아주 유용하고 빠르게 분석할수 있을 것같습니다.

근데 왜..!! v2.0에는 콜스택 보는 기능이 사라졌냐구요 ㅜ_ㅜ......
제 생각인데 아직은 플러그인 지원도 되고 콜스택도 볼수있고.. v1.10이 분석하는데 훨씬 나은거 같습니다.

'My Study > Reversing' 카테고리의 다른 글

C++ 참조자 어셈블리로 어떻게??  (0) 2010.07.27
GODUP플러그인  (0) 2010.07.25
Hand-Ray 연습..!!  (2) 2010.06.05
OF, CF, SF를 알아보자  (6) 2010.06.03
TEB안의 SEH를 알아보자.  (2) 2010.05.20